1,集群规划
描述:Hadoop HA的搭建依赖zookeeper,
我准备四台主机:hadoop01,hadoop02,hadoop03,hadoop04
其中:hadoop01和hadoop02做namenode的主备切换
hadoop03和hadoop04做resourcemanager 的主备切换
四台:
hadoop01 hadoop02 hadoop03 hadoop04 namenode √ √ 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>
sshfence
shell(/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,看看集群有什么变化