Hadoop参数调优:
通过修改hadoop三个配置文件的参数来提高性能。主要有三个文件core-site.xml、hdfs-site.xml、mapred-site.xml。下面分别介绍这三个文件常用的参数配置。我们的环境上面的路径是: /usr/lib/hadoop/etc/hadoop
三个配置文件介绍:
core-site.xml
该文件中是集群的一些基本参数,与hadoop部署密切相关,但是对于性能优化作用不是特别明显。这里就简单介绍几个常用的配置参数。
fs.default.name | 主节点地址。 |
hadoop.tmp.dir | 集群的临时文件存放目录。 |
io.file.buffer.size | 系统I/O的属性,读写缓冲区的大小。 |
io.seqfile.compress.blocksize | 块压缩时块的最小块大小。 |
io.seqfile.lazydecompress | 压缩块解压的相关参数。 |
hdfs-site.xml
该文件与HDFS子项目密切相关,其参数对集群性能调整具有很大影响。
dfs.name.dir | 指定name镜像文件存放目录,如不指定则默认为core-site中配置的tmp目录。 |
dfs.data.dir | 真正的datanode数据保存路径,可以写多块硬盘,中间以逗号分隔。 |
dfs.replication | hdfs数据块的复制份数,默认3,理论上份数越多跑数速度越快,但是需要的存储空间也更多。 |
dfs.permissions | 是否需要角色权限验证,上传文件时会用到。一般设置false,设置为true有时候会遇到数据因为权限访问不了。 |
dfs.block.size | 每个文件块的大小,默认是64M,对于大型文件可以设置为128M。 |
dfs.namenode.handler.count | NameNode 节点上面为处理datanode节点来来气的远程调用的服务线程数量。 |
dfs.datanode.max.xcievers | 相当于linux下的打开文件最大数量,文档中无此参数,当出现DataXceiver报错的时候,需要调大。默认256 |
dfs.datanode.handler.count | datanode节点上为处理datanode节点的远程调用开启的服务线程数量,默认为3。当有很多HDFS客户端时可以设置更大。 |
mapred-site.xml
该文件与mapreduce计算模型密切相关,其中的参数对集群的性能影响很大。
mapred.job.tracker | Job tracker地址 |
mapred.job.tracker.handler.count | jobtracker服务的线程数,一般默认为15. |
mapred.map.tasks | 默认每个job所使用的map数,意思是假设设置dfs块大小为64M,需要排序一个60M的文件,也会开启2个map线程,当jobtracker设置为本地是不起作用。 |
mapred.reduce.tasks | 每个job的reduce任务数量,经常设置成与集群中存在的主机数量很接近的一个数值。 |
mapred.tasktracker.map.tasks.maximum | 一个task tracker上可以同时运行的map任务的最大数量。 |
mapred.tasktracker.reduce.tasks.maximum | 一个task tracker上可以同时运行的reduce任务的最大数量。 |
io.sort.mb | 排序所使用的内存数量。默认值:100M,需要与mapred.child.java.opts相配 默认:-Xmx200m。不能超过mapred.child.java.opt设置,否则会OOM。 |
io.sort.factor
| 处理流merge时的文件数, 默认:10 ,建议调大到100. |
参数设置调优:
对于这些常用的参数设置,需要整体把握的一些主体思想:
(1) Reduce个数设置:
A. 如果reduce个数设置太小,单个reducetask执行速度很慢,这样出错重新调试的时间花销就比较多。
B. 如果怕Reduce个数设置太大,Shuffle开销及调度开销很大,job输出大量文件,影响后续Job的执行。
C. 推荐的reduce的个数。单个reducetask处理数据量介于1~10G之间,reduce的个数要少于map的个数。
(2) 压缩中间数据,用CPU换磁盘和网络,设置mapred.compress.map.output设为true
A. 减少磁盘操作
B. 减少网络传输数据量