ZKX's LAB

hive 控制map数 如何提升hive脚本的map数

2020-07-22知识13

如何提升hive脚本的map数 一、控制hive任务中的map数: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),那么会拆分,如果小于块大小,则把该文件当成一个块。hive 如何insert 数组和map Map使用建表:[plain]view plaincopyhive>;create table employee(id string,perf map,int>;)ROW FORMAT DELIMITEDFIELDS TERMINATED BY '\\t'COLLECTION ITEMS TERMINATED BY ','MAP KEYS TERMINATED BY ':';OKTime taken:0.144 seconds‘MAP KEYS TERMINATED BY’:key value分隔符导入数据:[plain]view plaincopycat test7.txt1 job:80,team:60,person:702 job:60,team:803 job:90,team:70,person:100hive>;LOAD DATA LOCAL INPATH '/home/work/data/test7.txt' INTO TABLE employee;hive left semi join map是在哪个阶段 hive不支持’left join’的写法;hive的left outer join:如果右边有多行和左边表对应,就每一行都映射输出;如果右边没有行与左边行对应,就输出左边行,右边表字段为NULL;。怎么设置hive中map 个数 控制hive任务中的map数: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处理的。

#hive#hadoop#数据处理#input

随机阅读

qrcode
访问手机版