环境准备
bash
export ZK_HOME=/usr/local/src/zookeeper
export PATH=$PATH:$ZK_HOME/bin
plaintext
dataDir=/usr/local/src/zookeeper/zkdata
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
配置 HDFS 高可用性
xml
<configuration>
<!-- hdfs分布式文件系统名字/地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<!--存放namenode、datanode数据的根路径 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/src/hadoop/data</value>
</property>
<!-- 存放journalnode数据的地址 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/local/src/hadoop/data/jn</value>
</property>
<!-- 列出运行ZooKeeper服务的主机端口对 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>master:2181,slave1:2181,slave2:2181</value>
</property>
</configuration>
xml
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 服务的逻辑名称,使用mycluster替换master:9000作为逻辑名称 -->
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>master:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>slave1:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>master:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>slave1:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://master:8485;slave1:8485;slave2:8485/mycluster</value>
</property>
<property>
<name>dfs.journalnode.http-address</name>
<value>${dfs.namenode.http-address}:8480</value>
</property>
<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.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
</configuration>
配置 YARN 高可用性
修改hadoop/etc/hadoop/yarn-site.xml文件,添加以下内容:
<configuration>
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>mycluster</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.address.rm1</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.address.rm2</name>
<value>slave1:8032</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>master:8088</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>slave1:8088</value>
</property>
<property>
<name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
</configuration>
启动 Hadoop 集群
- 节点规划:假设我们有一个三节点的集群,节点名称分别为 master、slave1、slave2,其中 master 节点运行 Active NameNode 和 ResourceManager,slave1 节点运行 Standby NameNode 和 ResourceManager,slave2 节点作为辅助节点,三个节点都运行 ZooKeeper、DataNode 和 NodeManager。
- 软件安装:确保每个节点都安装了 Java 环境,并且安装了 Hadoop 和 ZooKeeper 软件,可通过解压相应的安装包进行安装,并配置好环境变量。
- 时间同步:确保所有节点的时间同步,可使用 NTP 服务进行时间同步。
- 免密登录:配置各节点之间的免密登录,特别是 NameNode 节点之间以及 NameNode 与其他节点之间
-
配置 ZooKeeper 集群
- 解压 ZooKeeper 安装包,例如:
tar -zxvf zookeeper-3.4.6.tar.gz -C /usr/local/src。 - 设置环境变量,在
.bash_profile文件中添加: - 配置
zoo.cfg文件,先创建数据目录mkdir zkdata,然后在zoo.cfg中添加以下内容: - 将 ZooKeeper 目录分发到其他节点,如:
scp -r zookeeper/ root@slave2:/usr/local/src。 - 在每个节点的
zkdata目录中创建myid文件,并根据节点编号写入相应的数字,如在 master 节点上执行echo 1>myid,在 slave1 节点上执行echo 2>myid,在 slave2 节点上执行echo 3>myid。 - 启动 ZooKeeper,在每个节点上执行
cd /usr/local/src/zookeeper/bin,然后执行./zkServer.sh start,并通过./zkServer.sh status查看状态。 - 修改
hadoop/etc/hadoop/core-site.xml文件,添加以下内容: - 修改
hadoop/etc/hadoop/hdfs-site.xml文件,添加以下内容: - 启动 JournalNode,在每个节点上执行
hadoop-daemon.sh start journalnode。 - 格式化其中一个 NameNode,如在 master 节点上执行
hdfs namenode -format。 - 启动格式化后的 NameNode,执行
hadoop-daemon.sh start namenode。 - 将该 NameNode 的元数据同步到另一个 NameNode,在 slave1 节点上执行
hdfs namenode -bootstrapStandby。 - 格式化 ZooKeeper 中的 HA 状态,执行
hdfs zkfc -formatZK。 - 启动 HDFS 集群,执行
start-dfs.sh。 - 启动 YARN 集群,执行
start-yarn.sh。
1273

被折叠的 条评论
为什么被折叠?



