使用Quorum Journal Manager的高可用HDFS
本文是对hadoop3.1.3英文文档中比较重要的一部分进行了翻译,并加上一部分自己的理解。如果有不对的地方还请多多指教。本文不适合单纯想搭建HA集群的人群阅读。
本文目录
部署
配置详细信息
配置HA NameNodes之前,你需要添加一些配置到你的hdfs-site.xml配置文件中。
你设置这些配置的顺序是不重要的,但是你选择的 dfs.nameservices和dfs.ha.namenodes.[nameservice ID] 的值将会决定后面的一些关键配置。因此,你应该在设置剩下的配置项之前,先确定这两个值。
- dfs.nameservices - 这个新的nameservice的逻辑名
为这个nameservice起一个逻辑名,例如“mycluster”,然后将这个逻辑名赋值给这个配置项。逻辑名你可以随便取。它既被用于配置此配置项,也被用作集群中的hdfs绝对路径的权限组件。
注意: 如果你也使用hdfs 联邦,这个配置也应该将其他的nameservice、HA或者其它也包含进来,然后用逗号分隔。
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
- dfs.ha.namenodes.[nameservice ID] - nameservice中每个NameNode的唯一标识
配置项的值为逗号分隔的NameNode的id列表。这个值将会被DataNode用来识别集群中的所有NameNode。举个例子,如果你之前使用mycluster来作为nameservice的id,并且你想使用“nn1”、“nn2”和“nn3”作为各个NameNode的id,你可以这样配置:
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2,nn3</value>
</property>
注意: HA中的NameNode最少要有2个,当然你可以配置更多。建议不要超过5个,最好是3个,因为更多的NameNode意味着更多的通讯开销。
- dfs.namenode.rpc-address.[nameservice ID].[name node ID] - 每个NameNode的完整的RPC(远程过程调用)地址。
为之前设配置的NameNode进程设置的完整地址和IPC端口。注意这个会有多个分开的配置(上一步设置NameNode ID时,是写在一起并用逗号分隔开的,这里的配置将会分隔开)。例如:
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>machine1.example.com:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>machine2.example.com:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn3</name>
<value>machine3.example.com:8020</value>
</property>
注意: 如果你愿意的话,你可以将“servicerpc-address”设置的类似一些。(废话)
- dfs.namenode.http-address.[nameservice ID].[name node ID] - 每个NameNode的完整的http地址。
和之前的 rpc-address 一样,为每个NameNode的http服务设置地址。例如:
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>machine1.example.com:9870</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>machine2.example.com:9870</value>
</property>
<property>