1 版本信息
2 hdfs-site.xml详解
<-- 数据节点访问令牌标识 -->
<property>
<name>dfs.block.access.token.enable</name>
<value>true</value>
</property>
<-- 块顺序报告的间隔时间 -->
<property>
<name>dfs.blockreport.initialDelay</name>
<value>120</value>
</property>
<-- 块大小为128M 对大多数生产环境来说是一个比较稳妥的值。因为该值决定了MR的默认map数,也会影响NN消耗的内存量, 需要谨慎修改 -->
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
</property>
<-- 配置客户端Failover proxy provider类,该类使用传递的协议创建NameNode proxy。 -->
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<-- 短路本地读取 -->
<property>
<name>dfs.client.read.shortcircuit</name>
<value>true</value>
</property>
<-- 短路读取缓存大小 -->
<property>
<name>dfs.client.read.shortcircuit.streams.cache.size</name>
<value>4096</value>
</property>
<-- 客户端重试策略 -->
<property>
<name>dfs.client.retry.policy.enabled</name>
<value>false</value>
</property>
<-- HDFS 超级用户 hdfs -->
<property>
<name>dfs.cluster.administrators</name>
<value> hdfs</value>
</property>
<-- DataNode 服务的地址 -->
<property>
<name>dfs.datanode.address</name>
<value>0.0.0.0:1019</value>
</property>
<-- balancer hdfs移动数据的速度 HDFS做均衡时使用的最大带宽,默认为1048576,即1MB/s,对大多数千兆 甚至万兆带宽的集群来说过小。 -->
<property>
<name>dfs.datanode.balance.bandwidthPerSec</name>
<value>6250000</value>
</property>
<-- 设置 DataNode 节点存储数据文件的本地路径,可以通过逗号分隔指定多个路径 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>/hadoop/hdfs/data</value>
<final>true</final>
</property>
<-- 当DataNode向NameNode汇报可用的硬盘大小的时候,它会把所有dfs.data.dir所列出的可用的硬盘大小总和发给NameNode。由于mapred.local.dir经常会跟DataNode共享可用的硬盘资源,因此我们需要为Mapreduce任务保留一些硬盘资源。dfs.datanode.du.reserved定义了每个dfs.data.dir所定义的硬盘空间需要保留的大小,以byte为单位。默认情况下,该值为0,也就是说HDFS可以使用每个数据硬盘的所有空间,节点硬盘资源耗尽时就会进入读模式。因此,建议每个硬盘都为map任务保留最少10GB的空间,如果每个Mapreduce作业都会产生大量的中间结果,或者每个硬盘空间都比较大(超过2TB),那么建议相应的增大保留的硬盘空间。我在生产环境中设置该值的大小为50G字节! -->
<property>
<name>dfs.datanode.du.reserved</name>
<value>9350827008</value>
</property>
<-- DataNode 决定停止数据节点提供服务允许卷的出错次数,0 则表示任务卷出错都要停止数据节点 -->
<property>
<name>dfs.datanode.failed.volumes.tolerated</name>
<value>0</value>
<final>true</final>
</property>
<-- DataNode 的RPC服务器地址和端口 -->
<property>
<name>dfs.datanode.ipc.address</name>
<value>0.0.0.0:8010</value>
</property>
<-- DataNode 进行文件传输时的最大线程数 -->
<property>
<name>dfs.datanode.max.transfer.threads</name>
<value>16384</value>
</property>
<-- DataNode 本地文件系统到 UNIX域套接字的路径,用于 DataNode 和 本地HDFS客户端之间的通信,该套接字用于 Short circuit Read -->
<property>
<name>dfs.domain.socket.path</name>
<value>/var/lib/hadoop-hdfs/dn_socket</value>
</property>
<-- DataNode 本地文件系统到 UNIX域套接字的路径,用于 DataNode 和 本地HDFS客户端之间的通信 -->
<property>
<name>dfs.encrypt.data.transfer.cipher.suites</name>
<value>AES/CTR/NoPadding</value>
</property>
<-- HA自动的故障转移开启 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<-- 如果出现故障并且fencing方法返回false,则会继续执行shell(true),从而active/standby自动切换。 fencing方法返回true,则不会执行shell。-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>shell(/bin/true)</value>
</property>
<-- mycluster 集群的两个namenode 。-->
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<-- DataNode 的心跳时间 ,默认为3s timeout = 2 * heartbeat.recheck.interval + 10 * dfs.heartbeat.interval -->
<property>
<name>dfs.heartbeat.interval</name>
<value>3</value>
</property>
<-- 指定连接NameNode主机的 黑名单 -->
<property>
<name>dfs.hosts.exclude</name>
<value>/etc/hadoop/conf/dfs.exclude</value>
</property>
<-- 为了启用SSL,必须设置dfs.http.policy=HTTPS_ONLY或者是HTTP_AND_HTTPS(在hdfs-site.xml)。 -->
<property>
<name>dfs.http.policy</name>
<value>HTTP_ONLY</value>
</property>
<-- https服务的端口 -->
<property>
<name>dfs.https.port</name>
<value>50470</value>
</property>
<-- journalnode 本地存储路径 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/hadoop/hdfs/journalnode</value>
</property>
<-- HTTP服务 -->
<property>
<name>dfs.journalnode.http-address</name>
<value>0.0.0.0:8480</value>
</property>
<-- journalnode HTTP服务 -->
<property>
<name>dfs.journalnode.https-address</name>
<value>0.0.0.0:8481</value>
</property>
<-- HDFS文件的访问时间精确到此值。默认值为1小时。设置为0将禁用HDFS的访问时间。 -->
<property>
<name>dfs.namenode.accesstime.precision</name>
<value>0</value>
</property>
<-- HDFS 权限控制开启 -->
<property>
<name>dfs.namenode.acls.enabled</name>
<value>true</value>
</property>
<-- HDFS文件的访问时间精确到此值。默认值为1小时。设置为0将禁用HDFS的访问时间。 -->
<property>
<name>dfs.namenode.audit.log.async</name>
<value>true</value>
</property>
<-- 指示是否避免读取“过时”的数据节点(DataNode),这些数据节点(DataNode)的心跳消息在指定的时间间隔内未被名称节点(NameNode)接收。过时的数据节点(DataNode)将移动到返回供读取的节点列表的末尾。 -->
<property>
<name>dfs.namenode.avoid.read.stale.datanode</name>
<value>true</value>
</property>
<-- 指示超过失效 DataNode 时间间隔 NameNode 未收到检测信号信息时是否避免写入失效 DataNode。写入应避免使用失效 DataNode,除非多个已配置比率 (dfs.namenode.write.stale.datanode.ratio) 的 DataNode 标记为失效 -->
<property>
<name>dfs.namenode.avoid.write.stale.datanode</name>
<value>true</value>
</property>
<-- 每隔一段时间,会由secondary namenode将namenode上积累的所有edits和一个最新的fsimage下载到本地,并加载到内存进行merge,这个过程称为checkpoint,secondary namenode的本地工作目录 -->
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>/hadoop/hdfs/namesecondary</value>
</property>
<-- namenode checkpoint 路径 -->
<property>
<name>dfs.namenode.checkpoint.edits.dir</name>
<value>${dfs.namenode.checkpoint.dir}</value>
</property>
<-- 两次checkpoint之间的时间间隔3600秒 -->
<property>
<name>dfs.namenode.checkpoint.period</name>
<value>21600</value>
</property>
<-- 两次checkpoint之间最大的操作记录 -->
<property>
<name>dfs.namenode.checkpoint.txns</name>
<value>1000000</value>
</property>
<-- 是否启用公平锁机制 -->
<property>
<name>dfs.namenode.fslock.fair</name>
<value>false</value>
</property>
<-- NameNode 处理rpc请求的线程数,默认为10 -->
<property>
<name>dfs.namenode.handler.count</name>
<value>200</value>
</property>
<-- dfs namenode web ui使用的监听地址和基本端口。可以在etc/hadoop/hdfs-site.xml进行指定设置。 -->
<property>
<name>dfs.namenode.http-address</name>
<value>hdp101:50070</value>
<final>true</final>
</property>
<-- 指定一个本地的文件系统,决定NameNode 在何处存放fsimage -->
<property>
<name>dfs.namenode.name.dir</name>
<value>/hadoop/hdfs/namenode</value>
<final>true</final>
</property>
<-- 指定一个本地的文件系统,默认是开启的 -->
<property>
<name>dfs.namenode.name.dir.restore</name>
<value>true</value>
</property>
<-- NameNode RPC 绑定的地址 -->
<property>
<name>dfs.namenode.rpc-address</name>
<value>hdp101:8020</value>
</property>
<-- 安全模式下的HDFS只支持元数据的操作读取,不支持文件的创建、删除等操作,同时会对数据块进行大量校验,导致资源的分配和申请耗时远超预期。集群中满足正常配置的数据块比例 ,如果是为了防止某些异常数据导致始终校验不过的情况,可以尝试将上面的dfs.namenode.safemode.threshold-pct参数调为0或比0小的值后重启NameNode,这样永远不会进入安全模式 -->
<property>
<name>dfs.namenode.safemode.threshold-pct</name>
<value>0.99f</value>
</property>
<-- 数据节点标记为“过时”的时间间隔, 默认为300000ms, “过时”的节点不一定“死亡“。默认五分钟没有心跳就过时,十分钟没有心跳死亡 -->
<property>
<name>dfs.namenode.stale.datanode.interval</name>
<value>30000</value>
</property>
<-- NameNode 启动后不进行块删除, 开启HDFS异步删除机制,增加数据恢复几率 -->
<property>
<name>dfs.namenode.startup.delay.block.deletion.sec</name>
<value>3600</value>
</property>
<-- 当全部DN被标记为脏DN的比率高于此阀值,停止不写数据到脏DN的策略,以免造成热点问题(有效的,可写的DN太少,压力太大), dfs.namenode.avoid.write.stale.datanode -->
<property>
<name>dfs.namenode.write.stale.datanode.ratio</name>
<value>1.0f</value>
</property>
<-- 默认为 true。如果为 true,则启用HDFS的权限检查,否则不启用 -->
<property>
<name>dfs.permissions.enabled</name>
<value>true</value>
</property>
<-- 默认 hdfs ,指定 HDFS 的超级用户组的组名,可按需设置 -->
<property>
<name>dfs.permissions.superusergroup</name>
<value>hdfs</value>
</property>
<-- 块副本数,默认为3 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<-- 最大块副本数 -->
<property>
<name>dfs.replication.max</name>
<value>50</value>
</property>
<-- 在NN和DN上开启WebHDFS (REST API)功能 -->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
<final>true</final>
</property>
<-- 在创建文件和目录时使用此umask值(用户掩码) 例如:"022" (8进制,等同于以符号表示的u=rwx,g=r-x,o=r-x) 8进制的掩码,和实际权限设置值正好相反 -->
<property>
<name>fs.permissions.umask-mode</name>
<value>022</value>
</property>
<-- 启用该功能后,会将其他字段写入用于审计粗粒度操作的名称节点审计日志记录。 -->
<property>
name>hadoop.caller.context.enabled</name>
<value>true</value>
</property>
<-- 为 HDFS 启用包含文件管理 -->
<property>
<name>manage.include.files</name>
<value>false</value>
</property>
<-- 默认情况下,导出可以由任何客户端装入。您必须更新此属性才能控制访问权限。值字符串包含机器名称和访问权限,由空格字符分隔。计算机名称可以是单主机,通配符或IPv4网络格式。访问权限使用rw或ro指定对导出的readwrite或readonly访问 -->
<property>
<name>nfs.exports.allowed.hosts</name>
<value>* rw</value>
</property>
<-- 此目录用于在写入HDFS之前临时保存无序写入。需要确保目录有足够的空间 -->
<property>
<name>nfs.file.dump.dir</name>
<value>/tmp/.hdfs-nfs</value>
</property>