总目录:https://blog.csdn.net/qq_41106844/article/details/105553392
Hadoop - 子目录:https://blog.csdn.net/qq_41106844/article/details/105553369
前言
本文基于已经完成完全分布式配置的集群进行。
1.环境变量配置
2.ssh免密
3.java环境配置
4.其他常规配置(网络,时间同步,防火墙等等)
看之前文章。
参数列表
hadoop01:192.168.110.220:NN1,ZKFC,ZK,JNN
hadoop02:192.168.110.221:NN2,DN,JNN,ZKFC,ZK
hadoop03:192.168.110.222:DN,JNN,ZK
hadoop04:192.168.110.223:DN,JNN,ZKFC
zookeeper安装
https://www.jianshu.com/p/5b195fb27b86
核心文件配置
core-site.xml
<configuration>
<!--设置fs.defaultFS为Nameservices的逻辑主机名 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://myha</value>
</property>
<!--设置数据存放目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/hdk/hadoopdata/tmp</value>
</property>
<!--设置Zookeeper位置信息 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<!--定义NameServices逻辑名称,此处为myha -->
<property>
<name>dfs.nameservices</name>
<value>myha</value>
</property>
<!--映射nameservices逻辑名称到namnode逻辑名称 -->
<property>
<name>dfs.ha.namenodes.myha</name>
<value>nn1,nn2</value>
</property>
<!--映射namenode逻辑名称到真实主机名称(RPC) -->
<property>
<name>dfs.namenode.rpc-address.myha.nn1</name>
<value>hadoop01:8020</value>
</property>
<!--映射namenode逻辑名称到真实主机名称(RPC) -->
<property>
<name>dfs.namenode.rpc-address.myha.nn2</name>
<value>hadoop02:8020</value>
</property>
<!--映射namenode逻辑名称到真实主机名称(HTTP) -->
<property>
<name>dfs.namenode.http-address.myha.nn1</name>
<value>hadoop01:50070</value>
</property>
<!--映射namenode逻辑名称到真实主机名称(HTTP) -->
<property>
<name>dfs.namenode.http-address.myha.nn2</name>
<value>hadoop02:50070</value>
</property>
<!--配置JN集群位置信息及目录 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop02:8485;hadoop03:8485;hadoop04:8485/myha</value>
</property>
<!--配置故障迁移实现类 -->
<property>
<name>dfs.client.failover.proxy.provider.lyx</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!--指定切换方式为SSH免密钥方式 -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<!--设置自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!--配置journalnode edits文件位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/hdk/hadoopdata/data</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions.superusergroup</name>
<value>staff</value>
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
</configuration>
hadoop-env.sh
……
# The java implementation to use.
export JAVA_HOME=/usr/hdk/jdk
……
slaves
hadoop02
hadoop03
hadoop04
第一次启动
启动zookeeper集群
zkServer.sh start
和core-site.xml配置信息中
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
这几个节点启动zookeeper
启动journalnode
hadoop-daemons.sh start journalnode
四台都执行
启动NameNode
在hadoop01上
格式化NameNode
hdfs namenode -format
格式化ZKFC
hdfs zkfc -formatZK
(以上操作仅在第一次配置进行一次,之后不要进行)
启动NameNode
hadoop-daemon.sh start namenode
在hadoop02上
同步hadoop01上的信息
hdfs namenode -bootstrapStandby
启动NameNode
hadoop-daemon.sh start namenode
启动zkfc
hadoop-daemon.sh start zkfc
在你计划启动zkfc的节点启动
启动hdfs
在hadoop01执行
start-dfs.sh
之后启动
在hadoop01执行
start-dfs.sh
NameNode切换实例
先查看HDFS的web界面:
杀死hadoop01的NameNode
这时的web界面
之后启动hadoop01的NameNode