hadoop HA集群的搭建

来源:互联网 发布:网络兼职平台 编辑:程序博客网 时间:2024/05/21 18:50

1,集群规划

描述:Hadoop HA的搭建依赖zookeeper,
我准备四台主机:hadoop01,hadoop02,hadoop03,hadoop04
其中:hadoop01和hadoop02做namenode的主备切换
hadoop03和hadoop04做resourcemanager 的主备切换


四台:

 hadoop01hadoop02hadoop03hadoop04namenode          √  √  datanode  √  √  √  √resourcemanager     √  √nodemanager  √  √  √  √zookeeper  √  √  √ journalnode    √  √  √ zkfc    √  √  

2,集群服务器准备

// 参考http://blog.csdn.net/freefish_yzx/article/details/76461629

3,集群的安装

1、 安装 Zookeeper 集群
如果没有安装
参考:http://blog.csdn.net/freefish_yzx/article/details/77359963
2、 安装 hadoop 集群

           1、 上传安装包 hadoop-2.6.5-centos-6.7.tar.gz
2、 解压到对应的安装目录
[hadoop@hadoop01 ~]$ tar -zxvf hadoop-2.6.5-centos-6.7.tar.gz -C /home/hadoop/apps/
3、 修改配置文件
1、 修改 hadoo-env.sh
修改一行
# The java implementation to use.
export JAVA_HOME=/usr/local/jdk1.8.0_73
2、 修改 core-site.xml
<configuration><!-- 指定 hdfs 的 nameservice 为 myha01 --><property><name>fs.defaultFS</name><value>hdfs://myha01/</value></property><!-- 指定 hadoop 工作目录 --><property><name>hadoop.tmp.dir</name><value>/home/hadoop/data/hadoopdata/</value></property><!-- 指定 zookeeper 集群访问地址 --><property><name>ha.zookeeper.quorum</name><value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value></property></configuration>
3、 修改 hdfs-site.xml

<configuration><!-- 指定副本数 --><property><name>dfs.replication</name><value>2</value></property><!--指定 hdfs 的 nameservice 为 myha01,需要和 core-site.xml 中保持一致--><property><name>dfs.nameservices</name><value>myha01</value></property><!-- myha01 下面有两个 NameNode,分别是 nn1,nn2 --><value>nn1,nn2</value></property><!-- nn1 的 RPC 通信地址 --><property><name>dfs.namenode.rpc-address.myha01.nn1</name><value>hadoop02:9000</value></property><!-- nn1 的 http 通信地址 --><property>Stay hungry Stay foolish -- http://blog.csdn.net/zhongqi2513<name>dfs.namenode.http-address.myha01.nn1</name><value>hadoop02:50070</value></property><!-- nn2 的 RPC 通信地址 --><property><name>dfs.namenode.rpc-address.myha01.nn2</name><value>hadoop03:9000</value></property><!-- nn2 的 http 通信地址 --><property><name>dfs.namenode.http-address.myha01.nn2</name><value>hadoop03:50070</value></property><!-- 指定 NameNode 的 edits 元数据在 JournalNode 上的存放位置 --><property><name>dfs.namenode.shared.edits.dir</name><value>qjournal://hadoop02:8485;hadoop03:8485;hadoop04:8485/myha01</value></property><!-- 指定 JournalNode 在本地磁盘存放数据的位置 --><property><name>dfs.journalnode.edits.dir</name><value>/home/hadoop/data/journaldata</value></property><!-- 开启 NameNode 失败自动切换 --><property>  distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and  limitations under the License. See accompanying LICENSE file.--><!-- Put site-specific property overrides in this file. --><configuration><!-- 指定副本数 --><property><name>dfs.replication</name><value>2</value></property><!--指定 hdfs 的 nameservice 为 myha01,需要和 core-site.xml 中保持一致--><property><name>dfs.nameservices</name><value>myha01</value></property><!-- myha01 下面有两个 NameNode,分别是 nn1,nn2 --><property><name>dfs.ha.namenodes.myha01</name><value>nn1,nn2</value></property><!-- nn1 的 RPC 通信地址 --><property><name>dfs.namenode.rpc-address.myha01.nn1</name><value>hadoop01:9000</value></property><!-- nn1 的 http 通信地址 --><property><name>dfs.namenode.http-address.myha01.nn1</name><value>hadoop01:50070</value></property><!-- nn2 的 RPC 通信地址 --><property><name>dfs.namenode.rpc-address.myha01.nn2</name><value>hadoop02:9000</value></property><!-- nn2 的 http 通信地址 --><property><name>dfs.namenode.http-address.myha01.nn2</name><value>hadoop02:50070</value></property><!-- 指定 NameNode 的 edits 元数据在 JournalNode 上的存放位置 --><property><name>dfs.namenode.shared.edits.dir</name><value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/myha01</value></property><!-- 指定 JournalNode 在本地磁盘存放数据的位置 --><property><name>dfs.journalnode.edits.dir</name><value>/home/hadoop/data/journaldata</value></property><!-- 开启 NameNode 失败自动切换 --><property><name>dfs.ha.automatic-failover.enabled</name><value>true</value></property><!-- 配置失败自动切换实现方式 --><!-- 此处配置在安装的时候切记检查不要换行--><property><name>dfs.client.failover.proxy.provider.myha01</name><value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value></property><!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行--><property><name>dfs.ha.fencing.methods</name><value>sshfenceshell(/bin/true)</value></property><!-- 使用 sshfence 隔离机制时需要 ssh 免登陆 --><property><name>dfs.ha.fencing.ssh.private-key-files</name><value>/home/hadoop/.ssh/id_rsa</value></property><!-- 配置 sshfence 隔离机制超时时间 --><property><name>dfs.ha.fencing.ssh.connect-timeout</name><value>30000</value></property></configuration>

4、 修改 mapred-site.xml
mv  mapred-site.xml.template mapred-site.xml
<configuration>                <!-- 指定 mr 框架为 yarn 方式 --><property><name>mapreduce.framework.name</name><value>yarn</value></property><!-- 设置 mapreduce 的历史服务器地址和端口号 --><property><name>mapreduce.jobhistory.address</name><value>hadoop01:10020</value></property><!-- mapreduce 历史服务器的 web 访问地址 --><property><name>mapreduce.jobhistory.webapp.address</name><value>hadoop01:19888</value></property></configuration>
5、 修改 yarn-site.xml
<configuration><!-- Site specific YARN configuration properties -->        <!-- 开启 RM 高可用 --><property><name>yarn.resourcemanager.ha.enabled</name><value>true</value></property><!-- 指定 RM 的 cluster id --><property><name>yarn.resourcemanager.cluster-id</name><value>yrc</value></property><!-- 指定 RM 的名字 --><property><name>yarn.resourcemanager.ha.rm-ids</name><value>rm1,rm2</value></property><!-- 分别指定 RM 的地址 --><property><name>yarn.resourcemanager.hostname.rm1</name><value>hadoop03</value></property><property><name>yarn.resourcemanager.hostname.rm2</name><value>hadoop04</value></property><!-- 指定 zk 集群地址 --><property><name>yarn.resourcemanager.zk-address</name><value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value></property><!-- 要运行 MapReduce 程序必须配置的附属服务 --><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><!-- 开启 YARN 集群的日志聚合功能 --><property><name>yarn.log-aggregation-enable</name><value>true</value></property><!-- YARN 集群的聚合日志最长保留时长 --><property><name>yarn.log-aggregation.retain-seconds</name><value>86400</value></property><!-- 启用自动恢复 --><property><name>yarn.resourcemanager.recovery.enabled</name><value>true</value></property><!-- 制定 resourcemanager 的状态信息存储在 zookeeper 集群上--><property><name>yarn.resourcemanager.store.class</name><value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value></property></configuration>
6、 修改 slaves
vi slaves
添加 datanode 的节点地址:
hadoop01
hadoop02
hadoop03
hadoop04
7、 分发安装包到其他机器
scp -r hadoop-2.6.5 hadoop@hadoop02:$PWD
scp -r hadoop-2.6.5 hadoop@hadoop03:$PWD
scp -r hadoop-2.6.5 hadoop@hadoop04:$PWD
8、 并分别配置环境变量
vi ~/.bashrc
添加两行:
export HADOOP_HOME=/home/hadoop/apps/hadoop-2.6.5
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
保存退出
source ~/.bashrc



4、 集群初始化操作( 记住:严格按照以下步骤执行)



1、 先启动 zookeeper 集群
启动:zkServer.sh start
检查启动是否正常:zkServer.shstatus

这里应该只有三台正常,另外一个hadoop04没装

2、 分别在每个 zookeeper (也就是规划的三个 journalnode 节点, 不一定跟 zookeeper
节点一样)节点上启动 journalnode 进程
[hadoop@hadoop01 ~]$ hadoop-daemon.sh start journalnode
[hadoop@hadoop02 ~]$ hadoop-daemon.sh start journalnode
[hadoop@hadoop03 ~]$ hadoop-daemon.sh start journalnode

然后用 jps 命令查看是否各个 datanode 节点上都启动了 journalnode 进程
如果报错,根据错误提示改进

3、 在第一个 namenode 上执行格式化操作
[hadoop@hadoop01 ~]$ hadoop namenode -format



然后会在 core-site.xml 中配置的临时目录中生成一些集群的信息
Stay hungry Stay foolish -- http://blog.csdn.net/zhongqi2513
把他拷贝的第二个 namenode 的相同目录下
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/data/hadoopdata/</value>
这个目录下
[hadoop@hadoop01~]$ scp -r ~/data/hadoopdata/ hadoop02:~/data
或者也可以执行:hadoop namenode -bootstrapStandby


4、 格式化 ZKFC
[hadoop@hadoop01 ~]$ hdfs zkfc -formatZK
在第一台机器上即可

5、 启动 HDFS
[hadoop@hadoop01 ~]$ start-dfs.sh



查看各节点进程是否启动正常:依次为 1234 四台机器的进程



访问 web 页面 http://hadoop01:50070
先C:\Windows\System32\drivers\etc  
添加主机映射
192.168.123.151 hadoop01
192.168.123.152 hadoop02
192.168.123.153 hadoop03
192.168.123.154 hadoop04








6、 启动 YARN
[hadoop@hadoop03 ~]$ start-yarn.sh
在主备 resourcemanager 中随便选择一台进行启动, 正常启动之后, 检查各节点的进程:

若备用节点的 resourcemanager 没有启动起来,则手动启动起来
[hadoop@hadoop03 ~]$ yarn-daemon.sh start resourcemanager

之后打开浏览器访问页面:http://hadoop03:8088




访问 web 页面:http://hadoop04:8088

hadoop04是 standby resourcemanager,会自动跳转到 hadoop03

7、 查看各主节点的状态

HDFS:
hdfs haadmin -getServiceState nn1 
hdfs haadmin -getServiceState nn2



YARN:
yarn rmadmin -getServiceState rm1
yarn rmadmin -getServiceState rm2




4,集群启动测试


1、干掉 active namenode, 看看集群有什么变化
2、在上传文件的时候干掉 active namenode, 看看有什么变化
3、干掉 active resourcemanager, 看看集群有什么变化
4、在执行任务的时候干掉 active resourcemanager,看看集群有什么变化