部署Hadoop环境
前期准备
发行版本
Apache Hadoop(社区版Hadoop)
- Cloudera Hadoop(商业版)
- CDH是Cloudera的hadoop发行版,完全开源,比Apache hadoop在兼容性,安全性,稳定性上有增强。
- Cloudera Manager是集群的软件分发及管理监控平台,可以在几个小时内部署 好一个Hadoop集群,并对集群的节点及服务进行实时监控。
- Cloudera Support 即是对Hadoop的技术支持。
- Hortonworks Hadoop(商业版)
- Hortonworks Data Platform (HDP):100%开源的产品,包括稳定版本的Apache Hadoop的所有关键组件;安装方便,HDP包括一个现代化的,直观的用户界面的安装和配置工具。
- mapR有免费和商业两个版本
- fusionInsight hadoop (华为大数据平台hadoop)
- 华为的hadoop版本基于自研的Hadoop HA平台,构建NameNode、JobTracker、HiveServer的HA功能,进程故障后系统自动Failover,无需人工干预,这个也是对hadoop的小修补,远不如mapR解决的彻底。
- DKhadoop发行版
- 有效的集成了整个HADOOP生态系统的全部组件,并深度优化,重新编译为一个完整的更高性能的大数据通用计算平台,实现了各部件的有机协调。因此DKH相比开源的大数据平台,在计算性能上有了高达5倍(最大)的性能提升。
- DKhadoop将复杂的大数据集群配置简化至三种节点(主节点、管理节点、计算节点),极大的简化了集群的管理运维,增强了集群的高可用性、高可维护性、高稳定性。
配置hosts文件
cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.10.190 pg1
192.168.10.191 pg2
192.168.10.192 pg3
关闭防火墙
systemctl status firewalld.service
systemctl stop firewalld
systemctl disable firewalld
# 查看防火墙状态
firewall-cmd --state
创建用户
groupadd -g 2000 hadoop
useradd -u 2000 -g 2000 -c "Hadoop Cluster" hadoop
echo "hadoop"|passwd hadoop --stdin
配置sudo权限
依赖软件
安装配置JDK环境
https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html#license-lightbox
https://download.oracle.com/otn/java/jdk/8u202-b08/1961070e4c9b4e26a04e7f5a083f551e/jdk-8u202-linux-x64.tar.gz?AuthParam=1599271400_d95815df490009af8aebe19f5620bfc2
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn/java/jdk/8u202-b08/1961070e4c9b4e26a04e7f5a083f551e/jdk-8u202-linux-x64.tar.gz
JAVA_HOME='/ups/app/jdk1.8.0'
tar -xf jdk-8u202-linux-x64.tar.gz --no-same-owner
mv jdk1.8.0_202 ${JAVA_HOME}
cat > /etc/profile.d/jdk.sh <<-EOF
export JAVA_HOME=${JAVA_HOME}
export JRE_HOME=\${JAVA_HOME}/jre
export CLASSPATH=.:\${JAVA_HOME}/lib:\${JRE_HOME}/lib
export PATH=\${JAVA_HOME}/bin:\${PATH}
EOF
- ssh(便于Hadoop 脚本管理远端Hadoop守护进程)
软件下载地址
http://archive.apache.org/dist/hadoop/
http://archive.apache.org/dist/hadoop/core/hadoop-3.3.0/hadoop-3.3.0.tar.gz
wget https://mirrors.bfsu.edu.cn/apache/hadoop/common/hadoop-2.10.0/hadoop-2.10.0.tar.gz
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz
CDH软件下载地址
# Parcel:
https://archive.cloudera.com/cdh6/6.3.2/parcels/
wget https://archive.cloudera.com/cdh6/6.3.2/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel
wget https://archive.cloudera.com/cdh6/6.3.2/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha256
wget https://archive.cloudera.com/cdh6/6.3.2/parcels/manifest.json
https://archive.cloudera.com/cdh5/parcels/latest/CDH-5.16.2-1.cdh5.16.2.p0.8-el7.parcel
https://archive.cloudera.com/cdh5/parcels/latest/CDH-5.16.2-1.cdh5.16.2.p0.8-el7.parcel.sha1
https://archive.cloudera.com/cdh5/parcels/latest/manifest.json
https://archive.cloudera.com/cdh5/repo-as-tarball/5.16.2/cdh5.16.2-centos7.tar.gz
https://archive.cloudera.com/cdh5/repo-as-tarball/5.16.2/cdh5.16.2-centos7.tar.gz.sha1
# CM:
wget http://archive.cloudera.com/cm5/installer/5.16.2/cloudera-manager-installer.bin
$ wget https://archive.cloudera.com/cm6/6.3.0/cloudera-manager-installer.bin
$ chmod u+x cloudera-manager-installer.bin
$ sudo ./cloudera-manager-installer.bin
配置SSH互信(分布式模式)
su - hadoop
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
# 验证
ssh pg1 date; ssh pg2 date; ssh pg3 date
时间同步(分布式模式)
运行方式
区分依据是NameNode, DataNode, ResourceManager, NodeManager等模块运行在几个JVM进程、几个机器
- 单机模式
- 伪分布式模式
- 完全分布式模式
模式名称 | 各模块占用JVM进程数 | 各模块运行在几个机器上 |
本地模式 | 1 | 1 |
伪分布式 | N | 1 |
完全分布式 | N | N |
HA完全分布式 | N | N |
Hadoop安装配置
解压软件
su - hadoop
cd /ups/soft
tar -xf hadoop-2.10.0.tar.gz -C /ups/app/hadoop --no-same-owner
# chown -R hadoop:hadoop hadoop-2.10.0
配置Hadoop环境
cat >/etc/profile.d/hadoop.sh <<-EOF
export HADOOP_HOME=/ups/app/hadoop/hadoop-2.10.0
export PATH=\$PATH:\$HADOOP_HOME/bin:\$HADOOP_HOME/sbin
export HADOOP_CONF_DIR=\$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=\$HADOOP_HOME/etc/hadoop
EOF
单机模式
所有模块都运行在一个JVM进程中,使用本地文件系统而不是HDFS。
配置
官方Grep案例
# 1. 创建目录
cd $HDOOP_HOME
mkdir input
# 2.
cp etc/hadoop/*.xml input
# 3. 运行hadoop服务
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.0.jar grep input output 'dfs[a-z.]+'
# 4. 查看结果
cat output/*
官方WordCount案例
# 1. 创建wcinput目录
cd $HDOOP_HOME
mkdir wcinput
# 2. 编辑MapReduce输入文件wc.input
cat > wcinput/wc.input <<-EOF
hadoop yarn
hadoop mapreduce
hadooper
hadooper
EOF
# 3. 执行程序
cd $HDOOP_HOME
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.0.jar wordcount wcinput wcoutput
# 查看结果
cat wcoutput/part*
伪分布式模式(用于学习环境)
创建HDFS目录
mkdir -p $HDOOP_HOME/dfs/{name,date,tmp}
配置文件
配置core-site.xml文件
vi $HDOOP_HOME/etc/hadoop/core-site.xml
<!-- 指定HDFS中NameNode 的地址 -->
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<!-- 指定HDFS运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>$HDOOP_HOME/dfs/tmp</value>
</property>
</configuration>
配置hdfs-site.xml文件
vi $HDOOP_HOME/etc/hadoop/hdfs-site.xml
<configuration>
<!-- 指定HDFS 副本数量 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
伪分布环境只有1个节点,因此,这里设置副本数量为1
格式化HDFS和启动HDFS
格式化NameNode(首次运行)
bin/hdfs namenode -format
# 查看NameNode格式化后的目录
ls -l ${HADOOP_HOME}/dfs/tmp
启动NameNode
${HADOOP_HOME}/sbin/hadoop-daemon.sh start namenode
启动DataNode
${HADOOP_HOME}/sbin/hadoop-daemon.sh start datanode
启动secondaryNameNode
${HADOOP_HOME}/sbin/hadoop-daemon.sh start secondarynamenode
查看集群状态
jps命令查看
jps
web中查看
http://localhost:50070/
HDFS上测试创建目录、上传、下载文件
创建dfs路径
${HADOOP_HOME}/bin/hdfs dfs -mkdir /demo1
${HADOOP_HOME}/bin/hdfs dfs -mkdir -p /demo1/<username>
上传本地文件到HDFS
${HADOOP_HOME}/bin/hdfs dfs -put ${HADOOP_HOME}/etc/hadoop/core-site.xml /demo1
读取HDFS上的文件内容
${HADOOP_HOME}/bin/hdfs dfs -cat /demo1/core-site.xml
从HDFS下载文件到本地
cd /tmp
${HADOOP_HOME}/bin/hdfs dfs -get /demo1/core-site.xml
配置和启动YARN
配置文件mapred-site.xml
指定mapreduce运行在yarn框架上
cp ${HADOOP_HOME}/etc/hadoop/mapred-site.xml.template ${HADOOP_HOME}/etc/hadoop/mapred-site.xml
vi ${HADOOP_HOME}/etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
配置文件yarn-site.xml
etc/hadoop/yarn-site.xml
<configuration>
<property>
<!-- 配置yarn的默认混洗方式 -->
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
启动服务
# 资源管理器(ResourceManager)
${HADOOP_HOME}/sbin/yarn-daemon.sh start resourcemanager
# 启动nodemanager
${HADOOP_HOME}/sbin/yarn-daemon.sh start nodemanager
查看服务状态
jps
# yarn的web的端口号为8088
http://localhost:8088/
运行MapReduce Job
# 创建测试Input文件,创建输入目录
${HADOOP_HOME}/bin/hdfs dfs -mkdir -p wcinput/input
# 将wc.input文件上传到HDFS的wcinput/input目录中
${HADOOP_HOME}/bin/hdfs dfs -put ${HADOOP_HOME}/wcinput/wc.input wcinput/input
# 运行mapreduce job
${HADOOP_HOME}/bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.0.jar wordcount wcinput/input wcinput/output
# 查看输出目录
${HADOOP_HOME}/bin/hdfs dfs -ls wcinput/output
# 查看结果文件内容
${HADOOP_HOME}/bin/hdfs dfs -cat wcinput/output/part-r-00000
- 运行mapreduce时,可以没有reduce阶段,但肯定有map阶段
- output目录有2个文件
- _SUCCESS文件是空文件,表明job执行成功
- part-r-00000文件是结果文件
- -r-: 说明是reduce阶段产生的结果
- -m-: 说明是map阶段产生的结果
停止Hadoop服务
${HADOOP_HOME}/sbin/hadoop-daemon.sh stop namenode
${HADOOP_HOME}/sbin/hadoop-daemon.sh stop datanode
${HADOOP_HOME}/sbin/hadoop-daemon.sh stop secondarynamenode
${HADOOP_HOME}/sbin/yarn-daemon.sh stop resourcemanager
${HADOOP_HOME}/sbin/yarn-daemon.sh stop nodemanager
开启历史服务
sbin/mr-jobhistory-daemon.sh start historyserver
# 查看
http://192.168.10.190:19888
开启日志聚集
日志聚集
MapReduce在各个机器上运行,运行过程产生的日志存在与各自的机器上,为了能够统一查看各个机器上的运行日志,将日志集中存放在HDFS上,这个过程称为日志聚集。
开启日志聚集
vi yarn-site.xml
<property>
<!-- 是否启用日志聚集 -->
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<!-- 设置日志保留时间,单位:秒 -->
<name>yarn.log-aggregation.retain-seconds</name>
<value>106800</value>
</property>
完全分布式模式(生产环境)
集群里的一台机器被指定为 NameNode,另一台不同的机器被指定为JobTracker。这些机器是masters。余下的机器即作为DataNode也作为TaskTracker。这些机器是slaves
Hadoop配置
先在一台机器上配置后再分发到其它机器
规划结构
模块\主机名 | pg1(192.168.10.190) | pg2(192.168.10.191) | pg3(192.168.10.192) |
HDFS | datanode | datanode | datanode |
HDFS | namenode | secondaryNameNode | |
YARN | nodemanager | nodemanger | nodemanger |
YARN | resourcemanager | ||
histroy | HistroryServer | ||
解压文件
su - hadoop
cd /ups/soft
tar -xf hadoop-2.10.0.tar.gz -C /ups/app/hadoop --no-same-owner
配置HDFS存储目录
cd /ups/app/hadoop
# 分别存储 namenode文件|数据|临时文件
mkdir -p data/{name,tmp}
修改配置文件
配置文件目录:${HADOOP_HOME}/etc/hadoop
core-site.xml
vi ${HADOOP_HOME}/etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop01:9000</value>
</property>
<!-- 指定hadoop运行时产生临时文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/ups/app/hadoop/data/tmp</value>
</property>
</configuration>
hdfs-site.xml
指定namenode和datanode存放数据的位置
<configuration>
<!--
这两个配置用于指定namenode和datanode存放数据的位置
如果不指定,数据会存放到core-site.xml中配hadoop.tmp.dir目录下
-->
<property>
<name>dfs.namenode.name.dir</name>
<value>/ups/app/hadoop/data/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/ups/app/hadoop/data</value>
</property>
<!--配置数据副本数,不要超过datanode节点数-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--指定secondarynamenode所在节点-->
<property>
<name>dfs.secondary.http.address</name>
<value>pg3:50090</value>
</property>
</configuration>
mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
vi mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
修改slaves
指定HDFS上datanode节点
cat > slaves <<-EOF
pg1
pg2
pg3
EOF
修改yarn-site.xml
<configuration>
<!-- reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop02</value>
</property>
</configuration>
分发hadoop到节点
su - hadoop
cd /ups/app/hadoop
scp -r hadoop-2.10.0 pg2:$(pwd)
scp -r hadoop-2.10.0 pg3:$(pwd)
格式化hdfs
只有首次部署执行【谨慎操作】
在namenode机器(即pg1)上,进行格式化,并启动
# 格式化
hdfs namenode -format
启动集群
# 在namenode主节点(pg1)上启动hdfs系统
start-dfs.sh
# resourcemanager所在节点(pg2)上启动yarn
start-yarn.sh
# 在pg2上启动resourcemanager
yarn-daemon.sh start resourcemanager
# 启动
hadoop-daemon.sh start namenode
# 启动所有datanode
hadoop-daemons.sh start datanode
# 在pg3上启动secondarynamenode
hadoop-daemon.sh start secondarynamenode
查看web页面
# HDFS
http://192.168.10.190:50070
# yarn
http://192.168.10.191:8088/cluster
重装Hadoop集群步骤
- 删除每个机器中的hadoop日志
- 日志默认在HADOOP_HOME/logs
- 删除原来的namenode和datanode产生的数据和文件
- 删除配置的
hadoop.tmp.dir
|dfs.datanode.data.dir
|dfs.datanode.name.dir
- 重新修改hadoop配置文件
Hadoop HA模式
规划结构
模块\主机名 | pg1(192.168.10.190) | pg2(192.168.10.191) | pg3(192.168.10.192) |
HDFS | datanode | datanode | |
HDFS | namenode | namenode | |
YARN | nodemanger | nodemanger | |
YARN | resourcemanager | resourcemanager | |
histroy | HistroryServer | ||
ZKFC | ZKFC | ||
journalnode | journalnode | journalnode | |
zookeeper | zookeeper | zookeeper |
配置zookeeper
su - hadoop
tar -xf apache-zookeeper-3.6.0-bin.tar.gz -C /ups/app/ --no-same-owner
mv apache-zookeeper-3.6.0-bin zookeeper
mkdir -p /ups/app/zookeeper/data
echo 1 > /ups/app/zookeeper/data/myid
配置环境变量
cat > /etc/profile.d/zoo.sh <<-EOF
export ZOOK_HOME=/ups/app/zookeeper
export PATH=\${PATH}:\${ZOOK_HOME}/bin
EOF
scp /etc/profile.d/zoo.sh pg2:/etc/profile.d/zoo.sh
scp /etc/profile.d/zoo.sh pg3:/etc/profile.d/zoo.sh
编辑配置文件
cd /ups/app/zookeeper
cp conf/zoo_sample.cfg conf/zoo.cfg
vi /ups/app/zookeeper/conf/zoo.cfg
dataDir=/ups/app/zookeeper/data
server.1=192.168.10.190:2888:3888
server.2=192.168.10.191:2888:3888
server.3=192.168.10.192:2888:3888
分发到其它节点
scp -r /ups/app/zookeeper pg2:/ups/app/zookeeper
scp -r /ups/app/zookeeper pg3:/ups/app/zookeeper
echo 2 > /ups/app/zookeeper/data/myid
echo 3 > /ups/app/zookeeper/data/myid
#
for i in 2 3; do
echo "scp -r /ups/app/zookeeper pg$i:/ups/app/zookeeper"
echo "ssh pg$i -c \"echo $i > /ups/app/zookeeper/data/myid\""
done
启动服务
zkServer.sh start
# 查看状态看
zkServer.sh status
hadoop配置
配置文件目录:${HADOOP_HOME}/etc/hadoop
core-site.xml
vi ${HADOOP_HOME}/etc/hadoop/core-site.xml
<configuration>
<!-- 把两个NameNode的地址组装成一个集群hacluster -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hacluster/</value>
</property>
<!-- 指定hadoop运行时产生临时文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/ups/app/hadoop/data/tmp</value>
</property>
<!-- 指定ZKFC故障自动切换转移 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>pg1:2181,pg2:2181,pg3:2181</value>
</property>
<!-- hadoop链接zookeeper的超时时长设置 -->
<property>
<name>ha.zookeeper.session-timeout.ms</name>
<value>1000</value>
<description>ms</description>
</property>
</configuration>
hdfs-site.xml
<configuration>
<!-- 设置dfs副本数,默认3个 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- 配置namenode和datanode的工作目录-数据存储目录 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>/ups/app/hadoop/data/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/ups/app/hadoop/data</value>
</property>
<!-- 启用webhdfs -->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<!-- 完全分布式集群名称 -->
<property>
<name>dfs.nameservices</name>
<!-- 与上面fs.defaultFS的值要对应 -->
<value>hacluster</value>
</property>
<!-- 关闭权限检查-->
<property>
<name>dfs.permissions.enable</name>
<value>false</value>
</property>
<!-- 集群中NameNode节点都有哪些,逻辑名称,相互不重复即可 -->
<property>
<name>dfs.ha.namenodes.hacluster</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.hacluster.nn1</name>
<value>pg1:9000</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.hacluster.nn2</name>
<value>pg2:9000</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.hacluster.nn1</name>
<value>pg1:50070</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.hacluster.nn2</name>
<value>pg2:50070</value>
</property>
<!-- 指定NameNode元数据在JournalNode上的存放位置(通常和zookeeper部署在一起) -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://pg1:8485;pg2:8485;pg3:8485/hacluster</value>
</property>
<!-- 声明journalnode服务器本地存储目录-->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/ups/app/hadoop/data/jn</value>
</property>
<!-- 访问代理类:client,hacluster,active配置失败自动切换实现方式-->
<property>
<name>dfs.client.failover.proxy.provider.hacluster</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.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 使用sshfence隔离机制时需要ssh无秘钥登录 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</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>
</configuration>
修改slaves
指定HDFS上的datanode和NodeManager节点
cat > slaves <<-EOF
pg1
pg2
pg3
EOF
mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
vi mapred-site.xml
<configuration>
<!-- 指定mr框架为yarn方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 指定mr历史服务器主机,端口 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>pg1:10020</value>
</property>
<!-- 指定mr历史服务器WebUI主机,端口 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>pg1:19888</value>
</property>
<!-- 历史服务器的WEB UI上最多显示20000个历史的作业记录信息 -->
<property>
<name>mapreduce.jobhistory.joblist.cache.size</name>
<value>20000</value>
</property>
<!--配置作业运行日志 -->
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>${yarn.app.mapreduce.am.staging-dir}/history/done</value>
</property>
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate</value>
</property>
<property>
<name>yarn.app.mapreduce.am.staging-dir</name>
<value>/tmp/hadoop-yarn/staging</value>
</property>
</configuration>
修改yarn-site.xml
<configuration>
<!-- reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--启用resourcemanager ha-->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!--声明两台resourcemanager的地址-->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>rmCluster</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>pg1</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>pg2</value>
</property>
<!--指定zookeeper集群的地址-->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>pg1:2181,pg2:2181,pg3:2181</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>
<!-- 日志聚集 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</value>
</property>
</configuration>
启动集群
# 1. 启动zookeeper
zkServer.sh start
zkServer.sh status
jps
# 2. 启动journalnode服务
hadoop-daemon.sh start journalnode
# 3. 格式化主namenode
hdfs namenode -format
# 4. 启动主namenode
hadoop-daemon.sh start namenode
# 5. 同步主namenode信息到备namenode上(在备namenode上执行)
hdfs namenode -bootstrapStandby
# OR
cd /ups/app/hdoop && scp -r data pg2:$(pwd)
# 6. 只在主NameNode上格式化zkfc,创建znode节点
hdfs zkfc -formatZK
# 7. 停掉主namenode和所有的journalnode进程
hadoop-daemon.sh stop namenode
hadoop-daemon.sh stop journalnode
# 8. 启动HDFS
start-dfs.sh
# 9. 启动yarn集群
# 9.1 在主备 resourcemanager 中随便选择一台进行启动yarn
start-yarn.sh
# 9.2 若备用节点的 resourcemanager 没有启动起来,则手动启动起来
yarn-daemon.sh start resourcemanager
# 10. 启动 mapreduce 任务历史服务器
mr-jobhistory-daemon.sh start historyserver
查看各主节点的状态
# 检查服务
## web 界面
# HDFS
http://192.168.10.190:50070
http://192.168.10.191:50070
# yarn
http://192.168.10.190:8088/cluster
http://192.168.10.191:8088/cluster # standby节点会自动跳到avtive节点
## 命令工具
# HDFS
hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2
# yarn
yarn rmadmin -getServiceState rm1
yarn rmadmin -getServiceState rm2
jps
- HDFS Web界面
- Yarn Web界面
- MapReduce历史服务器web界面