前言
- 大数据 基础概念
- 大数据 Centos基础
- 大数据 Shell基础
- 大数据 ZooKeeper
- 大数据 Hadoop介绍、配置与使用
- 大数据 Hadoop之HDFS
- 大数据 MapReduce
- 大数据 Hive
- 大数据 Yarn
- 大数据 MapReduce使用
- 大数据 Hadoop高可用HA
不知道写啥,还是把几篇比较好的文章放上来。
- Hadoop NameNode 高可用 (High Availability) 实现解析
- 既有原理又有对比的文章。
- NameNode 高可用整体架构概述。
- NameNode主备切换实现。
- NameNode 共享存储实现。
- NameNode 高可用运维中的注意事项。
- Hadoop NameNode 高可用架构
- 介绍该高可用架构的主备切换机制。
- 介绍该高可用架构的主备切换机制。
HA配置
集群规划
主机名 | IP地址 | 安装的软件 | 运行的进程 |
---|---|---|---|
Hadoop1 | 192.168.1.101 | JDK、Hadoop | NameNode、DFSZKFailoverController(zkfc) |
Hadoop2 | 192.168.1.102 | JDK、Hadoop | NameNode、DFSZKFailoverController(zkfc) |
Hadoop3 | 192.168.1.103 | JDK、Hadoop | ResourceManager |
Hadoop4 | 192.168.1.104 | JDK、Hadoop | ResourceManager |
Hadoop5 | 192.168.1.105 | JDK、Hadoop、ZooKeeper | DataNode、NodeManager、JournalNode、QuorumPeerMain |
Hadoop6 | 192.168.1.106 | JDK、Hadoop、ZooKeeper | DataNode、NodeManager、JournalNode、QuorumPeerMain |
Hadoop7 | 192.168.1.107 | JDK、Hadoop、ZooKeeper | DataNode、NodeManager、JournalNode、QuorumPeerMain |
配置过程
配置host
vim /etc/hosts
增加IP映射:- 说明:在每一个结点中都需要配置。
192.168.1.101 hadoop1
192.168.1.102 hadoop2
192.168.1.103 hadoop3
192.168.1.104 hadoop4
192.168.1.105 hadoop5
192.168.1.106 hadoop6
192.168.1.107 hadoop7
免密登录
参见【大数据 zookeeper】——免密登录配置部分。
配置ZooKeeper集群
在Hadoop5
、Hadoop6
、Hadoop7
中安装ZooKeeper
。只需要配置一台之后,使用scp
分发到不同结点上去就可以了。但是需要修改myid
,确保每个结点的myid
不一样。
- 该配置位于
Hadoop5
。 - 下载:
wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
- 解压:
tar -zxvf zookeeper-3.4.10.tar.gz
- 移动到
/opt
目录下:sudo mv zookeeper-3.4.10 /opt
cd /opt
sudo mv zookeeper-3.4.10 zookeeper
- 修改配置文件:
cd conf
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
- 修改
dataDir
目录:mkdir /opt/zookeeper/zooData
- 修改
dataDir=/tmp/zookeeper
为/opt/zookeeper/zooData
- 增加Log输出目录:
mkdir /opt/zookeeper/zooLog
dataLogDir=/opt/zookeeper/zooLog
- 增加服务端:
- 增加一个IP地址别名,后面配置使用。
vim /ect/hosts
- 说明:IP地址 别名
192.168.1.105 hadoop5
192.168.1.106 hadoop6
192.168.1.107 hadoop7
- 说明:等号后参数分别为:主机名、心跳端口、数据端口
server.1=hadoop5:2888:3888
server.2=hadoop6:2888:3888
server.3=hadoop7:2888:3888
- 增加一个IP地址别名,后面配置使用。
- 配置
myid
:- 在每个服务端都需要这样子配,但是
myid
不允许相同。 myid
就是上述的server.数字
的数字,即server.1
中的1
就是myid
的值。echo 1 > /opt/zookeeper/zooData/myid
- 在每个服务端都需要这样子配,但是
- 分发到其他结点:
scp -r /opt/zookeeper hadoop06:/opt/
scp -r /opt/zookeeper hadoop07:/opt/
- 修改
myid
:- Hadoop6:
echo 2 > /opt/zookeeper/zooData/myid
- Hadoop7:
echo 3 > /opt/zookeeper/zooData/myid
- Hadoop6:
配置Hadoop集群
本操作位于
hadoop1
结点上。
- 配置JDK路径和Hadoop的环境。
vim /etc/profile
- 添加以下内容。
# JAVA_HOME
export JAVA_HOME=JDK的路径
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
# HADOOP_HOME
export HADOOP_HOME=/opt/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib/"
export HADOOP_COMMON_LIB_NATIVE_DIR="$HADOOP_HOME/lib/native/"
- 解压
Hadoop
:tar -zxvf hadoop-2.6.5.tar.gz
- 移动到
opt
:mv hadoop-2.6.5/ /opt/
- 改名:
cd /opt/ && mv hadoop-2.6.5 hadoop
- 进入配置目录:
cd /opt/hadoop/etc/hadoop
- 修改
vim hadoop-env.sh
- 搜索
JAVA_HOME
,并修改为本机JDK所在路径。
- 搜索
export JAVA_HOME=JDK的路径
- 修改
vim core-site.xml
- 往其中增加如下内容:
<configuration>
<!-- 指定hdfs的nameservice为ns1 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://bi/</value>
</property>
<!-- 指定hadoop临时目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop/hdpdata/</value>
</property>
<!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop5:2181,hadoop6:2181,hadoop7:2181</value>
</property>
</configuration>
- 修改
vim hdfs-site.xml
- 向其中增加如下内容:
<configuration>
<!--指定hdfs的nameservice为bi,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>bi</value>
</property>
<!-- bi下面有两个NameNode,分别是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.bi</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.bi.nn1</name>
<value>hadoop1:9000</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.bi.nn1</name>
<value>hadoop1:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.bi.nn2</name>
<value>hadoop2:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.bi.nn2</name>
<value>hadoop2:50070</value>
</property>
<!-- 指定NameNode的edits元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop5:8485;hadoop6:8485;hadoop7:8485/bi</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/hadoop/journaldata</value>
</property>
<!-- 开启NameNode失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.bi</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>
</configuration>
- 修改
vim mapred-site.xml
- 向其中增加如下内容。
<configuration>
<!-- 指定mr框架为yarn方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
- 修改
vim yarn-site.xml
- 向其中增加如下内容。
<configuration>
<!-- 开启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>hadoop3</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop4</value>
</property>
<!-- 指定zk集群地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop5:2181,hadoop6:2181,hadoop7:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
- 修改
slaves
,vim slaves
: - 删除其中
localhost
,增加以下内容:
hadoop5
hadoop6
hadoop7
- 分发Hadoop到其他结点:
- hadoop2:
scp -r /opt/hadoop hadoop2:/opt/
- hadoop3:
scp -r /opt/hadoop hadoop3:/opt/
- hadoop4:
scp -r /opt/hadoop hadoop4:/opt/
- hadoop5:
scp -r /opt/hadoop hadoop5:/opt/
- hadoop6:
scp -r /opt/hadoop hadoop6:/opt/
- hadoop7:
scp -r /opt/hadoop hadoop7:/opt/
- hadoop2:
- 配置JDK路径和Hadoop的环境。
vim /etc/profile
- 添加以下内容。
# JAVA_HOME
export JAVA_HOME=JDK的路径
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
# HADOOP_HOME
export HADOOP_HOME=/opt/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib/"
export HADOOP_COMMON_LIB_NATIVE_DIR="$HADOOP_HOME/lib/native/"
- 分发
/etc/profile
文件到其他结点中。- hadoop2:
scp -r /etc/profile hadoop2:/etc
- hadoop3:
scp -r /etc/profile hadoop3:/etc
- hadoop4:
scp -r /etc/profile hadoop4:/etc
- hadoop5:
scp -r /etc/profile hadoop5:/etc
- hadoop6:
scp -r /etc/profile hadoop6:/etc
- hadoop7:
scp -r /etc/profile hadoop7:/etc
- 之后需要每个结点都执行
source /etc/profile
才会生效。
- hadoop2:
启动
- 启动ZooKeeper集群
cd /opt/zookeeper/bin
- hadoop5:
./zkServer.sh start
- hadoop6:
./zkServer.sh start
- hadoop7:
./zkServer.sh start
- 使用
./zkServer.sh status
查看状态,可以看到两个结点是follower,一个是leader。
- 启动JournalNode集群
- hadoop5:
hadoop-daemon.sh start journalnode
- hadoop6:
hadoop-daemon.sh start journalnode
- hadoop7:
hadoop-daemon.sh start journalnode
- hadoop5:
- 格式化HDFS
- hadoop1:
hdfs namenode -format
- 分发到hadoop2:
scp -r /opt/hadoop/hdpdata hadoop2:/opt/hadoop/
- hadoop1:
- 格式化ZKFC
- hadoop1:
hdfs zkfc -formatZK
- hadoop1:
- 启动HDFS
- hadoop1:
start-dfs.sh
- hadoop3:
start-yarn.sh
- hadoop4:
yarn-daemon.sh start resourcemanager
- hadoop1:
- 查看是否启动:
- 在浏览器中:
hadoop2:50070
,如果正常启动页面就表示安装启动成功了。其中'hadoop2:9000'(standby)
就表示hadoop2结点是standby
状态,未激活。 - 在浏览器中:输入链接
hadoop3:8088
,可以正常启动页面。 - 在浏览器中:输入链接
hadoop4:8088
,可以正常启动页面。hadoop3结点正常的时候,会重定向到hadoop3:8088
;如果hadoop3挂掉了,那么hadoop4会等待5s后,启动hadoop4上的ResourceManager
,并跳转到hadoop4:8088
。
- 在浏览器中:
附录
- 感谢DPB老师提供的资料。