登录    关于
马育民老师的博客

马育民的博客

QQ:65242847

hadoop3.x ha高可用-安装部署

说明

本文 只配置 HDFS HA高可用,没有配置 yarn等其他服务

登录 hadoop1 虚拟机

登录 hadoop1 虚拟机,执行下面操作

上传

解压缩

创建 文件夹:

mkdir hadoop-3.0.3-ha

解压缩:

tar zxvf hadoop-3.0.3.tar.gz -C hadoop-3.0.3-ha --no-same-owner

移动文件:

mv /program/hadoop-3.0.3-ha/hadoop-3.0.3/* /program/hadoop-3.0.3-ha/

删除多余的目录

rm -rf /program/hadoop-3.0.3-ha/hadoop-3.0.3

修改环境变量

vim /etc/profile.d/bigdata_env.sh

已经安装过 hadoop(注意)

将原来的 HADOOP_HOME 配置注释掉,如下:

# export HADOOP_HOME=/program/hadoop-3.0.3

增加下面的配置:

export HADOOP_HOME=/program/hadoop-3.0.3-ha

完整如下:

# 配置 HADOOP_HOME
# export HADOOP_HOME=/program/hadoop-3.0.3
export HADOOP_HOME=/program/hadoop-3.0.3-ha
export PATH=${HADOOP_HOME}/bin:$PATH
export PATH=${HADOOP_HOME}/sbin:$PATH

立即生效

source /etc/profile

查看:

echo $HADOOP_HOME

显示结果如下,说明配置生效:

/program/hadoop-3.0.3-ha

同步到 hadoop2

rsync -av /etc/profile.d/bigdata_env.sh  root@hadoop2:/etc/profile.d/

同步到 hadoop3

rsync -av /etc/profile.d/bigdata_env.sh  root@hadoop3:/etc/profile.d/

立即生效

登录 hadoop2hadoop3,执行下面命令:

source /etc/profile

验证

登录 hadoop2hadoop3,执行下面命令:

echo $HADOOP_HOME

显示如下,说明成功:

/program/hadoop-3.0.3-ha

修改 hadoop-env.sh

hadoop-env.sh 配置了 hadoop 的环境

进入 hadoop目录

cd /program/hadoop-3.0.3-ha/etc/hadoop/

设置 JAVA_HOME(可略)

指定 java 绝对路径,否则 启动 NameNode 和 DataNode 会报错

使用 vim 编辑该文件:

vim hadoop-env.sh

找到 export JAVA_HOME ,如果该行前面有 # ,就去掉 #,改成

export JAVA_HOME=/program/jdk1.8.0_202

可通过下面命令显示 java 绝对路径:

echo $JAVA_HOME

设置 root用户

如果用 root 用户部署、启动hadoop,需要配置 root 用户,否则 执行 start-dfs.sh 命令,报错如下:

Starting namenodes on [hadoop1]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
Starting datanodes
ERROR: Attempting to operate on hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
Starting secondary namenodes [hadoop3]
ERROR: Attempting to operate on hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.

hadoop-env.sh 文件的 最下面 添加下面配置:

export HDFS_DATANODE_USER=root
export HDFS_NAMENODE_USER=root
export HDFS_JOURNALNODE_USER=root
export HDFS_ZKFC_USER=root

修改 core-site.xml

进入 hadoop目录

cd /program/hadoop-3.0.3-ha/etc/hadoop
vim core-site.xml

增加下面配置

<!-- HA集群名称,该值要和hdfs-site.xml中的配置保持一致 -->
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://mycluster</value>
</property>

<!-- hadoop本地磁盘存放数据的公共目录 -->
<property>
    <name>hadoop.tmp.dir</name>
    <value>/program/hadoop-3.0.3-ha/data/tmp</value>
</property>

<!-- ZooKeeper集群的地址和端口-->
<property>
    <name>ha.zookeeper.quorum</name>
    <value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
</property>

<property>
    <name>hadoop.http.staticuser.user</name>
    <value>root</value>
</property>

解释:

hadoop.http.staticuser.user:不加此配置,上传文件报错如下:

java.net.ConnectException: Call From hadoop1/192.168.58.101 to hadoop2:8020 failed on connection exception: java.net.ConnectException: 拒绝连接; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefused

配置文件解释:HA集群名称

<!-- HA集群名称,该值要和hdfs-site.xml中的配置保持一致 -->
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://mycluster</value>
</property>

不能像之前配置集群那样,写死 NameNode 的 ip 和 port,因为 有 2个 NameNode,不确定哪个是 active ,所以此处指定同一个名字,该名字可任意起,但后面配置要 与 此处一致

配置文件解释:设置HDFS存储文件的位置

当上传文件到 HDFS 后,HDFS 中的文件保存在:

/program/hadoop-3.0.3-ha/data/tmp/dfs/data/current/BP-生成的数字/current/finalized/subdir0/subdir0/

修改 hdfs-site.xml

进入 hadoop目录

cd /program/hadoop-3.0.3-ha/etc/hadoop/
vim hdfs-site.xml

增加下面配置:

<!--指定hdfs的nameservice为mycluster,需要和core-site.xml中的保持一致 -->
<property>
    <name>dfs.nameservices</name>
    <value>mycluster</value>
</property>

<!-- mycluster下面有两个NameNode,分别是nn1,nn2 -->
<property>
    <name>dfs.ha.namenodes.mycluster</name>
    <value>nn1,nn2</value>
</property>

<!-- nn1的RPC通信地址 -->
<property>
    <name>dfs.namenode.rpc-address.mycluster.nn1</name>
    <value>hadoop1:8020</value>
</property>

<!-- nn1的http通信地址 -->
<property>
    <name>dfs.namenode.http-address.mycluster.nn1</name>
    <value>hadoop1:9870</value>
</property>

<!-- nn2的RPC通信地址 -->
<property>
    <name>dfs.namenode.rpc-address.mycluster.nn2</name>
    <value>hadoop2:8020</value>
</property>

<!-- nn2的http通信地址 -->
<property>
    <name>dfs.namenode.http-address.mycluster.nn2</name>
    <value>hadoop2:9870</value>
</property>

<!-- 指定NameNode的edits元数据在JournalNode上的存放位置 -->
<property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485/mycluster</value>
</property>

<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/program/hadoop-3.0.3-ha/data/journaldata</value>
</property>

<!-- 开启NameNode失败自动切换 -->
<property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
</property>

<!-- 指定该集群出故障时,哪个实现类负责执行故障切换 -->
<property>
    <name>dfs.client.failover.proxy.provider.mycluster</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

<!-- 配置隔离机制方法-->
<property>
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence</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>

配置 MapReduce

进入 hadoop目录

cd /program/hadoop-3.0.3-ha/etc/hadoop/

修改 mapred-site.xml

vim mapred-site.xml

增加内容

增加下面内容

<!-- 指定mr框架为yarn方式 -->
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>

修改 yarn-site.xml - yarn ha高可用(略)

<!-- 开启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>hadoop1</value>
</property>
<property>
    <name>yarn.resourcemanager.hostname.rm2</name>
    <value>hadoop2</value>
</property>
<!-- 指定zk集群地址 -->
<property>
    <name>yarn.resourcemanager.zk-address</name>
    <value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
</property>
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>

配置 workers

启动集群时,会读取 workers文件的主机名,然后访问这些主机

进入 hadoop目录

cd /program/hadoop-3.0.3-ha/etc/hadoop/

vim文件

vim workers

修改内容

配置主机名称,内容如下:

hadoop1
hadoop2
hadoop3

注意:

  • 主机名 前后不允许有空格
  • 不允许有空行

同步文件 hadoop

更新配置文件目录

同步到 hadoop2

rsync -av /program/hadoop-3.0.3-ha root@hadoop2:/program/

同步到 hadoop3

rsync -av /program/hadoop-3.0.3-ha root@hadoop3:/program/

验证文件是否正确

登录 hadoop2 查看 core-site.xml 文件是否正确

登录 hadoop3 查看 core-site.xml 文件是否正确


原文出处:http://malaoshi.top/show_1IX26NUd2ZG9.html