图解数据

数据架构

数据处理过程

案例

数据采集

数据存储

HDFS

  • read HDFS[1]

  • write HDFS[2]

数据计算

离线计算

MapReduce

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

  • 透视 MapReduce1 Job [4]

  • 透视MapReduce on YARN[5]

实时计算

Storm

内存计算

Spark

Hive

hive 架构[6]<\sup>

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编译过程的设计

数据应用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容