文章导读
大数据高可用的Hadoop集群搭建基础篇,到这里开始真正进入正题了,配置Hadoop环境是一个非常麻烦的事情,Hadoop2.0版本涉及的组件有hdfs 、yarn 、mapreduce等。
Hadoop下载
Hadoop官网下载链接,这里再推荐一个腾讯的国内镜像下载地址,速度快很多,可以下载自己需要的版本,这里选取的是Hadoop-2.10.1,也是Hadoop2.x系列当前最新的一个版本,后续都是Hadoop3.x的版本.
Hadoop解压
将/usr/local/src/ 目录下的hadoop安装包解压至/usr/local/soft/目录下,然后就可以配置hadoop环境信息了.
[root@hadoop01 soft]# tar -zxvf hadoop-2.10.1-src.tar.gz ../soft/
Hadoop高可用配置
核心配置
修改core-site.xml文件在该文件配置HDFS端口,指定Hadoop临时目录和Zookeeper集群地址
<!--指定HDFS的nameservice为ns1-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://masters</value>
</property>
<!--指定Hadoop临时目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/export/servers/hadoop/tmp</value>
</property>
<!--指定Zookeeper地址-->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
hdfs配置
修改hdfs-site.xml文件配置两台NameNode的端口地址和通信方式,并指定NameNode的元数据的存放位置,开启NameNode失败自动切换以及配置sshfence(通过ssh远程登录到前一个ActiveNameNode并将其结束进程)
<!--设置副本个数-->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!--设置namenode.name目录-->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/export/data/hadoop/name</value>
</property>
<!--设置namenode.data目录-->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/export/data/hadoop/data</value>
</property>
<!--开启WebHDFS-->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
<!--在NN和DN上开启webHDFS(REST API)功能,不是必须-->
</property>
<!--指定HDFS的那么nameservice为masters,需要和core-site.xml中的保持一致-->
<property>
<name>dfs.nameservices</name>
<value>masters</value>
</property>
<!--masters下面有两个namenode,分别是nm1和nm1-->
<property>
<name>dfs.ha.namenodes.masters</name>
<value>nm1,nm2</value>
</property>
<!--nm1的RPC通信地址-->
<property>
<name>dfs.namenode.rpc-address.masters.nm1</name>
<value>hadoop01:9000</value>
</property>
<!--nm1的http通信地址-->
<property>
<name>dfs.namenode.http-address.masters.nm1</name>
<value>hadoop01:50070</value>
</property>
<!--nm1的RPC通信地址-->
<property>
<name>dfs.namenode.rpc-address.masters.nm2</name>
<value>hadoop02:9000</value>
</property>
<!--nm1的http通信地址-->
<property>
<name>dfs.namenode.http-address.masters.nm2</name>
<value>hadoop02:50070</value>
</property>
<!--指定namenode的元数据在JournalNode上的存放位置-->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/masters</value>
</property>
<!--指定JournalNode在本地磁盘存放数据的位置-->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/export/data/hadoop/journaldata</value>
</property>
<!--开启namenode失败自动切换-->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!--配置失败自启动切换实现方式-->
<property>
<name>dfs.client.failover.proxy.provider.masters</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>/root/.ssh/id_rsa</value>
</property>
<!--配置sshfence隔离机制超时时间-->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
yarn配置
修改yarn-site.xml文件,开启ResourceManager高可用,指定RescoureManager的端口名称地址,并配置Zookeeper集群地址
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>1</value>
</property>
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!--指定ResourceManager的cluster id-->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value>
</property>
<!--指定ResourceManager的名字-->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!--分别指定ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hadoop01</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop02</value>
</property>
<!--指定Zookeeper集群的地址-->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
mapred配置
修改mapred-site.xml文件配置MapReduce计算框架为YARN方式
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
修改slaves配置文件
hadoop01
hadoop02
hadoop03
修改hadoop-env.sh
配置JDK环境变量,查看java安装
配置环境变量
将hadoop配置到环境变量中,修改/etc/profile文件
[root@hadoop02 hadoop]# vim /etc/profile
HADOOP_HOME=/usr/local/soft/hadoop-2.10.1
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$ZOOKEEPER_HOME/bin:$HADOOP_HOME/bin
export JAVA_HOME JRE_HOME ZOOKEEPER_HOME HADOOP_HOME CLASSPATH PATH
分发安装包
将配置好的hadoop安装包分发给hadoop02和hadoop03机器同等路径下,那这样在hadoop02和hadoop03机器的/usr/local/soft/路径下就存在与hadoop01这台机器相同路径下一模一样的安装包(已配置)
scp -r /usr/local/soft/hadoop-2.10.1 root@hadoop02:/usr/local/soft/
scp -r /usr/local/soft/hadoop-2.10.1 root@hadoop03:/usr/local/soft/
启动Zookeeper
到此Hadoop高可以用集群的基本配置信息已完成90%,还需要启动Zookeeper服务我们在Zookeeper的安装路径的bin目录下执行start命令
[root@hadoop01 soft]# cd /usr/local/soft/zookeeper-3.4.14/bin/
[root@hadoop01 bin]# zkStart-all.sh
看到如下信息表示启动成功,leader和follower都在
启动Hadoop
启动journalnode
三台机器都要这一步操作(仅第一次启动hadoop时,需要这一步操作,之后不再需要手动启动journalnode)
先进入hadoop的安装路径下,进入sbin路径,启动如下,看到截图中的信息表示启动成功,三台机器如法炮制即可.
[root@hadoop01 sbin]# cd /usr/local/soft/hadoop-2.10.1/sbin/
[root@hadoop01 sbin]# ./hadoop-daemon.sh start journalnode
hdfs格式化
# 在hadoop-1.x版本
[root@hadoop01 bin]# ./hadoop namenode -format
# 在hadoop-2.x版本
[root@hadoop01 bin]# ./hdfs namenode -format
显示如上信息且没有报错即可,将格式化后的目录复制到hadoop02(另一台NameNode节点)中,具体命令如下:
[root@hadoop01 bin]# scp -r /export/data/hadoop root@hadoop03:/export/data/
zkfc格式化
故障转移:在hadoop01节点上格式化ZKFC,命令如下:(为了连接上zookeeper集群,然后在zookeeper集群上面创建一个znode节点: /hadooop-ha/masters,所以在哪里格式化zkfc其实不并重要,重要的是在zookeeper集群上创建znode。)
[root@hadoop01 bin]# hdfs zkfc -formatZK
namenode主从同步
在hadoop-02节点上执行同步命令
[root@hadoop02 hadoop]# hdfs namenode -bootstrapStandby
启动HDFS
在hadoop01节点上启动HDFS,命令如下:
[root@hadoop01 sbin]# ./start-dfs.sh
(可以看到启动了两个namenode一主一备、三个datanode,三个journalnode、两个zkfc)
启动YARN
在hadoop01节点上启动Yarn,命令如下 :
[root@hadoop01 sbin]# ./start-yarn.sh
在hadoop02节点上手动启动备用的resourcemanager
在hadoop02节点上执行如下命令:
[root@hadoop02 hadoop-2.10.1]# sbin/yarn-daemon.sh start resourcemanager
最后通过宿主机浏览器分别访问http://{IP}:50070和http://{IP}:8088查看HDFS和YARN集群状态,效果如下:
至此,Hadoop环境就已经启动成功了,可能熟悉Hadoop1.x的小伙伴会比较好奇,怎么都没有看到start-all.sh这个命令了,看下面的执行命令,可以看出在hadoop2.x版本中start-all.sh脚本已经被标记为"弃用"状态,且被dfs和yarn的两个脚本替代了因为2.x版本将资源管理和任务管理拆分了,也就是前面启动的hdfs和yarn命令就是了.
参考文章
搭建Hadoop高可用集群_操作就完事的博客-CSDN博客_hadoop高可用集群搭建
Hadoop高可用集群搭建(超详细)_程序员不吃芹菜的博客-CSDN博客_hadoop高可用集群搭建
全部评论