图解数据

数据架构

数据处理过程

图解数据_第1张图片

案例

图解数据_第2张图片

数据采集

数据存储

HDFS

  • read HDFS[1]

    图解数据_第3张图片

  • write HDFS[2]

    图解数据_第4张图片

数据计算

离线计算

MapReduce

  • 2个reduce task 的数据流[3]
    map size 公式 : max{ ${mapred.min.split.size},min(${dfs.block.size},${mapred.max.split.size})}

    图解数据_第5张图片

  • 透视 MapReduce1 Job [4]

    图解数据_第6张图片

  • 透视MapReduce on YARN[5]

图解数据_第7张图片

实时计算

Storm

内存计算

Spark

Hive

hive 架构[6]<\sup>

图解数据_第8张图片

hive常见问题总结

  • 内存相关配置
set mapred.child.java.opts=-Xmx200m;  #设置task启动的java虚拟机能够从操作系统那里挖到最大内存大小,建议为内存一半.
set mapreduce.task.io.sort.mb=573; #默认是100
set mapred.child.java.opts -Xmx200m;
set mapreduce.map.java.opts -Xmx1024m
set mapreduce.reduce.java.opts  -Xmx1228m
set mapreduce.task.io.sort.mb=950
--------------
mapreduce.map.memory.mb 1024
mapreduce.reduce.memory.mb  1536
yarn.nodemanager.resource.memory-mb 153600
yarn.app.mapreduce.am.resource.mb   896
  • 数据倾斜
  • group by
    Group过程的数据倾斜,set hive.map.aggr=true (默认开启),在map端完成聚合,来优化倾斜。也就是在mapper内部,做部分的聚合,来输出更少的行,减少需要排序和分发到reducer的数据量。
    Hive在尝试做此优化,不过会判断aggregation的效果,如果不能节省足够的内存,就会退回标准map过程。也就是在处理了100000 行(hive.groupby.mapaggr.checkinterval 控制)后,检查内存中的hash map的项,如果超过50%(hive.map.aggr.hash.min.reduction 控制),则认为聚合会被终止。
    Hive同样会估计hash map中每一项所需要的内存,当使用的内存超过了mapper可用内存的50%( hive.map.aggr.hash.percentmemory 控制),则会把flush此hash map到reducers。然而这是对行数和每行大小的估计,所以如果实际值过高,可能导致还没有flush就out of memory了。
    当出现这种OOM时,可用减少hive.map.aggr.hash.percentmemory, 但是这个对内存增长与行数无关的数据来说,不一定是有效的。这个时候,可以使用关闭以下方法,
  1. map端聚合set hive.map.aggr=false
  2. 给mapper分配更多的内存
  3. 重构query查询。利用子查询等方法,优化查询语句
select count(distinct v) from tbl
改写成
select count(1) from (select v from tbl group by v) t.

Group过程倾斜,还可以开启hive.groupby.skewindata=true来改善,这个是让key随机分发到reducer,而不是同样的key分发到同一个reducer,然后reduce做聚合,做完之后再做一轮map-reduce。这个是把上面提到的map端聚合放到了reduce端,增加了reducer新的开销,大多数情况效果并不好。

  • join
  1. map join可以解决大表join小表时候的数据倾斜
  2. skew join是hive中对数据倾斜的一个解决方案,set hive.optimize.skewjoin = true;
    根据hive.skewjoin.key(默认100000)设置的数量hive可以知道超过这个值的key就是特殊key值。对于特殊的key,reduce过程直接跳过,最后再启用新的map-reduce过程来处理。
    业务数据本身的倾斜,可以从业务数据特点本身出发,通过设置reduce数量等方式,来避免倾斜

Hive SQL编译为MapReduce的过程

  • MapReduce实现基本SQL操作的原理
  • Join的实现原理
  • Group By的实现原理
  • Distinct的实现原理
  • SQL转化为MapReduce的过程
  • Phase1 SQL词法,语法解析
  • Phase2 SQL基本组成单元QueryBlock
  • Phase3 逻辑操作符Operator
  • Phase4 逻辑层优化器
  • Phase5 OperatorTree生成MapReduce Job的过程
  • Phase6 物理层优化器
  • Hive SQL编译过程的设计

数据应用

你可能感兴趣的:(图解数据)