最近上线一个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;