查看: 2580|回复: 12

分享一个非常经典的Hive优化案例

  [复制链接]

637

主题

821

帖子

7781

积分

分区版主

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

贡献
79
技术
53
活跃
11
在线时间
75 小时
擅长技术
思科华为
发表于 2015-1-30 17:06:38 | 显示全部楼层 |阅读模式
1. 通常情况下,作业会通过input的目录产生一个或者多个map任务。
主要的决定因素有: input的文件总个数,input的文件大小,集群设置的文件块大小(目前为128M, 可在hive中通过set dfs.block.size;命令查看到,该参数不能自定义修改);

2. 举例:
a) 假设input目录下有1个文件a,大小为780M,那么hadoop会将该文件a分隔成7个块(6个128m的块和1个12m的块),从而产生7个map数
b) 假设input目录下有3个文件a,b,c,大小分别为10m,20m,130m,那么hadoop会分隔成4个块(10m,20m,128m,2m),从而产生4个map数即,如果文件大于块大小(128m),那么会拆分,如果小于块大小,则把该文件当成一个块。

3. 是不是map数越多越好?
答案是否定的。如果一个任务有很多小文件(远远小于块大小128m),则每个小文件也会被当做一个块,用一个map任务来完成, 而一个map任务启动和初始化的时间远远大于逻辑处理的时间,就会造成很大的资源浪费。而且,同时可执行的map数是受限的。

4. 是不是保证每个map处理接近128m的文件块,就高枕无忧了?
答案也是不一定。比如有一个127m的文件,正常会用一个map去完成,但这个文件只有一个或者两个小字段,却有几千万的记录, 如果map处理的逻辑比较复杂,用一个map任务去做,肯定也比较耗时。针对上面的问题3和4,我们需要采取两种方式来解决:即减少map数和增加map数;

购买主题 本主题需向作者支付 3 金币 才能浏览

0

主题

212

帖子

1155

积分

Mib

Rank: 4

贡献
0
技术
0
活跃
402
在线时间
18 小时
发表于 2015-1-30 20:29:58 | 显示全部楼层
楼主好人一生平安

0

主题

265

帖子

1495

积分

Mib

Rank: 4

贡献
0
技术
0
活跃
125
在线时间
10 小时
发表于 2015-5-5 23:12:15 | 显示全部楼层
分享一个非常经典的Hive优化案例分享一个非常经典的Hive优化案例

1

主题

1313

帖子

9035

积分

论坛贵宾VIP-永久权限

Rank: 8Rank: 8

贡献
0
技术
0
活跃
1190
在线时间
255 小时

有钱银!

发表于 2016-6-7 09:13:08 | 显示全部楼层
每天认真学习一点点~一点点~一点点~

1

主题

1436

帖子

9489

积分

论坛贵宾VIP-永久权限

Rank: 8Rank: 8

贡献
0
技术
0
活跃
1449
在线时间
171 小时
发表于 2017-8-28 22:32:18 | 显示全部楼层
感谢分享,感谢分享

1

主题

729

帖子

4931

积分

论坛贵宾VIP-永久权限

Rank: 8Rank: 8

贡献
0
技术
-1
活跃
1081
在线时间
41 小时
发表于 2017-11-20 16:46:25 | 显示全部楼层
ddddddddddddddddddddddddddddddddd

0

主题

512

帖子

3084

积分

论坛贵宾VIP-永久权限

Rank: 8Rank: 8

贡献
0
技术
0
活跃
344
在线时间
37 小时
发表于 2018-5-16 17:36:30 | 显示全部楼层
挺好挺好挺好挺好挺好
使用 高级模式(可批量传图、插入视频等)
您需要登录后才可以回帖 登录 | 立即注册

快速回复 返回顶部 返回列表