目录
前言
亲测可用,只有Hadoop HA集群环境,直接复制粘贴即可。
一,集群环境及基础配置
1,集群环境
主机名 | IP地址 | root密码 |
master | 192.168.100.10 | 000000 |
slave1 | 192.168.100.20 | 000000 |
slave2 | 192.168.100.30 | 000000 |
2,基础配置
主机映射
汉化多执行
vi /etc/hosts
192.168.100.10 master
192.168.100.20 slave1
192.168.100.30 slave2
:wq保存退出
时钟同步
汉化多执行
date
防火墙
汉化多执行
systemctl stop firewalld
systemctl disable firewalld
3,免密登录
汉化多执行
先做root用户
ssh-keygen
直接一路回车就行
ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2
有yes输yes,有password输000000
多执行创建hadoop用户
useradd hadoop
passwd hadoop
输入两遍000000
汉化多执行,hadoop用户免密
su hadoop
ssh-keygen
ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2
和上面root一样,不再赘述。
二,Hadoop集群HA配置
1,上传压缩包并解压
master节点,root用户
su root
输入000000
创建目录
mkdir /opt/software
mkdir -p /opt/local/src
上传压缩包
上传hadoop,jdk,zookeeper到/opt/software下
解压缩
cd /opt/software
tar -zxf hadoop-2.7.0.tar.gz -C /opt/local/src/
tar -zxf jdk-8u141-linux-x64.tar.gz -C /opt/local/src/
tar -zxf zookeeper-3.4.9.tar.gz -C /opt/local/src/
改名
cd /opt/local/src/
mv hadoop-2.7.0 hadoop
mv jdk1.8.0_141 java
mv zookeeper-3.4.9 zookeeper
ll
2,配置环境变量
vi /etc/profile
末尾添加如下
#hadoop enviroment
export HADOOP_HOME=/opt/local/src/hadoop #HADOOP_HOME指向JAVA安装目录
export HADOOP_PREFIX=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
#java environment
export JAVA_HOME=/opt/local/src/java #JAVA_HOME指向JAVA安装目录
export PATH=$PATH:$JAVA_HOME/bin #将JAVA安装目录加入PATH路径
#zookeeper environment
export ZK_HOME=/opt/local/src/zookeeper
export PATH=$PATH:$ZK_HOME/bin
:wq保存退出
3,配置Hadoop HA
配置hadoop环境变量
cd /opt/local/src/hadoop/etc/hadoop/
vi hadoop-env.sh
末尾添加
export JAVA_HOME=/opt/local/src/java
:wq保存退出
更改配置文件1
vi core-site.xml
在两个<configuration></configuration>中间添加如下内容
<!-- 指定hdfs的nameservice为mycluster -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/opt/local/src/hadoop/tmp</value>
</property>
<!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>master:2181,slave1:2181,slave2:2181</value>
</property>
<!-- hadoop链接zookeeper的超时时长设置 -->
<property>
<name>ha.zookeeper.session-timeout.ms</name>
<value>30000</value>
<description>ms</description>
</property>
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
:wq保存退出
更改配置文件2
vi hdfs-site.xml
在两个<configuration></configuration>中间添加如下内容
<!-- journalnode集群之间通信的超时时间 -->
<property>
<name>dfs.qjournal.start-segment.timeout.ms</name>
<value>60000</value>
</property>
<!--指定hdfs的nameservice为mycluster,需要和core-site.xml中的保持一致 dfs.ha.namenodes.[nameservice id]为在nameservice中的每一个NameNode设置唯一标示符。配置一个逗号分隔的NameNode ID列表。这将是被DataNode识别为所有的NameNode。如果使用"mycluster"作为nameservice ID,并且使用"master"和"slave1"作为NameNodes标示符 -->
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<!-- mycluster下面有两个NameNode,分别是master,slave1 -->
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>master,slave1</value>
</property>
<!-- master的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.master</name>
<value>master:8020</value>
</property>
<!-- slave1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.slave1</name>
<value>slave1:8020</value>
</property>
<!-- master的http通信地址 -->
<property>
<name>dfs.namenode.http-address.mycluster.master</name>
<value>master:50070</value>
</property>
<!-- slave1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.mycluster.slave1</name>
<value>slave1:50070</value>
</property>
<!-- 指定NameNode的edits元数据的共享存储位置。也就是JournalNode列表
该url的配置格式:qjournal://host1:port1;host2:port2;host3:port3/journalId
journalId推荐使用nameservice,默认端口号是:8485 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://master:8485;slave1:8485;slave2:8485/mycluster</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
shell(/bin/true)
</value>
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
<property>
<name>dfs.support.append</name>
<value>true</value>
</property>
<!-- 使用sshfence隔离机制时需要ssh免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<!-- 指定副本数 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/local/src/hadoop/tmp/hdfs/nn</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/local/src/hadoop/tmp/hdfs/dn</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/local/src/hadoop/tmp/hdfs/jn</value>
</property>
<!-- 开启NameNode失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 启用webhdfs -->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<!-- 配置sshfence隔离机制超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
<property>
<name>ha.failover-controller.cli-check.rpc-timeout.ms</name>
<value>60000</value>
</property>
:wq保存退出
更改配置文件3
cp mapred-site.xml.template mapred-site.xml
vi mapred-site.xml
在两个<configuration></configuration>中间添加如下内容
<!-- 指定mr框架为yarn方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 指定mapreduce jobhistory地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<!-- 任务历史服务器的web地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
:wq保存退出
更改配置文件4
vi yarn-site.xml
在两个<configuration></configuration>中间添加如下内容
<!-- Site specific YARN configuration properties -->
<!-- 开启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>master</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>slave1</value>
</property>
<!-- 指定zk集群地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>master:2181,slave1:2181,slave2:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</value>
</property>
<!-- 启用自动恢复 -->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<!-- 制定resourcemanager的状态信息存储在zookeeper集群上 -->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
:wq保存退出
配置slaves
vi slaves
删除原有内容 ,添加如下
master
slave1
slave2
创建目录
mkdir -p /opt/local/src/hadoop/tmp/hdfs/nn
mkdir -p /opt/local/src/hadoop/tmp/hdfs/dn
mkdir -p /opt/local/src/hadoop/tmp/hdfs/jn
mkdir -p /opt/local/src/hadoop/tmp/logs
mkdir -p /opt/local/src/hadoop/dfs/name
mkdir -p /opt/local/src/hadoop/dfs/data
mkdir -p /opt/local/src/hadoop/tmp
4,配置zookeeper
修改配置文件
cd /opt/local/src/zookeeper/conf/
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
全部删除,添加如下
tickTime=2000
initLimit=10
syncLimit=5
clientPort=2181
dataDir=/opt/local/src/zookeeper/data
dataLogDir=/opt/local/src/zookeeper/logs
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
:wq保存退出
创建目录
mkdir -p /opt/local/src/zookeeper/data
mkdir -p /opt/local/src/zookeeper/logs
编写myid
vi /opt/local/src/zookeeper/data/myid
内容为1
1
:wq保存退出
5,环境的分发
master节点
scp -r /opt/local/ root@slave1:/opt
scp -r /opt/local/ root@slave2:/opt
scp /etc/profile root@slave1:/etc/profile
scp /etc/profile root@slave2:/etc/profile
slave1节点
vi /opt/local/src/zookeeper/data/myid
修改为2
slave2节点
vi /opt/local/src/zookeeper/data/myid
修改为3
6,修改权限
汉化多执行
chmod 777 -R /opt
chown -R hadoop:hadoop /opt
三,Hadoop集群HA启动
1,切换用户
汉化多执行
su hadoop
cd /opt/local/src/
2,加载环境变量
source /etc/profile
3,启动zookeeper
汉化多执行
zkServer.sh start
zkServer.sh status
如果hadoop下查看服务状态失败,那就用root用户试试
4,启动journalnode守护进程
master节点
hadoop-daemons.sh start journalnode
5,初始化namnode
hdfs namenode -format
显示status 0正确
6,注册ZNode
hdfs zkfc -formatZK
7, 启动hadfs
start-dfs.sh
hadoop启不来就用root启
8,启动yarn
start-yarn.sh
9, 同步master数据
scp -r /opt/local/src/hadoop/tmp/hdfs/nn/* slave1:/opt/local/src/hadoop/tmp/hdfs/nn/
scp -r /opt/local/src/hadoop/tmp/hdfs/nn/* slave2:/opt/local/src/hadoop/tmp/hdfs/nn/
10,启动resourcemanager和namenode
slave1节点
yarn-daemon.sh start resourcemanager
hadoop-daemon.sh start namenode
11,启动 MapReduce
master节点
yarn-daemon.sh start proxyserver
mr-jobhistory-daemon.sh start historyserver
12,查看进程
汉化多执行
jps
13,页面访问
打开浏览器
192.168.100.10:50070
192.168.100.20:50070
master:
slave1: