HIVE控制导出数据的大小和数量

工作中碰到个需求,需要我去SFTP服务器采集HIVE导出的数据,由于这个大数据平台设计问题,很多东西没考虑到,他们的导出方式是用HIVE提供的insert overwrite local directory这个语句来导出HIVE数据。

导出文件的大小和数量,以及每个文件的平均大小对于我的采集程序而言都是有影响的。由于他们平台设计的问题,导致只能嵌入sql,所以这面我需要通过hive sql的一些设置来实现这个功能。


HIVE设置reduce的数量

set mapred.reduce.tasks=5;

HIVE导出数据的语句

insert overwrite local directory '/opt/test/data' row format delimited fields terminated by '\t' select customer_id, customer_fname, customer_zipcode from customers cluster by customer_zipcode

hive> set mapred.reduce.tasks=5;
hive> insert overwrite local directory '/opt/test/data' row format delimited fields terminated by '\t' select customer_id, customer_fname, customer_zipcode from customers cluster by customer_zipcode; 
Query ID = hdfs_20190111202929_76c074d9-c0ac-4073-a867-4c69aca85c7d
Total jobs = 1
Launching Job 1 out of 1
Number of reduce tasks not specified. Defaulting to jobconf value of: 5
In order to change the average load for a reducer (in bytes):
  set hive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number of reducers:
  set hive.exec.reducers.max=<number>
In order to set a constant number of reducers:
  set mapreduce.job.reduces=<number>
Starting Job = job_1544843719855_0021, Tracking URL = http://quickstart.cloudera:8088/proxy/application_1544843719855_0021/
Kill Command = /usr/lib/hadoop/bin/hadoop job  -kill job_1544843719855_0021
Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 5
2019-01-11 20:30:06,871 Stage-1 map = 0%,  reduce = 0%
2019-01-11 20:30:18,011 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 3.85 sec
2019-01-11 20:30:29,015 Stage-1 map = 100%,  reduce = 20%, Cumulative CPU 6.36 sec
2019-01-11 20:30:30,091 Stage-1 map = 100%,  reduce = 40%, Cumulative CPU 8.78 sec
2019-01-11 20:30:39,016 Stage-1 map = 100%,  reduce = 60%, Cumulative CPU 8.78 sec
2019-01-11 20:30:40,077 Stage-1 map = 100%,  reduce = 80%, Cumulative CPU 13.86 sec
2019-01-11 20:30:47,615 Stage-1 map = 100%,  reduce = 100%, Cumulative CPU 17.0 sec
MapReduce Total cumulative CPU time: 17 seconds 0 msec
Ended Job = job_1544843719855_0021
Copying data to local directory /opt/test/data
MapReduce Jobs Launched: 
Stage-Stage-1: Map: 1  Reduce: 5   Cumulative CPU: 17.0 sec   HDFS Read: 110232 HDFS Write: 215580 SUCCESS
Total MapReduce CPU Time Spent: 17 seconds 0 msec
OK
Time taken: 56.395 seconds
进入/opt/test/data文件夹查看结果
[root@quickstart data]# ll -h
total 220K
-rw-r--r-- 1 hdfs hdfs  25K Jan 11 20:30 000000_0
-rw-r--r-- 1 hdfs hdfs  28K Jan 11 20:30 000001_0
-rw-r--r-- 1 hdfs hdfs  26K Jan 11 20:30 000002_0
-rw-r--r-- 1 hdfs hdfs  28K Jan 11 20:30 000003_0
-rw-r--r-- 1 hdfs hdfs 107K Jan 11 20:30 000004_0

上面的语句如果customer_zipcode不均匀的话,会造成数据倾斜,比如 000004_0这个文件就比其他的文件要大,为了保证数据的均匀,故使用distribute by rand(),同时调整reduce数量为10,验证是否生成了10个结果文件
hive> set mapred.reduce.tasks=10;
hive> insert overwrite local directory '/opt/test/data' row format delimited fields terminated by '\t' select customer_id, customer_fname, customer_zipcode from customers distribute by rand(); 
Query ID = hdfs_20190111205252_2d4b8cde-7d9b-4276-94fa-8fa83b77b4db
Total jobs = 1
Launching Job 1 out of 1
Number of reduce tasks not specified. Defaulting to jobconf value of: 10
In order to change the average load for a reducer (in bytes):
  set hive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number of reducers:
  set hive.exec.reducers.max=<number>
In order to set a constant number of reducers:
  set mapreduce.job.reduces=<number>
Starting Job = job_1544843719855_0022, Tracking URL = http://quickstart.cloudera:8088/proxy/application_1544843719855_0022/
Kill Command = /usr/lib/hadoop/bin/hadoop job  -kill job_1544843719855_0022
Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 10
2019-01-11 20:52:24,166 Stage-1 map = 0%,  reduce = 0%
2019-01-11 20:52:33,763 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 4.71 sec
2019-01-11 20:52:45,572 Stage-1 map = 100%,  reduce = 20%, Cumulative CPU 9.66 sec
2019-01-11 20:52:55,322 Stage-1 map = 100%,  reduce = 40%, Cumulative CPU 14.71 sec
2019-01-11 20:53:03,935 Stage-1 map = 100%,  reduce = 50%, Cumulative CPU 17.42 sec
2019-01-11 20:53:06,107 Stage-1 map = 100%,  reduce = 60%, Cumulative CPU 20.6 sec
2019-01-11 20:53:13,643 Stage-1 map = 100%,  reduce = 70%, Cumulative CPU 22.89 sec
2019-01-11 20:53:14,718 Stage-1 map = 100%,  reduce = 80%, Cumulative CPU 25.14 sec
2019-01-11 20:53:21,092 Stage-1 map = 100%,  reduce = 90%, Cumulative CPU 27.3 sec
2019-01-11 20:53:23,198 Stage-1 map = 100%,  reduce = 100%, Cumulative CPU 29.8 sec
MapReduce Total cumulative CPU time: 29 seconds 800 msec
Ended Job = job_1544843719855_0022
Copying data to local directory /opt/test/data
MapReduce Jobs Launched: 
Stage-Stage-1: Map: 1  Reduce: 10   Cumulative CPU: 29.8 sec   HDFS Read: 126360 HDFS Write: 215580 SUCCESS
Total MapReduce CPU Time Spent: 29 seconds 800 msec
OK
Time taken: 68.831 seconds
hive> 

进入文件夹查看文件,可以看到一共10个文件,大小均匀
[root@quickstart data]# ll -h
total 240K
-rw-r--r-- 1 hdfs hdfs 21K Jan 11 20:53 000000_0
-rw-r--r-- 1 hdfs hdfs 22K Jan 11 20:53 000001_0
-rw-r--r-- 1 hdfs hdfs 21K Jan 11 20:53 000002_0
-rw-r--r-- 1 hdfs hdfs 22K Jan 11 20:53 000003_0
-rw-r--r-- 1 hdfs hdfs 22K Jan 11 20:53 000004_0
-rw-r--r-- 1 hdfs hdfs 22K Jan 11 20:53 000005_0
-rw-r--r-- 1 hdfs hdfs 22K Jan 11 20:53 000006_0
-rw-r--r-- 1 hdfs hdfs 21K Jan 11 20:53 000007_0
-rw-r--r-- 1 hdfs hdfs 21K Jan 11 20:53 000008_0
-rw-r--r-- 1 hdfs hdfs 22K Jan 11 20:53 000009_0
[root@quickstart data]# 

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

推荐阅读更多精彩内容

  • Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。本...
    felix521阅读 1,307评论 0 0
  • 数据仓库中的SQL性能优化(Hive篇) - 简书 //www.greatytc.com/p/808a5...
    葡萄喃喃呓语阅读 4,554评论 0 31
  • hive.ddl.output.format:hive的ddl语句的输出格式,默认是text,纯文本,还有json...
    博弈史密斯阅读 1,945评论 0 6
  • 前几天公司组织去乡村小学做志愿者的活动,从来没有做过志愿者的我,带着好奇报了名。 18号早上七点从公司集合,同事们...
    恕妈阅读 556评论 0 1
  • 一弄孩子功课便会狮子吼! 前面不是刚说过吗?怎么又不知道了! 3+1等于几这么简单的题你还在想什么? 就这么四个词...
    左脑希阅读 124评论 0 0