查看: 457|回复: 6

[转载] Hadoop性能调优总结(一)

[复制链接]
论坛徽章:
27
perl徽章
日期:2015-09-25 17:35:49机器学习徽章
日期:2017-09-19 11:01:51Excel徽章
日期:2018-01-04 17:13:02Java徽章
日期:2018-01-04 17:15:14Excel徽章
日期:2018-03-01 16:43:21Oracle研习者高级
日期:2018-08-24 10:52:12技术内幕徽章
日期:2018-08-30 15:34:06机器学习徽章
日期:2018-11-16 14:11:57python徽章
日期:2018-11-29 14:52:29Java徽章
日期:2018-12-13 15:57:02python徽章
日期:2018-12-20 15:14:57python徽章
日期:2018-12-27 15:35:13
发表于 2019-6-2 23:43 | 显示全部楼层 |阅读模式

Hadoop

回复

使用道具 举报

论坛徽章:
27
perl徽章
日期:2015-09-25 17:35:49机器学习徽章
日期:2017-09-19 11:01:51Excel徽章
日期:2018-01-04 17:13:02Java徽章
日期:2018-01-04 17:15:14Excel徽章
日期:2018-03-01 16:43:21Oracle研习者高级
日期:2018-08-24 10:52:12技术内幕徽章
日期:2018-08-30 15:34:06机器学习徽章
日期:2018-11-16 14:11:57python徽章
日期:2018-11-29 14:52:29Java徽章
日期:2018-12-13 15:57:02python徽章
日期:2018-12-20 15:14:57python徽章
日期:2018-12-27 15:35:13
 楼主| 发表于 2019-6-2 23:44 | 显示全部楼层
目的

随着企业要处理的数据量越来越大,Hadoop运行在越来越多的集群上,同时MapReduce由于具有高可扩展性和容错性,已经逐步广泛使用开来。因此也产生很多问题,尤其是性能方面的问题。这里从管理员角度和用户角度分别介绍Hadoop性能优化的一些体会。

本文是基于Hadoop 0.20.x(包括1x),cdh 3及以上版本做介绍。(Hadoop的版本比较杂乱,具体可以看参考部分链接介绍)。

回复 支持 反对

使用道具 举报

论坛徽章:
27
perl徽章
日期:2015-09-25 17:35:49机器学习徽章
日期:2017-09-19 11:01:51Excel徽章
日期:2018-01-04 17:13:02Java徽章
日期:2018-01-04 17:15:14Excel徽章
日期:2018-03-01 16:43:21Oracle研习者高级
日期:2018-08-24 10:52:12技术内幕徽章
日期:2018-08-30 15:34:06机器学习徽章
日期:2018-11-16 14:11:57python徽章
日期:2018-11-29 14:52:29Java徽章
日期:2018-12-13 15:57:02python徽章
日期:2018-12-20 15:14:57python徽章
日期:2018-12-27 15:35:13
 楼主| 发表于 2019-6-2 23:44 | 显示全部楼层
管理员角度

1.    硬件选择: Master机器配置的选择要高于slave机器配置的选择。

2.    磁盘I/O:由于磁盘I/O的速度是比较慢的,如果一个进程的内存空间不足,它会将内存中的部分数据暂时写到磁盘,当需要的时候,再把磁盘上面的数据写到内存上面。因此设置和的预读缓冲区大小来提高hadoop里面大文件顺序读的性能。以此来提高I/O性能。
回复 支持 反对

使用道具 举报

论坛徽章:
27
perl徽章
日期:2015-09-25 17:35:49机器学习徽章
日期:2017-09-19 11:01:51Excel徽章
日期:2018-01-04 17:13:02Java徽章
日期:2018-01-04 17:15:14Excel徽章
日期:2018-03-01 16:43:21Oracle研习者高级
日期:2018-08-24 10:52:12技术内幕徽章
日期:2018-08-30 15:34:06机器学习徽章
日期:2018-11-16 14:11:57python徽章
日期:2018-11-29 14:52:29Java徽章
日期:2018-12-13 15:57:02python徽章
日期:2018-12-20 15:14:57python徽章
日期:2018-12-27 15:35:13
 楼主| 发表于 2019-6-2 23:44 | 显示全部楼层
用户角度

Hadoop参数调优:
通过修改hadoop三个配置文件的参数来提高性能。主要有三个文件core-site.xml、hdfs-site.xml、mapred-site.xml。下面分别介绍这三个文件常用的参数配置。我们的环境上面的路径是: /usr/lib/hadoop/etc/hadoop
回复 支持 反对

使用道具 举报

论坛徽章:
27
perl徽章
日期:2015-09-25 17:35:49机器学习徽章
日期:2017-09-19 11:01:51Excel徽章
日期:2018-01-04 17:13:02Java徽章
日期:2018-01-04 17:15:14Excel徽章
日期:2018-03-01 16:43:21Oracle研习者高级
日期:2018-08-24 10:52:12技术内幕徽章
日期:2018-08-30 15:34:06机器学习徽章
日期:2018-11-16 14:11:57python徽章
日期:2018-11-29 14:52:29Java徽章
日期:2018-12-13 15:57:02python徽章
日期:2018-12-20 15:14:57python徽章
日期:2018-12-27 15:35:13
 楼主| 发表于 2019-6-2 23:45 | 显示全部楼层
三个配置文件介绍:

core-site.xml
该文件中是集群的一些基本参数,与hadoop部署密切相关,但是对于性能优化作用不是特别明显。这里就简单介绍几个常用的配置参数。

fs.default.name

主节点地址。

hadoop.tmp.dir

集群的临时文件存放目录。

io.file.buffer.size

系统I/O的属性,读写缓冲区的大小。

io.seqfile.compress.blocksize

块压缩时块的最小块大小。

io.seqfile.lazydecompress

压缩块解压的相关参数。
回复 支持 反对

使用道具 举报

论坛徽章:
27
perl徽章
日期:2015-09-25 17:35:49机器学习徽章
日期:2017-09-19 11:01:51Excel徽章
日期:2018-01-04 17:13:02Java徽章
日期:2018-01-04 17:15:14Excel徽章
日期:2018-03-01 16:43:21Oracle研习者高级
日期:2018-08-24 10:52:12技术内幕徽章
日期:2018-08-30 15:34:06机器学习徽章
日期:2018-11-16 14:11:57python徽章
日期:2018-11-29 14:52:29Java徽章
日期:2018-12-13 15:57:02python徽章
日期:2018-12-20 15:14:57python徽章
日期:2018-12-27 15:35:13
 楼主| 发表于 2019-6-2 23:45 | 显示全部楼层
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客户端时可以设置更大。

回复 支持 反对

使用道具 举报

论坛徽章:
27
perl徽章
日期:2015-09-25 17:35:49机器学习徽章
日期:2017-09-19 11:01:51Excel徽章
日期:2018-01-04 17:13:02Java徽章
日期:2018-01-04 17:15:14Excel徽章
日期:2018-03-01 16:43:21Oracle研习者高级
日期:2018-08-24 10:52:12技术内幕徽章
日期:2018-08-30 15:34:06机器学习徽章
日期:2018-11-16 14:11:57python徽章
日期:2018-11-29 14:52:29Java徽章
日期:2018-12-13 15:57:02python徽章
日期:2018-12-20 15:14:57python徽章
日期:2018-12-27 15:35:13
 楼主| 发表于 2019-6-2 23:45 | 显示全部楼层
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.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

 

GMT+8, 2019-9-20 15:39 , Processed in 0.128032 second(s), 38 queries .

关闭

扫一扫加入
本版微信群