Hadoop HA 分布式安装

假设以三台服务器来安装Hadoop

IPhostname
192.168.0.102

hadoop102

192.168.0.103hadoop103
192.168.0.104

hadoop104

 

 

 

 

 

组件版本

组件版本
Java1.8
zookeeper3.4.14
hadoop3.1.3

 

 

 

 

 

一、环境准备

1.三台同时配置hosts文件

vim /etc/hosts

#添加如下文字
192.168.0.102 hadoop102
192.168.0.103 hadoop103
192.168.0.104 hadoop104

2.三台同时安装jdk, 确认版本号相同,否则每台server都需要手动调整java_home的路径

#安装 jdk
yum install -y java-1.8.0-openjdk-devel.x86_64

3.三台同时创建hadoop用户,设定相同的密码(123456)

adduser hadoop

passwd hadoop

4.三台同时创建文件夹并授权给hadoop账户

mkdir /opt/module

mkdir /opt/software

mkdir -p /opt/data/journalnode

mkdir -p /opt/data/journaldata

mkdir -p /opt/data/zookeeper


chown -R hadoop:hadoop /opt/module

chown -R hadoop:hadoop /opt/data

chown -R hadoop:hadoop /opt/software

5.三个台都要配置hadoop用户的JAVA_HOME

vim /etc/profile

#更新原始的path设定

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.222.b10-1.el7_7.x86_64/

export HADOOP_HOME=/opt/module/hadoop-3.1.3

export PATH=$PATH:$HOME/.local/bin:$HOME/bin:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

#使配置文件生效

source /etc/profile

6.在hadoop102,交换免密登录的密钥,保证hadoop102与另外的节点互通

su hadoop

#持续回车即可,最终会产生ssh的key在home下

ssh-keygen -t rsa

#交换密钥

ssh-copy-id hadoop102 #注意:本机也需要执行

ssh-copy-id hadoop103

ssh-copy-id hadoop104

#测试密钥是否交换成功,直接输出即代表成功,如 Thu Jan 2 21:58:40 EST 2020

ssh hadoop102 date

ssh hadoop103 date

ssh hadoop104 date

 环境准备到此结束。

二、安装Zookeeper

1.在hadoop102,下载压缩包

cd /opt/software

wget https://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz

tar -xvf zookeeper-3.4.14.tar.gz -C /opt/module

2.复制样例配置文件zoo_sample.cfg为zoo.cfg

cp /opt/module/zookeeper-3.4.14/conf/zoo_sample.cfg  /opt/module/zookeeper-3.4.14/conf/zoo.cfg

3.修改zoo.cfg配置文件

vim /opt/module/zookeeper-3.4.14/conf/zoo.cfg

dataDir=/opt/data/zookeeper

server.1=hadoop102:2888:3888

server.2=hadoop103:2888:3888

server.3=hadoop104:2888:3888

4.在hadoop102,将配置好的zookeeper文件夹,分发到其他节点

scp -r /opt/module/zookeeper-3.4.14 hadoop@hadoop103:/opt/module/zookeeper-3.4.14
scp -r /opt/module/zookeeper-3.4.14 hadoop@hadoop104:/opt/module/zookeeper-3.4.14

5.三台服务器, 每台创建不一样的server id标识

touch /opt/data/zookeeper/myid
vim  /opt/data/zookeeper/myid
#hadoop102输入1, hadoop103输入2, hadoop104输入3

6.三台服务器同时启动zk

# 启动zookeeper
/opt/module/zookeeper-3.4.14/bin/zkServer.sh start

# 查看状态
/opt/module/zookeeper-3.4.14/bin/zkServer.sh status

Zookeeper安装完毕!

三、安装hadoop

在一台上配置完毕后,再分发给其他节点,减少配置出错的概率和工作量。

1.在hadoop102,下载压缩包

#下载hadoop

cd /opt/software

wget https://mirrors.cnnic.cn/apache/hadoop/common/hadoop-3.1.3/hadoop-3.1.3.tar.gz

tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module

2.在hadoop102,给hadoop-env.sh设定java_home,hadoop_home

vim /opt/module/hadoop-3.1.3/etc/hadoop/hadoop-env.sh

#定位到JAVA_HOME附近,添加如下内容

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.222.b10-1.el7_7.x86_64/

export HADOOP_HOME=/opt/module/hadoop-3.1.3/

#使配置文件生效

source  /opt/module/hadoop-3.1.3/etc/hadoop/hadoop-env.sh

3.配置core-site.xml

<configuration>
	<!-- 把两个NameNode的地址组装成一个集群mycluster -->
	<property>
	    <name>fs.defaultFS</name>
	    <value>hdfs://mycluster</value>
	</property>
	 
	<!-- 指定hadoop运行时产生文件的存储目录 -->
	<property>
	    <name>hadoop.tmp.dir</name>
	    <value>/opt/ha/hadoop-2.7.2/data/tmp</value>
	</property>
	<!-- zookeeper集群地址 -->
	<property>
	    <name>ha.zookeeper.quorum</name>
	    <value>hadoop102:2181,hadoop103:2181,hadoop104:2181</value>
	</property>
	<!-- JournalNode守护程序将存储其本地状态的路径 -->
	<property>
	    <name>dfs.journalnode.edits.dir</name>
	    <value>/apps/journaldata</value>
	</property>
</configuration>

4.配置hdfs-site.xml

<configuration>
	<!-- 数据的副本数量 -->
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <!-- 此新名称服务的逻辑名称 -->
    <property>
	    <name>dfs.nameservices</name>
	    <value>mycluster</value>
    </property>
    <!-- 命名空间中namenodes的id -->
    <property>
        <name>dfs.ha.namenodes.mycluster</name>
        <value>nn1,nn2</value>
    </property>
    <!-- 每个NameNode监听的标准RPC地址 -->
    <property>
	    <name>dfs.namenode.rpc-address.mycluster.nn1</name>
	    <value>hadoop102:9000</value>
    </property>
    <property>
	    <name>dfs.namenode.rpc-address.mycluster.nn2</name>
	    <value>hadoop104:9000</value>
    </property>
    <!-- 每个NameNode监听的标准HTTP地址 -->
    <property>
	    <name>dfs.namenode.http-address.mycluster.nn1</name>
	    <value>hadoop102:50070</value>
    </property>
    <property>
	    <name>dfs.namenode.http-address.mycluster.nn2</name>
	    <value>hadoop104:50070</value>
    </property>
    <!-- 共享存储目录的位置 -->
    <property> 
	    <name> dfs.namenode.shared.edits.dir </name> 
	    <value>qjournal://hadoop102:8485;hadoop103:8485;hadoop104:8485/mycluster </value> 
    </property>
    <!-- HDFS客户端用于连接NameNode的Java类 -->
    <property>
	    <name>dfs.client.failover.proxy.provider.mycluster</name>
  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    <!-- 脚本或Java类的列表,这些列表将用于在故障转移期间隔离Active NameNode -->
    <!-- 配置ssh 免密登录 -->
    <property>
	    <name>dfs.ha.fencing.methods</name>
	    <value>sshfence</value>
    </property>
    <property>
	    <name>dfs.ha.fencing.ssh.private-key-files</name>
	    <value>/home/hadoop/.ssh/id_rsa</value>
    </property>
    <!-- ssh 链接超时时间 -->
    <property>
	    <name>dfs.ha.fencing.ssh.connect-timeout</name>
	    <value>30000</value>
    </property>
    <!-- 这是JournalNode进程保持逻辑状态的路径。这里在linux服务器文件的绝对路径 -->
    <property>
	    <name>dfs.journalnode.edits.dir</name>
	    <value>/apps/journalnode</value>
    </property>
    <!-- 设置故障自动转移 -->
    <property>
	    <name>dfs.ha.automatic-failover.enabled</name>
	    <value>true</value>
    </property>
</configuration>

5.配置yarn-site.xml

<configuration>
  <!--mapreduce执行shuffle(洗牌的意思)获取数据的方式-->
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <!-- 启用 ResourceManager 高可用 -->
  <property>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
  </property>
  <!-- 声明两台resourcemanager的地址 -->
  <property>
    <name>yarn.resourcemanager.cluster-id</name>
    <value>mycluster</value>
  </property>
  <!--  RM的逻辑ID列表 -->
  <property>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <value>rm1,rm2</value>
  </property>
  <!--  对于每个rm-id,指定RM对应的主机名 -->
  <property>
    <name>yarn.resourcemanager.hostname.rm1</name>
    <value>hadoop102</value>
  </property>
  <property>
    <name>yarn.resourcemanager.hostname.rm2</name>
    <value>hadoop103</value>
  </property>
  <!-- 对于每个rm-id,请指定RM https Web应用程序对应的host:port -->
  <property>
    <name>yarn.resourcemanager.webapp.address.rm1</name>
    <value>hadoop102:8088</value>
  </property>
  <property>
    <name>yarn.resourcemanager.webapp.address.rm2</name>
    <value>hadoop103:8088</value>
  </property>
  <!--启用自动恢复--> 
  <property>
    <name>yarn.resourcemanager.recovery.enabled</name>
    <value>true</value>
  </property>
  <!-- zookeeper 集群地址 -->
  <property>
    <name>hadoop.zk.address</name>
    <value>hadoop102:2181,hadoop103:2181,hadoop104:2181</value>
  </property>
  <!-- 日志聚集功能使能 -->
  <property>
      <name>yarn.log-aggregation-enable</name>
      <value>true</value>
  </property>

  <!-- 日志保留时间设置7天 -->
  <property>
      <name>yarn.log-aggregation.retain-seconds</name>
      <value>604800</value>
  </property>

</configuration>

6.配置mapred-site.xml

<configuration>
    <!-- 执行框架设置为Hadoop YARN -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>

    <!-- 历史服务器端地址 -->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>hadoop104:10020</value>
    </property>
    <!-- 历史服务器web端地址 -->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hadoop104:19888</value>
    </property>
</configuration>

7.在hadoop102,修改workers文件

vim /opt/module/hadoop-3.1.3/etc/hadoop/workers

hadoop102
hadoop103
hadoop104

8.在hadoop102,将配置好的hadoop文件夹,分发到其他节点

cd /opt/module/hadoop-3.1.3

#拷贝
scp -r /opt/module/hadoop-3.1.3 hadoop@hadoop103:/opt/module/hadoop-3.1.3
scp -r /opt/module/hadoop-3.1.3 hadoop@hadoop104:/opt/module/hadoop-3.1.3

9.格式化hdfs,先启动zookeeper

分别在hadoop102、hadoop103、hadoop104上启动journalnode

/opt/module/hadoop-3.1.3/bin/hdfs --daemon start journalnode

运行jps检查journalnode进程

10.在hadoop102节点,格式化hdfs

/opt/module/hadoop-3.1.3/bin/hdfs namenode -format

11.在hadoop102节点启动namenode

/opt/module/hadoop-3.1.3/bin/hdfs --daemon start namenode

12.在hadoop104上同步hadoop102 namenode元数据

/opt/module/hadoop-3.1.3/bin/hdfs namenode -bootstrapStandby

14.在hadoop102 上关闭namenode

/opt/module/hadoop-3.1.3/bin/hdfs --daemon stop namenode

15.格式化zkfc(仅第一次启动执行)在hadoop102 上执行即可

/opt/module/hadoop-3.1.3/bin/hdfs zkfc -formatZK

16.分别在hadoop102、hadoop103、hadoop104上关闭journalnode

/opt/module/hadoop-3.1.3/bin/hdfs --daemon stop journalnode

17.启动hadoop

分别在hadoop102、hadoop103、hadoop104上启动journalnode

/opt/module/hadoop-3.1.3/bin/hdfs --daemon start journalnode

18.在hadoop102上执行start-all.sh

/opt/module/hadoop-3.1.3/sbin/start-all.sh

19.在hadoop104上启动历史服务器

/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver

#如果一切顺利,运行jps命令查看进程
jps

hadoop安装、启动完毕!下面验证一下hadoop的ha是否有效!

四、验证

1.web访问

HDFS

http://hadoop102:50070

http://hadoop104:50070

其中一个是active,一个是standby

YARN

http://hadoop102:8088

http://hadoop103:8088

在浏览的时候standby会重定向跳转到active对应的页面

2.HA的验证

namenode HA

访问

http://hadoop102:50070

http://hadoop104:50070

其中一个是active,一个是standby

主备切换验证

在hadoop102上kill -9 namenode的进程,这时候namenode会自动切换到hadoop104

YARN HA

主备切换验证

在hadoop102上kill -9 resourcemanager的进程

这时可以访问http://hadoop103:8088

然后在hadoop102上重新启动resourcemanager(yarn --daemon start resourcemanager),再访问http://hadoop102:8088时就会自动跳转到 http://hadoop103:8088

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值