【hadoop】高可用的Hadoop完全分布式环境搭建

 前言:要顺利完成本次环境搭建,必须准备好三台配置好ZooKeeper集群的虚拟机,再次确保三台主机有独立的IP独立的主机名、并且配置好IP地址与主机名之间的映射,三台机器之间的SSH免密登录,以及三台机器之间的时间同步

我们对于集群配置的修改,可以先在一台机器上进行(如master),修改完成后把配置文件分发到其他机器上即可!!!

本教程的集群的规划如图所示

(一)HDFS分布式集群的配置 

一、修改core-site.xml配置文件

配置文件位于你的hadoop安装文件夹里面的/etc/hadoop/路径下,因此先:

cd ~/hadoop-2.9.2/etc/hadoop/

 然后再:

vim core-site.xml

配置内容如下: 

<configuration>
	<property>
		<name>fs.defaultFS</name>
		<value>hdfs://mycluster</value>
	</property>
	<!--默认的HDFS路径-->
	<property>
		<name>hadoop.tmp.dir</name>
		<value>/home/hadoop/data/tmp</value>
	</property>
	<!--hadoop的临时目录,如果需要配置多个目录,需要逗号隔开-->
	<property>
	<name>ha.zookeeper.quorum</name>
	<value>master:2181,slave1:2181,slave2:2181</value>
	</property>
	<!--配置Zookeeper管理HDFS-->
</configuration>

修改完成后,把该配置文件分发到另外两台机器,或者你自行在另外两台机器上修改相应的配置,要确保三台机器配置内容一样

以下是发送配置文件的命令,以发送到slave1机器上的为例:

scp -r core-site.xml hadoop@slave1:/home/hadoop/hadoop-2.9.2/etc/hadoop/core-site.xml

 请注意标红的部分,尝试理解这个scp命令,按照实际情况去修改执行。

 二、修改hdfs-site.xml配置文件

该文件同样位于hadoop安装文件夹里面的/etc/hadoop/路径下:

cd ~/hadoop-2.9.2/etc/hadoop/

然后再: 

vim hdfs-site.xml

配置内容如下: 

<configuration>
  <property>
    <name>dfs.replication</name>
    <value>3</value>
  </property>
  <!--数据块副本数为3-->
  <property>
    <name>dfs.permissions</name>
    <value>false</value>
  </property>
  <property>
    <name>dfs.permissions.enabled</name>
    <value>false</value>
  </property>
  <!--权限默认配置为false-->
  <property>
    <name>dfs.nameservices</name>
    <value>mycluster</value>
  </property>
  <!--命名空间,它的值与fs.defaultFS的值要对应,namenode高可用之后有两个namenode,mycluster是对外提供的统一入口-->
  <property>
    <name>dfs.ha.namenodes.mycluster</name>
    <value>nn1,nn2</value>
  </property>
  <!-- 指定 nameService 是 mycluster时的nameNode有哪些,这里的值也是逻辑名称,名字随便起,相互不重复即可-->
  <property>
    <name>dfs.namenode.rpc-address.mycluster.nn1</name>
    <value>master:9000</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.mycluster.nn1</name>
    <value>master:50070</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.mycluster.nn2</name>
    <value>slave1:9000</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.mycluster.nn2</name>
    <value>slave1:50070</value>
  </property>
  <property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
  </property>
  <!--启动故障自动恢复-->
  <property> 
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://master:8485;slave1:8485;slave2:8485/mycluster</value>
  </property>
  <!--指定NameNode的元数据在JournalNode上的存放位置-->
  <property>
    <name>dfs.client.failover.proxy.provider.mycluster</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  </property>
  <!--指定 mycluster 出故障时,哪个实现类负责执行故障切换-->
  <property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/home/hadoop/data/journaldata/jn</value>
  </property>
  <!-- 指定JournalNode在本地磁盘存放数据的位置 -->
  <property>
    <name>dfs.ha.fencing.methods</name>
    <value>shell(/bin/true)</value>
  </property>
  <!-- 配置隔离机制,shell通过ssh连接active namenode节点,杀掉进程-->
  <property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/home/hadoop/.ssh/id_rsa</value>
  </property>
  <!-- 为了实现SSH登录杀掉进程,还需要配置免密码登录的SSH密匙信息 -->
  <property>
    <name>dfs.ha.fencing.ssh.connect-timeout</name>
    <value>10000</value>
  </property>
  <property>
    <name>dfs.namenode.handler.count</name>
    <value>100</value>
  </property>
</configuration>

请务必认真仔细,注意标红的主机名、路径等信息,要和你实际情况相符。

修改完成后,把该配置文件分发到另外两台机器,或者你自行在另外两台机器上修改相应的配置,要确保三台机器配置内容一样

以下是发送配置文件的命令,以发送到slave1机器上的为例:

scp -r hdfs-site.xml hadoop@slave1:/home/hadoop/hadoop-2.9.2/etc/hadoop/hdfs-site.xml

三、配置slaves配置文件 

该文件同样位于hadoop安装文件夹里面的/etc/hadoop/路径下:

cd ~/hadoop-2.9.2/etc/hadoop/

 然后再:

vim slaves

 配置内容如下:

master
slave1
slave2

 以下是发送配置文件的命令,以发送到slave1机器上的为例:

scp -r slaves hadoop@slave1:/home/hadoop/hadoop-2.9.2/etc/hadoop/slaves

 四、启动HDFS集群服务

步骤:

1、HDFS的高可用实现依赖ZooKeeper,因此先启动三台机器的ZooKeeper服务;

2、分别启动JournalNode集群,在三台机器上各自执行以下命令:

hadoop-daemon.sh start journalnode

3、格式化主节点NameNode,在master上,执行以下命令:

hdfs namenode -format                   // 格式化NameNode
hdfs zkfc -formatZK                     // 格式化ZooKeeper高可用
hdfs namenode                            // 启动NameNode

4、master上启动NameNode进程后,在slave1上就可以同步NameNode元数据,在slave1执行以下命令: 

hdfs namenode -bootstrapStandby

5、第4步同步完成后,可以关闭master上的NameNode进程,切回到master上的终端,使用<Ctrl+C>组合键结束进程即可。

6、关闭JournalNode集群,在三台机器上各自执行以下命令:

hadoop-daemon.sh stop journalnode

 如果上述步骤没有报错,则后续可以在master上一键启动HDFS集群:

start-dfs.sh

 测试:启动成功后,可以通过master、slave1的IP地址+50070端口在浏览器端访问HDFS集群的Web界面,查看状态,如:http://192.168.203.133:50070,或者使用以下命令查看NameNode状态:

hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2

测试2:可以尝试使用hadoop fs -mkdir命令创建一个/test文件夹,然后再把words.log文件上传到HDFS集群中,检查HDFS能否正常使用。

(二)YARN分布式集群的配置 

一、修改mapred-site.xml配置文件

该文件主要配置MapReduce相关属性,将MapReduce运行环境指定未YARN即可,这里和前面的配置中是一致的,不需修改。文件内容如下,可供确认:

<configuration>
<property>
	<name>mapreduce.framework.name</name>
	<value>yarn</value>
</property>
<!--指定运行MapReduce的环境是YARN-->
</configuration>

二、修改yarn-site.xml配置文件

该文件同样位于hadoop安装文件夹里面的/etc/hadoop/路径下:

cd ~/hadoop-2.9.2/etc/hadoop/

然后再:

vim yarn-site.xml

配置内容如下:

<configuration>
  <property>
    <name>yarn.resourcemanager.connect.retry-interval.ms</name>
    <value>2000</value>
  </property>
  <property>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
  </property>
  <!--打开高可用-->
  <property>
    <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
    <value>true</value>
  </property>
  <!--启动故障自动恢复-->
  <property>
    <name>yarn.resourcemanager.ha.automatic-failover.embedded</name>
    <value>true</value>
  </property>
  <!--RM启动内置选举active-->
  <property>
    <name>yarn.resourcemanager.cluster-id</name>
    <value>yarn-rm-cluster</value>
  </property>
  <!--给yarn cluster 取个名字yarn-rm-cluster-->
  <property>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <value>rm1,rm2</value>
  </property>
  <!--ResourceManager高可用 rm1,rm2-->
  <property>
    <name>yarn.resourcemanager.hostname.rm1</name>
    <value>master</value>
  </property>
  <property>
    <name>yarn.resourcemanager.hostname.rm2</name>
    <value>slave1</value>
  </property>
  <property>
    <name>yarn.resourcemanager.recovery.enabled</name>
    <value>true</value>
</property>
  <!--启用resourcemanager 自动恢复-->
  <property>
    <name>hadoop.zk.address</name>
    <value>master:2181,slave1:2181,slave2:2181</value>
  </property>
  <!--配置Zookeeper地址作为状态存储和leader选举-->
  <property>
    <name>yarn.resourcemanager.address.rm1</name>
    <value>master:8032</value>
  </property>
  <!--rm1端口号-->
  <property>
    <name>yarn.resourcemanager.scheduler.address.rm1</name>
    <value>master:8034</value>
  </property>
  <!-- rm1调度器的端口号-->
  <property>
    <name>yarn.resourcemanager.webapp.address.rm1</name>
    <value> master:8088</value>
  </property>
  <!-- rm1 webapp端口号-->
  <property>
    <name>yarn.resourcemanager.address.rm2</name>
    <value>slave1:8032</value>
  </property>
  <property>
    <name>yarn.resourcemanager.scheduler.address.rm2</name>
    <value>slave1:8034</value>
  </property>
  <property>
    <name>yarn.resourcemanager.webapp.address.rm2</name>
    <value>slave1:8088</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  </property>
  <!--执行MapReduce需要配置的shuffle过程-->
  <property>
    <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>false</value>
  </property>
  <property>
    <name>yarn.nodemanager.vmem-pmem-ratio</name>
 <value>4</value>
  </property>
</configuration>

同样务必认真仔细,注意标红的主机名信息,要和你实际情况相符。

修改完成后,把该配置文件分发到另外两台机器,或者你自行在另外两台机器上修改相应的配置,要确保三台机器配置内容一样

以下是发送配置文件的命令,以发送到slave1机器上的为例:

scp -r yarn-site.xml hadoop@slave1:/home/hadoop/hadoop-2.9.2/etc/hadoop/yarn-site.xml

三、启动YARN集群服务 

步骤:

1、YARN的高可用实现也依赖与ZooKeeper,但前面已经启动了ZooKeeper服务,因此这步可以跳过。

2、一键启动YARN集群,在master上执行脚本命令:

start-yarn.sh

3、由于上面脚本不包含备用ResourceManager的启动,因此要手动启动备用ResourceManager,在slave1执行命令:

yarn-daemon.sh start resourcemanager

4、测试:启动成功后,可以通过master、slave1的IP地址+8088端口在浏览器端访问YARN集群的Web界面,也可以使用以下命令查看两个ResourceManager的状态:

yarn rmadmin -getServiceState rm1
yarn rmadmin -getServiceState rm2

5、测试2:尝试上传一些数据集(用之前的天气数据,或者words.log都行)到HDFS中,然后执行一下对应的MapReduce程序,看看能否正常运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值