配置文件hdfs-site.xml

生产环境建议优化:

<!-- 开启HDFS权限检查 -->
<property> 
    <name>dfs.permissions.enabled</name> 
    <value>true</value> 
</property> 

<!-- NN处理rpc请求的线程数,默认为10,通常设置20*log(n),n为集群数量,100个节点的集群可设置为90 -->
<!-- linux计算命令:python -c 'import math ; print int(math.log(n) * 20)'  -->
<property>
    <name>dfs.namenode.handler.count</name>
    <value>90</value>
</property>

<!-- 开启HDFS自动故障转移 -->
<property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
</property>

其它优化:

<!-- 连接NN的白/黑名单,一般配置黑名单 -->
<property>
    <name>dfs.hosts</name>
    <value>/export/hadoop/etc/hadoop/allowed_hosts</value>
</property>
<property>
    <name>dfs.hosts.exclude</name>
    <value>/export/hadoop/etc/hadoop/exclude_datanode_hosts</value>
</property>

<!-- DN允许失败的磁盘数量,默认值0即一块磁盘损坏则DN挂,对数据盘较多的集群可设置1或2 -->
<property>
    <name>dfs.datanode.failed.volumes.tolerated</name>
    <value>1</value>
</property>

<!-- HDFS做负载均衡时使用的最大宽带,默认1048576即1MB/s,一般情况下设置为10M;设置的过大会影响当前job的运行。 -->
<!-- 该值也可以在启动balancher脚本时设置。 -->
<property>  
    <name>dfs.datanode.balance.bandwidthPerSec</name>  
    <value>41943040</value> 
</property>

<!-- HDFS数据在网络传输时是否加密。在公网上建议开启该参数,会带来CPU开销。内网可不开。 -->
<property>
    <name>dfs.encrypt.data.thransfer</name>
    <value>true</value>
</property>

<!-- 默认是false,开启HDFS短路本地读,安装impala需要开启。
当client请求数据时,datanode会读取数据然后通过TCP协议发送给client.short-circuit绕过了datanode直接读取数据。
short-circuit的前提是client和数据在同一个结点上。 -->
<!-- 指定一个Unix socket文件的路径。两个配置同时配 -->
  <property>
    <name>dfs.client.read.shortcircuit</name>
    <value>true</value>
  </property>
  <property>
    <name>dfs.domain.socket.path</name>
    <value>/var/lib/hadoop-hdfs/dn_socket</value>
  </property>

namenode的JVM内存设置:

每个文件块大概占用 150byte。
一个128G 内存服务器为例,能存储多少文件块呢?
128 * 1024 * 1024 * 1024 / 150Byte ≈ 9.1 亿

JournalNode:

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