大数据平台之HDFS性能调优(转)

大数据平台之HDFS性能调优(转)

HDFS读写流程
1、写流程

1、客户端向NameNode发起请求,需要存储数据Data

2、因为NameNode中是记录了所有DataNode的相关信息的,而数据最终要保存的地方就是DataNode,所以NameNode会返回可用的DataNode的信息给客户端

3、将Data分为1和2这两个数据块

4、客户端会将数据块存储到NameNode返回给他的DataNode1中去

5、因为数据块需要存储多份,所以DataNode之间会相互传输来进行存储

6、DataNode存储完数据后,会反馈给NameNode,NameNode会将对应的DataNode的相关信息进行更新

总结:客户端向NameNode发起写数据请求分块写入DataNode节点,DataNode自动完成副本备份,DataNode向NameNode汇报存储完成,NameNode通知客户端

2、读流程

HDFS读流程
1、客户端向NameNode发起请求,需要获取名字为1的数据块

2、NameNode中保存了该数据块存储的位置,将DataNode的信息返回给客户端

3、客户端就近的方式去从DataNode获取数据

4、如果某个DataNode无法访问

5、从另一个DataNode中去获取数据

总结: 客户端向NameNode发起读数据请求, NameNode找出距离最近的DataNode节点信息, 客户端从NameNode分块下载文件

3、垃圾回收时间

以分钟为单位的垃圾回收时间,垃圾站中数据超过此时间,会被删除。如果是0,垃圾回收机制关闭。

Fs.trash.interval=1天

将其修改为

Fs.trash.interval=7天(该配置解决数据误删)

4、检查点垃圾回收时间

以分钟为单位的垃圾回收检查间隔。应该小于或等于fs.trash.interval。如果是0,值等同于fs.trash.interval。每次检查器运行,会创建新的检查点。

fs.trash.checkpoint.interval则是指垃圾回收的检查间隔,应该是小于或者等于fs.trash.interval, 如果是0,值等同于fs.trash.interval。每次检查器运行,会创建新的检查点。

5、NameNode 处理程序计数

dfs.namenode.handler.count namenode, dfs.datanode.handler.count中用于处理RPC的线程数,默认是32,如果该值设的太小,明显的状况就是DataNode在连接NameNode的时候总是超时或者连接被拒绝, 需要注意的是,每添加一个线程,需要的内存增加。

6、最大传输线程数

dfs.datanode.max.xcievers, dfs.datanode.max.transfer.threads对于datanode来说,就如同linux上的文件句柄的限制,当datanode 上面的连接数超过配置中的设置时,datanode就会拒绝连接,一般都会将此参数调大,8192左右

7、NameNode的java堆栈
NameNode内存详解

NameNode管理着整个HDFS文件系统的元数据。

NameNode内存的组成

NameNode内存主要由Namespace、BlocksMap、NetworkTopology及其它部分组成

Namespace:维护整个文件系统的目录树结构及目录树上的状态变化;

BlockManager:维护整个文件系统中与数据块相关的信息及数据块的状态变化;

NetworkTopology:维护机架拓扑及DataNode信息,机架感知的基础;

备注:NameNode常驻内存主要被Namespace和BlockManager使用,二者使用占比分别接近50%。其它部分内存开销较小且相对固定,与Namespace和BlockManager相比基本可以忽略。

8、元数据占用内存空间说明

估计总大小(bytes)

文件名长度:128

目录名长度:128

块X3(副本数):128X3=384

9、NameNode元数据内存估算举例
文件数量:10 600 000
目录数量:310 000
块数量:13 300 000

计算元数据需要内存: 128x 10600000+128x310000 +384x13300000 = 6503680000(bytes)≈ 7G 实际测算:在该NameNode实际使用内存8G。 实际计算中内存更大是因为内存中除了元数据还有其他信息。

10、影响namenode节点消耗内存

1.block个数

2.文件名称的长度

3.系统目录的个数

secondary namenode需要的内存与namenode需要的内存大概一样。

1GB内存可以管理百万个block文件,建议将其调整为8GB

11、JournalNode放在管理服务器
两个NameNode为了数据同步,会通过一组称作JournalNodes的独立进程进行相互通信。Cloudera 建议将JournalNode放在主要服务器,或NameNode, Standby NameNode, JobTracker这类的,JournalNodes的本地目录就比较可靠。

12、 ipc.client.connect.max.retries
客户端连接重试次数,一般建议调整为10次

13、fs.permissions.umask-mode优化

fs.permissions.umask-mode=22在创建文件和目录时使用此umask值(用户掩码)。类linux上的文件权限掩码。可以使用8进制数字也可以使用符号,例如:“022” (8进制,等同于以符号表示的u=rwx,g=r-x,o=r-x),或者"u=rwx,g=rwx,o="(符号法,等同于8进制的007)。注意,8进制的掩码,和实际权限设置值正好相反,建议使用符号表示法,描述更清晰

14、dfs.datanode.handler.count

dfs.datanode.handler.count DataNode参数datanode节点RPC的处理线程数

dfs.datanode.handler.count=32

希望本文对你有帮助!

感谢关注“码农星球”。本文版权属于“码农星球”。我们提供咨询和培训服务,关于本文有任何困惑,请关注并联系我们。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值