最近上线一个hadoop离线处理项目,因为在低配置(8G,4核)的时候装的CDH,后来集群配置(64G,16核)上来了,但许多参数不会自动修改,需要自己调整,处理过程中遇到的配置问题记录下。

1、hive

跑任务的时候发现reduce任务个数特别多,后来发现这个参数被改成64M了,改成1G就好了。

hadoop推测的reduce个数基本上是用输入数据的大小除以这个参数得出来的。

    set hive.exec.reducers.bytes.per.reducer=1G

2、yan

每个map,reduce的内存大小,

    set mapreduce.map.memory.mb=2G
set mapreduce.reduce.memory.mb=4G

修改yarn最大可用内存、cpu。机器配置变动的时候要记得修改这个配置,不然,要不资源不够用, 要不加了资源又没用到

    set yarn.nodemanager.resource.memory-mb=节点内存的2/3
set yarn.nodemanager.resource.cpu-vcores= node节点的cpu数

启用JVM重用

    set mapreduce.job.ubertask.enable=true
set mapreduce.job.ubertask.maxmaps=9
set mapreduce.job.ubertask.maxreduces=1
set mapreduce.job.ubertask.maxbytes=128M

3、hdfs

 没做权限控制,取消hdfs权限检查,省去许多麻烦

    set dfs.permissions=false

4、运行中报错

报文件已存在、文件丢失之类的错误(Caused by: org.apache.hadoop.fs.FileAlreadyExistsException),后来 发现是在开启了本地模式下,用shell命令同时并发的跑好几个任务时就会出问题。去掉本地模式,用集群跑任 务就好了。

    set hive.exec.mode.local.auto=true;
03-16 06:14