Hadoop2.0 HA安装完整版——Hadoop2.7.3
@羲凡——只为了更好的活着
Hadoop2.0 HA安装完整版——Hadoop2.7.3
Hadoop从2008年发布,到现在已经11个年头了。Hadoop安装是任何一个大数据开发或运维人员都必须掌握的。本文尽可能详细的介绍hadoop 高可用的安装并对参数做一定的介绍(用 deplab 用户安装)。hadoop的安装都非常类似,无论是hadoop2.0版本还是hadoop3.0版本。此文中选择Hadoop2.7.3作为示范!
我用5台机器集群规划如下
hostname | NameNode | DataNode | JournalNode | ResourceManager | ZooKeeper |
---|---|---|---|---|---|
deptest1 | √ | √ | √ | ||
deptest2 | √ | √ | |||
deptest3 | √ | √ | √ | √ | |
deptest4 | √ | √ | √ | ||
deptest5 | √ | √ | √ |
一、前期准备
0.配置/etc/hosts(非重点——赘述)
这里特别强调一点,如果你使用的是Ubuntu系统,一定要将/etc/hosts目录中的127.0.1.1这一行删除,切记。本人这个坑踩过两边,切记切记!!!
1.配置免密登录(非重点——赘述)
a.先在 deptest1 机器上操作,如果存在 ~/.ssh ,先删除。然后在任意目录下输入 ssh-keygen 按三下 Enter ,就生成新的 ~/.ssh 文件夹。
b.在任意目录下输入 ssh-copy-id deptest1 ,则生成 ~/.ssh/authorized_keys
c.在其他几台机器上重复操作a和操作b,再将 authorized_keys 文件相互追加到彼此的authorized_keys 文件 中即可
2.配置时间同步(非重点——赘述)
见我另一篇博客 https://www.geek-share.com/detail/2759914370.html
3.下载并安装Java(五台机器都要安装)
最好使用1.8版本的,因为如果你以后肯定会用到hadoop生态圈中其他的组件,而这些组件的新版本可能需要Java1.8版本。本文使用 jdk1.8.0_131
配置 /etc/profile
sudo vi /etc/profile # JAVA_HOME export JAVA_HOME=/usr/local/package/jdk1.8.0_131export PATH=$PATH:$JAVA_HOME/bin # 重新加载/etc/profile文件 source /etc/profile
在任意界面输入 java -version,出现如下内容,则说明成功
java version "1.8.0_131" Java(TM) SE Runtime Environment (build 1.8.0_131-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
4.下载并安装ZooKeeper(非重点——赘述)
见我另一篇博客 https://blog.csdn.net/weixin_42003671/article/details/88686454
5.下载Hadoop
下载地址如下:
https://archive.apache.org/dist/hadoop/common/hadoop-2.7.3/
二、hadoop安装
$HADOOP_HOME/etc/hadoop 目录下存放所有hadoop的配置文件,包括hadoop-env.sh,mapred-env.sh,yarn-env.sh,core-site.xml,hdfs-site.xml,mapred-site.xml,yarn-site.xml,slaves 等
0.解压并配置/etc/profile
tar -zxf hadoop-2.7.3.tar.gz -C ./ # 解压到当前文件夹 sudo vi /etc/profile # HADOOP_HOME export HADOOP_HOME=/usr/local/package/hadoop-2.7.3 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin # 重新加载/etc/profile文件 source /etc/profile
1.配置三个环境文件
将三个文件hadoop-env.sh,mapred-env.sh,yarn-env.sh中添加 JAVA_HOME 修改为自己下载的jdk地址
export JAVA_HOME=/usr/local/package/jdk1.8.0_131
2.配置core-site.xml文件
<configuration> <!-- 指定hdfs的nameservice为ns --> <property> <name>fs.defaultFS</name> <value>hdfs://ns</value> </property> <!-- 指定hadoop临时目录 --> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/package/hadoop-2.7.3/tmp</value> </property> <!-- 指定zk --> <property> <name>ha.zookeeper.quorum</name> <value>deptest3:2181,deptest4:2181,deptest5:2181</value> </property> <!-- Namenode向JournalNode发起的ipc连接请求的重试最大次数 --> <property> <name>ipc.client.connect.max.retries</name> <value>100</value> <description>Indicates the number of retries a client will make to establish a server connection. </description> </property> <!-- Namenode向JournalNode发起的ipc连接请求的重试间隔时间 --> <property> <name>ipc.client.connect.retry.interval</name> <value>10000</value> <description>Indicates the number of milliseconds a client will wait for before retrying to establish a server connection. </description> </property> <!-- 开启回收功能,并设置垃圾删除间隔(分钟) --> <property> <name>fs.trash.interval</name> <value>360</value> <description>Trash deletion interval in minutes.If zero, the trash feature is disabled.</description> </property> <!-- 设置垃圾检查点间隔(分钟),不设置的话默认和fs.trash.interval一样 --> <property> <name>fs.trash.checkpoint.interval</name> <value>60</value> <description>Trash checkpoint interval in minutes.If zero, the deletion interval is used.</description> </property> <!-- 下面的两个参数是配置oozie时使用的 --> <property> <name>hadoop.proxyuser.deplab.groups</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.deplab.hosts</name> <value>*</value> </property> </configuration>
3.配置hdfs-site.xml文件
<configuration> <!-- hdfs的存放目录,集群中挂载硬盘的目录最好一致 --> <property> <name>dfs.datanode.data.dir</name> <value>/data0/dfs/data,/data1/dfs/data,/data2/dfs/data,/data3/dfs/data</value> <final>true</final> </property> <!--指定hdfs的nameservice为ns,需要和core-site.xml中的保持一致 --> <property> <name>dfs.nameservices</name> <value>ns</value> </property> <!-- ns下面有两个NameNode,分别是nn1,nn2 --> <property> <name>dfs.ha.namenodes.ns</name> <value>nn1,nn2</value> </property> <!-- nn1的RPC通信地址,8020端口换成9000端口也行 --> <property> <name>dfs.namenode.rpc-address.ns.nn1</name> <value>deptest1:8020</value> </property> <!-- nn1的http通信地址 --> <property> <name>dfs.namenode.http-address.ns.nn1</name> <value>deptest1:50070</value> </property> <!-- nn2的RPC通信地址,8020端口换成9000端口也行 --> <property> <name>dfs.namenode.rpc-address.ns.nn2</name> <value>deptest2:8020</value> </property> <!-- nn2的http通信地址 --> <property> <name>dfs.namenode.http-address.ns.nn2</name> <value>deptest2:50070</value> </property> <!-- 指定NameNode的元数据在JournalNode上的存放位置 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://deptest3:8485;deptest4:8485;deptest5:8485/ns</value> </property> <!-- 指定JournalNode在本地磁盘存放数据的位置 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/usr/local/package/hadoop-2.7.3/hdf_journal</value> </property> <!-- 开启NameNode故障时自动切换 --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!-- 配置失败自动切换实现方式 --> <property> <name>dfs.client.failover.proxy.provider.ns</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <!-- 配置隔离机制,如果ssh是默认22端口,value直接写sshfence即可 --> <property> <name>dfs.ha.fencing.methods</name> <value> sshfence shell(/bin/true) </value> </property> <!-- 使用隔离机制时需要ssh免登陆 --> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/home/deplab/.ssh/id_rsa</value> </property> <!-- 配置sshfence隔离机制超时时间 --> <property> <name>dfs.ha.fencing.ssh.connect-timeout</name> <value>30000</value> </property> <!-- hdfs 元数据所在文件夹 --> <property> <name>dfs.namenode.name.dir</name> <value>/usr/local/package/hadoop-2.7.3/hdf_name</value> <final>true</final> </property> <!-- hdfs 文件备份数量,默认是3个 --> <property> <name>dfs.replication</name> <value>3</value> </property> <!-- 开启webhdfs服务 --> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> <!-- 取消向hdfs上写数据的用户权限设置 --> <property> <name>dfs.permissions.enabled</name> <value>false</value> </property> <!-- 此参数用于动态添加删除datanode节点 --> <property> <name>dfs.hosts.exclude</name> <value>/usr/local/package/hadoop-2.7.3/etc/hadoop/excludes</value> </property> </configuration>
4.配置mapred-site.xml文件
# 将mapred-site.xml.template文件重命名为mapred-site.xml mv mapred-site.xml.template mapred-site.xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!-- 配置日志聚合 --> <property> <name>mapreduce.jobhistory.address</name> <value>deptest1:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>deptest1:19888</value> </property> </configuration>
5.配置yarn-site.xml文件
<configuration> <property> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> <value>org.apache.mapred.ShuffleHandler</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!--启用resourcemanager ha--> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <property> <name>yarn.resourcemanager.cluster-id</name> <value>rmcluster</value> </property> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>deptest1</value> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>deptest3</value> </property> <!--指定zookeeper集群的地址--> <property> <name>yarn.resourcemanager.zk-address</name> <value>deptest3:2181,deptest4:2181,deptest5:2181</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> <!--启用日志聚合功能--> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <property> <name>yarn.log.server.url</name> <value>http://deptest1:19888/jobhistory/job/</value> </property> <!--日志保存时间--> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property> <!------------------------------------------------------------------> <!-----------以下参数可以不必设置。如若设置,必须更具自己集群情况调整--------> <!------------------------------------------------------------------> <!-- 该nodemanager节点上YARN可使用的物理内存总量,默认是8192(MB) --> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>20480</value> </property> <!-- 该nodemanager节点上YARN可使用的虚拟CPU个数,默认是8 --> <property> <name>yarn.nodemanager.resource.cpu-vcores</name> <value>24</value> </property> <!-- 单个任务可申请的最少物理内存量,默认是1024(MB) --> <property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>2048</value> </property> <!-- 单个任务可申请的物理内存量上限 --> <property> <name>yarn.scheduler.maximum-allocation-mb</name> <value>20480</value> </property> <!-- 取消虚拟内存检查 --> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property> </configuration>
6.配置slaves文件
deptest1 deptest2 deptest3 deptest4 deptest5
7.分发hadoop-2.7.3到其他四台机器上
scp -r /usr/local/package/hadoop-2.7.3 deptest2:/usr/local/package/ scp -r /usr/local/package/hadoop-2.7.3 deptest3:/usr/local/package/ scp -r /usr/local/package/hadoop-2.7.3 deptest4:/usr/local/package/ scp -r /usr/local/package/hadoop-2.7.3 deptest5:/usr/local/package/
8.hadoop启动
a.重启 zk (deptest3/deptest4/deptest5)
zkServer.sh stop zkServer.sh start
b.启动 JournalNode (deptest3/deptest4/deptest5)
在 dfs.namenode.shared.edits.dir 参数指定的机器上启动 JournalNode ,特别强调 JournalNode 必须设置 奇数 台
hadoop-daemon.sh start journalnode
journalnode启动成功,用 jps 可以看到名为 JournalNode的守护进程
c.格式化HDFS并启动namenode(只在deptest1上)
# 格式化HDFS命令 hdfs namenode -format # 启动 namenode hadoop-daemon.sh start namenode
如果 namenode 启动成功,用 jps 可以看到名为 NameNode的守护进程
如果格式化成功,在倒数第七行出现 Storage directory /usr/local/package/hadoop-2.7.3/hdf_name has been successfully formatted,如下图
d.nn2 同步 nn1 的元数据信息(只在deptest2上)
# 同步nn1 元数据的命令 hdfs namenode -bootstrapStandby # 启动 namenode hadoop-daemon.sh start namenode
如果同步成功,在最后几行出现 Storage directory /usr/local/package/hadoop-2.7.3/hdf_name has been successfully formatted,如下图
此时目前两个namenode都是standby(可以查看50070界面),可以在其中一台机器上输入 如下命令,强制将nn2变成active
hdfs haadmin -transitionToActive --forcemanual nn2
此时查看50070界面,一个是active,一个standby
e.初始化zkfc服务(注意先后顺序哦)
# 关闭hdfs和重启zk stop-dfs.sh #(deptest1) zkServer.sh stop #(deptest3/deptest4/deptest5) zkServer.sh start #(deptest3/deptest4/deptest5) # 初始化zkfc hdfs zkfc -formatZK #(deptest1)
初始化zkfc成功,会显示如下信息
f.启动hdfs和yarn
# 启动hdfs start-dfs.sh # 启动yarn start-yarn.sh #(deptest1) #deptest3上启动另一个ResourceManager yarn-daemon.sh start resourcemanager #(deptest3)
启动后在各台机器上的 jps 的结果如下表
hostname | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
deptest1 | NameNode | DataNode | NodeManager | ResourceManager | |
deptest2 | NameNode | DataNode | NodeManager | ||
deptest3 | QuorumPeerMain | DataNode | NodeManager | JournalNode | ResourceManager |
deptest4 | QuorumPeerMain | DataNode | NodeManager | JournalNode | |
deptest5 | QuorumPeerMain | DataNode | NodeManager | JournalNode |
g.查看状态并测试
hdfs haadmin -getServiceState nn1 #查看nn1状态命令 hdfs haadmin -getServiceState nn2 #查看nn2状态命令 yarn rmadmin -getServiceState rm1 #查看rm1的状态命令 yarn rmadmin -getServiceState rm2 #查看rm2的状态命令
如果 deptest1 上的 resourcemanager 是 active,则 访问deptest3 上的 resourcemanager 会自动跳转到 deptest1的web界面
测试命令如下
yarn jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar pi 2 20
测试的结果
Estimated value of Pi is 3.50000000000000000000
三、总结重点
1.要细心,必须要细心
2.基础环境必须要配好,比如免密登录、时间同步、防火墙关闭等设置
3.namenode只能格式化一次,如果不成功,必须要将name和journalnode所在的路径删除
4.必须初始化zkfc,否者不能实现高可用
5.要细心,必须要细心
若对博客中有任何问题,欢迎留言交流
恭喜您已经完成hadoop 的HA模式的安装
恭喜您已经完成hadoop 的HA模式的安装
恭喜您已经完成hadoop 的HA模式的安装
@羲凡——只为了更好的活着
- hadoop2.7.3 HA高可用集群安装
- hadoop 2.7.3 HA 安装指南
- Hadoop 2.0 HA安装时碰到的问题
- hadoop2.7.3 HA高可用集群安装
- hadoop2.7.3 HA高可用集群安装
- Hadoop 2.0 HA高可用集群安装配置
- 菜鸟玩云计算之十九:Hadoop 2.5.0 HA 集群安装第2章
- 关于在阿里云服务器或者腾讯云服务器(或者两者混合)搭建Hadoop 2.0 HA的注意事项
- 第一篇:Ubuntu下安装Hadoop(2.7.3)详解
- Hadoop2.0的HA介绍
- Hadoop集群安装配置教程_Hadoop2.7.3Ubuntu/CentOS
- hadoop2.7.3+spark2.1.0+scala2.12.1环境搭建(2)安装hadoop
- Hadoop集群之Hive HA 安装配置
- Hadoop2.6+HA+Zookeeper3.4.6+Hbase1.0.0安装
- 2018-07-16期 Hadoop HA安装配置(一)
- Ubuntu 14.04编译安装hadoop 2.7.3
- centos7 安装hadoop2.7.3遇到的各种问题
- CentOS-6.4下安装hadoop2.7.3
- Hadoop2.7.3及常用组件安装和配置
- Hadoop 2.0 安装向导