1-部署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

    • 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阶段产生的结果

image-20200906124607901

停止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

image-20200906122811944

重装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

image-20200906130736252

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

image-20200906210105902

查看各主节点的状态
# 检查服务
  ## 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界面

image-20200907090836012

  • Yarn Web界面

image-20200907090725218

  • MapReduce历史服务器web界面

image-20200907091003695

posted @ 2020-09-07 16:53  KuBee  阅读(522)  评论(0编辑  收藏  举报