zoukankan      html  css  js  c++  java
  • Hive简单优化;workflow调试

    1. 定义job名字

    SET mapred.job.name='customer_rfm_analysis_L1';

    这样在job任务列表里可以第一眼找到自己的任务。

    2. 少用distinct, 尽量用group by

    因为会把数据弄在一个reduce中,造成数据倾斜。distinct数据数量大于1000条时。

    3. join时小表最好放左边

    否则会引起磁盘和内存的大量消耗

    4. 小表和超大的表join时,可以使用map join

    能把小表写入内存中,便于多次读写。

    5. 如果union all的部分个数大于2

    或者每个union部分数据量大,应该拆成多个insert into 语句

    6. SQL里的通用设置

    --每个sql的代码都一样
    SET mapred.max.split.size=256000000;
    SET hive.exec.compress.output=true;
    SET mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
    SET mapred.output.compression.type=BLOCK;
    SET hive.exec.dynamic.partition=true;
    SET hive.exec.dynamic.partition.mode=nonstrict;
    set mapreduce.map.output.compress=true;
    set mapred.map.output.compress.codec = org.apache.hadoop.io.compress.SnappyCodec;
    set mapreduce.reduce.shuffle.input.buffer.percent =0.6;
    set mapreduce.reduce.shuffle.parallelcopies = 5;
    set hive.exec.max.created.files=655350;
    set hive.exec.max.dynamic.partitions=10000000;
    set hive.exec.max.dynamic.partitions.pernode=10000000;

    7. workflow

    1) coordinator 动态日期获取

           ${coord:formatTime(coord:dateOffset(coord:nominalTime(),-2,'DAY'), 'yyyy-MM-dd')}

    表示取当天的两天之前的日期(格式是 yyyy-MM-dd)

           ${coord:formatTime(coord:nominalTime(), 'yyyy-MM-dd')}

    表示取当天的日期(格式是 yyyy-MM-dd)

    注意: 当修改workflow后,需要重新提交coordinator才会生效。

    2) coordinator 时间设置

    要选用utc时区;

    设置时间为需求的执行时间 - 8 hours;

    3) coordinator 可以自动识别出 workflow中调用的参数,赋值给它即可。

        SQL中的参数要设置成 ${参数名这种},如果是字符串,'${字符串名}'

        workflow中设置参数为 ${参数名},不需要引号。

    4)workflow 参数可以上传一个文件。 文件该是什么格式??

    5)  半路结束,状态为failed。

    Halting due to Out Of Memory Error...

    GC overhead limit exceeded

    尝试方法:调大oozie的heapsize,解决!

    6)并发子workflow相互不能执行成功,状态为Succeeded。但实际上任务并未完成。是因为有相邻子workflow出现错误

    GC overhead limit exceeded
    Closing: 0: jdbc:hive2://spark-02:10000/default
    Intercepting System.exit(2)
    Failing Oozie Launcher, Main class [org.apache.oozie.action.hadoop.Hive2Main], exit code [2]

    8 oozie 可以调用 Hive QL,Spark, Java,Shell

    9 Bundle 跟workflow, coordinator 在同一个设置区。

    可以把多个coordinator打包成一个。



  • 相关阅读:
    WebService的学习
    什么是事物
    数组和链表的区别
    JDK6和JDK7中的substring()方法
    为什么存储密码字符数组比字符串更合适?
    java中Queue简介
    java中队列Queue的使用
    HashMap、Hashtable、TreeMap的区别
    笔试算法题(36):寻找一棵二叉树中最远节点的距离 & 根据二叉树的前序和后序遍历重建二叉树
    笔试算法题(35):最长递增子序列 & 判定一个字符串是否可由另一个字符串旋转得到
  • 原文地址:https://www.cnblogs.com/skyEva/p/5201638.html
Copyright © 2011-2022 走看看