Hadoop分布式搭建
一、配置文件说明
1、所有配置文件
文件名 | 格式 | 描述 |
---|---|---|
hadoop-env.sh | Bash脚本 | 脚本中要用到的环境变量,以运行Hadoop |
mapred-env.sh | Bash脚本 | 脚本中要用到的环境变量,以运行MapReduce(覆盖hadoop-env.sh中设置的变量) |
yarn-env.sh | Bash脚本 | 脚本中要用到的环境变量,以运行YARN(覆盖hadoop-env.sh中设置的变量) |
core-site.xml | Hadoop配置XML | Hadoop Core的配置项,例如HDFS、MapReduce和YARN常用的I/O设置等 |
hdfs-site.xml | Hadoop配置XML | Hadoop守护进程的HDFS配置项,包括namenode、辅助namenode和datanode等 |
mapred-site.xml | Hadoop配置XML | MapReduce守护进程的mapreduce配置项,包括作业历史服务器 |
yarn-site.xml | Hadoop配置XML | YARN守护进程的yarn配置项,包括resourcemanager、web应用代理服务器和nodemanager |
slaves | 纯文本 | 运行datanode和节点管理器的机器列表(每行一个) |
hadoop-metrics2.properties | Java属性 | 控制如何在Hadoop上发布度量的属性 |
mapred-env.sh | Java属性 | 系统日志文件、namenode审计日志、任务JVM进程的任务日志的属性 |
hadoop-policy.xml | Hadoop配置XML | 安全模式下运行Hadoop时的访问控制列表的配置项 |
2、环境变量配置文件:hadoop-env.sh、mapred-env.sh、yarn-env.sh
属性 | 意义 |
---|---|
JAVA_HOME | 需要设置Hadoop系统的Java安装的位置。方法一是在hadoop-env.sh文件中设置JAVA_HOME项;方法二是在shell中设置JAVA_HOME环境变量。相比之下,方法一更好,因为只需操作一次就能够保证整个集群使用同一版本的Java。 |
HADOOP_HEAPSIZE | 为各个守护进程分配的内存,单位为MB,如果不设置默认值是1000。 |
HADOOP_LOG_DIR | 系统日志文件存放目录,默认在$HADOOP_HOME/logs。建议修改默认设置,使之独立于Hadoop的安装目录,这样即使Hadoop升级之后安装路径发生变化,也不会影响日志文件的位置。 |
HADOOP_SSH_OPTS | 设置SSH选项。 |
此处参考引用:Hadoop配置文件详解
二、搭建前准备
1、配置hadoop环境变量,此处略。
2、hadoop.x支持的Java版本,需进行安装指定版本java。
hadoop版本 | 支持的java版本 |
---|---|
Apache Hadoop 3.x | java8 |
Apache Hadoop 2.7.x–2.x | java7 & java8 |
3、配置环境变量文件,设置java路径。
$vim hadoop-env.sh、mapred-env.sh、yarn-env.sh
export JAVA_HOME=java_path
4、克隆虚拟机及配置静态ip(hadoop101,hadoop102,hadoop103)
(1)、克隆操作
右键指定虚拟机-管理-克隆-克隆完整虚拟机-设置路径。
(2)、重置每一台克隆的mac地址
//编辑虚拟机配置-网络适配器-NET模式,高级-mac地址,重新生成mac地址
$sudo vim /etc/rc.d/rc.local //编辑设置mac地址
ifconfig <ifname> down
ifonfig <ifname> hw ether <mac address>
ifconfig <ifname> up
设置开机时自动运行该配置,修改当前mac地址
(3)关闭防火墙,设置静态ip
//关闭防火墙
$sudo systemctl stop firewalld
//设置静态ip(利用nmcli或者直接编辑/etc/sysconfig/netwwork-scripts/ifcfg-name)
//需要查看虚拟机网关和子域:编辑--编辑网络虚拟器
$sudo nmcli connection modify <ifname> ipv4.address address/prefix ipv4.dns address ipv4.gateway address #编辑ip
$sudo vim /etc/sysconfig/netwwork-scripts/ifcfg-name #设置PROTOCOL=static,在ifcfg中编辑
$sudo systemctl stop NetworkManager.service
$sudo systemctl restart network.service
$sudo systemctl start NetworkManager.service #重启网络,如若没有network.service,可直接reboot重启
5、配置主机名并连接到ip
$sudo nmcli general hostname <hostname>
$sudo vim /etc/sysconfig/network
#加入
NETWORKING=yes
HOSTNAME=<hostname>
$sudo vim /etc/hosts
#加入要添加的地址及主机名
address1 hadoop101
address2 hadoop102
address3 hadoop103
6、配置ssh
$yum install -y sshd ssh #安装ssh服务
$sudo ssh-keygen -r -rsa #产生密钥,直接全部按enter键,如有特殊配置,请进行相关配置
$sudo ssh-copy-id user@address #将公钥传输给指定的用户及用户地址,此时需要目标用户密码
$sudo ssh user@address #连接指定的主机
//本地主机自身也要进行copy-id
7、配置时间同步chronyd,均在局域网192.168.214.x下
(1)、服务器主机
$vim /etc/chrony.conf
server 127.0.0.1 iburst //此处pool修改为这个,表示同步源
#allow 192.168.0.0/16
allow all //允许哪些或者哪些区域端主机连接
makestep 1.0 3 //如果偏差超过1s,则进行修改同步
local stratum 10 //即便没有同步时间源,根据服务器进行同步
(2)、其他主机
$vim /etc/chrony.conf
server 192.168.214.101 iburst //此处pool修改为这个,表示同步源,此处,根据自己情况设定的服务器主机的ip地址修改
#allow 192.168.0.0/16
allow all //允许哪些或者哪些区域端主机连接
makestep 1.0 3 //如果偏差超过1s,则进行修改同步
local stratum 10 //即便没有同步时间源,根据服务器进行同步
//命令行查看
$sudo timedatectl -a //查看同步状况
$sudo timedatectl set-timezone Asia/Shanghai //设置时区
$sudo systemctl restart chronyd //重置同步服务
$sudo chronyc source -v //显示同步源 ,^*表示正常同步,+表示当前的同步源
8、编写文件同步脚本
#! bin/bash
num=$#
if(($num==0));then
echo no args;
exit;
fi
p1=$1
path=`cd -P $(dirname $p1);pwd`
name="root"
for((host=102;host<=103;host++));
do
echo -------------------copy hadoop$host-----------------------;
rsync(scp) -rvf $p1 $name@hadoop$host:$path; #此处要么选同步rsync,要么复制,可创建两个文件
done
echo -----------------------finished------------------------
三、各种分布式模式配置文件设置(先规划后配置,以hadoop101作为服务器主机,hadoop102,hadoop103)
【本地模式、伪分布式、完全分布式】基本配置
配置文件 | 属性 | 本地模式 | 伪分布式 | 完全分布式(单点) |
---|---|---|---|---|
core-site.xml | fs.defaultFs hadoop.tmp.dir | file:/// hadoop-path/data/tmp | hdfs://localhost/ hadoop-path/data/tmp | hdfs://namenode:9000 hadoop-path/data/tmp |
hdfs-site.xml | dfs.replication dfs.namenode.secondary.http-address dfs.namenode.name.dir dfs.datanode.data.dir | N/A N/A file:/namenode-path file:/datanode-path | 1 secondary_host:50090 file:/namenode-path file:/datanode-path | 3 secondary_host:50090 file:/namenode-path file:/datanode-path |
mapred-site.xml | mapreduce.framework.name mapreduce.jobhistory.address mapreduce.jobhistory.webapp.address | local N/A N/A | yarn jobhistoty_host:10020 jobhistory_host:19888 | yarn jobhistoty_host:10020 jobhistory_host:19888 |
yarn-site.xml | yarn.resourcemanager.hostname yarn.nodemanager.auxservice yarn.log-aggregation-enable yarn.log-aggregation.retain-seconds | N/A N/A N/A N/A | localhost mapreduce_shuffle true 604800(可任意设定/s) | resourcemanager mapreduce_shuffle true 604800(可任意设定/s) |
【web端查看汇总】
Daemon | web-interface | port |
---|---|---|
Namenode | http://namnode:port/ | port:50070 |
Resourcemanager | http://resourcemanager:port | port:8088 |
MapReduce JobHistory Server | http://jobhistory_host:port/ | port:19888 |
此处引自Hadoop配置文件参数详解
1、单机模式
根据以上简易配置。此时filesystem位于本地文件系统。
【部署规划xml】
Host name | Name Node | Data Node | Secondary Namenode | Resource Manager | Node Manager | Journal Node | ZKFC | Zookeeper | History Service |
---|---|---|---|---|---|---|---|---|---|
hadoop100 | local | local |
【使用wordcount案例】
#创建了input文件夹,放入要分析的文件,未创建output文件夹
$hadoop jar hadoop-path/share/hadoop/mapreduce/hadoop-mapreduce-examples-xxx.jar wordcount input output
$cat output/part-r-00000 //查看输出内容
2、伪分布式
【部署规划xml】
Host name | Name Node | Data Node | Secondary Namenode | Resource Manager | Node Manager | Journal Node | ZKFC | Zookeeper | History Service |
---|---|---|---|---|---|---|---|---|---|
hadoop101 | ✔ | ✔ |
【格式化&启动】
同完全分布式(单点)
3、完全分布式(单点)
【部署规划xml】
Host name | Name Node | Data Node | Secondary Namenode | Resource Manager | Node Manager | Journal Node | ZKFC | Zookeeper | History Service |
---|---|---|---|---|---|---|---|---|---|
hadoop101 | ✔ | ✔ | ✔ | ✔ | ✔ | ||||
hadoop102 | ✔ | ✔ | ✔ | ||||||
hadoop103 | ✔ | ✔ |
【节点配置,自动配置DataNode、NodeManager】
$vim slaves //此处针对hadoop2.x
$vim workers //此处针对hadoop3.x
#默认已经存在文件,若存在其一,只需要修改其中一个即可,否则datanode,nodemanager不启动
#增加如下内容,默认只存在localhost,否则搭建会报localhost:ssh:connection to port 22 refused.
hadoop101
hadoop102
hadoop103
【伪分布模式以及完全分布式(单点)集群初始化与启动】
[初始化集群操作]
$bin/hdfs namenode -format #要在每个Namenode主机上均进行格式化,或者根据需求进行。
"""
不能一直格式化?
格式化Namenode,会长生新的集群id,导致Namenode和datanode的集群id不一致,
集群找不到以往数据。格式化NameNode时,一定要先删除data数据和log日志,
再格式化NameNode。
"""
//查看NameNode id 和DataNode id.
$cat hadoop-path/data/tmp/dfs/name/current/VERSION //查看NameNode id
$cat hadoop-path/data/tmp/dfs/data/current/VERSION //查看DataNode id
[启动/关闭集群]
"""
各个服务组件逐一启动/关闭
"""
$sbin/hadoop-daemon.sh start/stop namenode/datanode/secondarynamenode //启动或关闭HDFS组件
$sbin/yarn-daemon.sh start/stop resourcemanager/nodemanager //启动或关闭YARN组件
$sbin/mr-jobhistory-daemon.sh start/stop historyserver //启动日志聚集、历史服务器功能(要在配置的主机上启动停止)
"""
各个模块分开启动/关闭(ssh配置前提)
"""
$sbin/start-dfs.sh / stop-dfs.sh //整体启动HDFS
$sbin/start-yarn.sh / stop-dfs.sh //整体启动YARN
$sbin/mr-jobhistory-daemon.sh start/stop historyserver //启动日志聚集、历史服务器功能(要在配置的主机上启动停止)
"""
整体启动
"""
$sbin/start-all.sh / stop-all.sh //整体启动、关闭
$sbin/mr-jobhistory-daemon.sh start/stop historyserver //启动日志聚集、历史服务器功能(要在配置的主机上启动停止)
4、完全分布式(HA)
HA:High Available(高可用模式)
【部署规划】
Host name | Name Node | Data Node | Secondary Namenode | Resource Manager | Node Manager | Journal Node | ZKFC | Zookeeper | History Service |
---|---|---|---|---|---|---|---|---|---|
hadoop101 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ||
hadoop102 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ||
hadoop103 | ✔ | ✔ | ✔ | ✔ | ✔ |
【Zookeeper集群部署】
[下载]:
官网首页: https://zookeeper.apache.org/
镜像下载地址: http://mirror.bit.edu.cn/apache/zookeeper/
[部署规划]:
hostname | Zookeeper | JDK |
---|---|---|
hadoop101 | ✔ | ✔ |
hadoop102 | ✔ | ✔ |
hadoop103 | ✔ | ✔ |
[安装]:
$tar -zxvf zookeeper-x.xx.xx.tar.gz -C <path> //解压到指定目录path下
$mkdir -P <path>/Data //载path内创建Data目录
$mv <path>/conf/zoo_sample.cfg <path>/conf/zoo.cfg //重命名配置文件
$vim /etc/profile //配置环境变量,将bin放入环境变量中
[集群配置]
$vim <path>/conf/zoo.cfg //修改zoo.cfg配置文件
#dataDir=/opt/module/zookeeper-3.4.12/Data
#dataLogDir=/opt/module/zookeeper-3.4.12/logs //修改DateDir,添加日志存放目录
#末尾增加
#server.1=hadoop101:2888:3888
#server.2=hadoop102:2888:3888
#server.3=hadoop103:2888:3888
$touch <path>/Data/myid
#此处分发配置/etc/profile、<path>给各个节点
$echo i > <path>/Data/myid //在各个主机上根据编号输入i进入myid
$zkServer.sh start/stop //分别在各个主机上启动或停止集群
$zkServer.sh status //分别在各个主机上查看集群状态
A是一个数字,表示这个是第几号服务器;
B是这个服务器的ip地址;
C是这个服务器与集群中的Leader服务器交换信息的端口;
D是万一集群中的Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口。集群模式下配置一个文件myid,这个文件在dataDir目录下,这个文件里面有一个数据就是A的值,Zookeeper启动时读取此文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断到底是哪个server。
1)tickTime=2000:通信心跳数tickTime:通信心跳数,Zookeeper服务器心跳时间,单位毫秒Zookeeper使用的基本时间,服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳,时间单位为毫秒。它用于心跳机制,并且设置最小的session超时时间为两倍心跳时间。(session的最小超时时间是2*tickTime)
2)initLimit=10:LF初始通信时限集群中的follower跟随者服务器(F)与leader领导者服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量),用它来限定集群中的Zookeeper服务器连接到Leader的时限。投票选举新leader的初始化时间Follower在启动过程中,会从Leader同步所有最新数据,然后确定自己能够对外服务的起始状态。Leader允许F在initLimit时间内完成这个工作。
3)syncLimit=5:LF同步通信时限集群中Leader与Follower之间的最大响应时间单位,假如响应超过syncLimit * tickTime,Leader认为Follwer死掉,从服务器列表中删除Follwer。在运行过程中,Leader负责与ZK集群中所有机器进行通信,例如通过一些心跳检测机制,来检测机器的存活状态。如果L发出心跳包在syncLimit之后,还没有从F那收到响应,那么就认为这个F已经不在线了。
4)dataDir:数据文件目录+数据持久化路径保存内存数据库快照信息的位置,如果没有其他说明,更新的事务日志也保存到数据库。
5)clientPort=2181:客户端连接端口监听客户端连接的端口
[客户端使用]:
$zkCli.sh //启动客户端
$help //查看所有操作指令
$ls / //查看znode当前包含的内容
$ls2 / //查看当前节点数据并能看到更新次数等数据
$create <path> "aa" //创建普通节点
$get <path> //获得节点的值
$create -e /app 8888 //创建短暂节点,可利用重启,再次查看ls /
$create /app "app"
$create -s /app/aa 888 //创建普通的根节点app再创建序号节点aa,如果原节点下有1个同名同序号节点,则再排序时从1开始,以此类推
$set /opt 999 //修改节点数据
$get /opt watch //再hadoop102注册监听hadoop101的opt节点,对hadoop101的opt节点修改数据,可以进行监听到
$ls /opt watch //在hadoop101主机上注册监听/opt节点的子节点变化,增加子节点时,会有变化
$delete /opt/bb //删除节点
$rmr /opt //递归删除节点
$stat /app //查看节点状态
$quit //退出客户点
【环境配置】
$vim hadoop-env.sh //加入以下内容
export HDFS_DATANODE_USER=root
export HDFS_NAMENODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export HDFS_DATANODE_SECURE_USER=root
export HDFS_JOURNALNODE_USER=root
export HDFS_ZKFC_USER=root
export HADOOP_SHELL_EXECNAME=root #上述设置为srat-dfs.sh启动时报错
export HADOOP_SSH_OPTS="-p 22" #针对于ssh port 22 connected refused
#可能出现的问题 yum install -y openssh-server openssh-clients
export JSVC_HOME=/opt/module/hadoop-3.2.2/libexec/
"""
此处需要安装jsvc:hadoop3.x使用hadoop-daemon.sh启动datanode会报错。
源码:https://downloads.apache.org//commons/daemon/source/commons-daemon-1.2.4-src.tar.gz
进入src/native/unix/-->./configure-->make-->移动jsvc到libexec
安装包:http://downloads.apache.org/commons/daemon/binaries/commons-daemon-1.2.4-bin.tar.gz
进入share//hadoop/hdfs/libs/替换相应版本commons-daemon.xx.jar
"""
$vim yarn-env.sh
export YARN_RESOURCEMANAGER_USER=root
export HADOOP_SECURE_DN_USER=yarn
export YARN_NODEMANAGER_USER=root
【Hadoop-HA模式配置xml】
[HDFS-HA基本配置]
core-site.xml
属性 | 值 | 解释 |
---|---|---|
fs.defaultFs | http://mycluster | 将两个namenode组装成一个mycluster |
hadoop.tmp.dir | path/data/ha/tmp | 指定hadoop运行时产生文件的存储目录 |
ipc.client.connect.max.retries | 100 | 表示namenode连接journalnode次数,一般启动hdfs为2min左右,在namnode启动时会尝试连接journalnode,由于start-dfs.sh先启动Namnode,会发生准备连接结束再启动journalnode,导致Namenode启动后关闭 |
ipc.client.connect.retry.interval | 10000 | namenode连接的间隔,毫秒 |
hdfs-site.xml
属性 | 值 | 解释 |
---|---|---|
dfs.replication | 3 | hdfs副本数 |
dfs.nameservices | mycluster | 完全分布式集群名称 |
dfs.ha.namenodes.mycluster | nn1,nn2 | namenode节点有哪些 |
dfs.namenode.rpc-address. mycluster.nn1 | hadoop101:8020 | nn1-RPC通信地址 |
dfs.namenode.rpc-address. mycluster.nn2 | hadoop102:8020 | nn2-RPC通信地址 |
dfs.namenode.http-address. mycluster.nn1 | hadoop101:50070 | nn1-http通信地址 |
dfs.namenode.http-address. mycluster.nn2 | hadoop102:50070 | nn2-http通信地址 |
dfs.namenode.shared.edits.dir | qjournal://hadoop101:8485,hadoop 102:8485,hadoop103:8485/mycluster | Namenode元数据在JournalNode上的存放位置 |
dfs.ha.fencing.methods | sshfence shell(/bin/true) | 隔离机制,同一时刻只能有一台服务器对外响应,同时启动其中某一台宕机时检测并相应转换 |
dfs.ha.fencing.ssh.private-key-files | /home/usr(/root)/.ssh/id_rsa | 使用隔离机制时需要ssh无秘钥登录 |
dfs.journalnode.edits.dir | hadoop-path//data/ha/jn | 声明journalnode服务器存储目录 |
dfs.permissions.enable | false | 关闭权限检查 |
dfs.client.failover.proxy.provider.mycluster | org.apache.hadoop.hdfs.server.namenode.ha. ConfiguredFailoverProxyProvider | 访问代理类:client,mycluster,active配置失败自动切换实现方式 |
[设置故障自动转移]
core-site.xml
属性 | 值 | 解释 |
---|---|---|
ha.zookeeper.quorum | hadoop101:2181,hadoop102:2181,hadoop:2181 | 指定ZKFC故障自动切换转移 |
hdfs-site.xml
属性 | 值 | 解释 |
---|---|---|
dfs.ha.automatic-failover.enabled | true | 配置自动故障转移 |
[YARN-HA模式基本配置]
yarn-site.xml
属性 | 值 | 解释 |
---|---|---|
yarn.nodemanager.aux-services | mapreduce_shuffle | reducer获取数据的方式 |
yarn.resourcemanager.ha.enabled | true | 启用resourcemanager ha |
yarn.resourcemanager.cluster-id | rmCluster | 声明两台resourcemanager的地址 |
yarn.resourcemanager.ha.rm-ids | rm1,rm2 | |
yarn.resourcemanager.hostname.rm1 | hadoop102 | |
yarn.resourcemanager.hostname.rm2 | hadoop103 | |
yarn.resourcemanager.zk-address | hadoop101:2181, hadoop102:2181, hadoop103:2181 | 指定zookeeper集群的地址 |
yarn.resourcemanager.recovery.enabled | true | 启用自动恢复 |
yarn.resourcemanager.store.class | org.apache.hadoop.yarn.server. resourcemanager.recovery.ZKRMStateStore | 指定resourcemanager的状态信息存储在zookeeper集群 |
[mapred基本配置xml]
mapred-site.xml
属性 | 值 | 解释 |
---|---|---|
mapreduce.framework.name | yarn | 指定mr框架为yarn方式 |
mapreduce.jobhistory.address | hadoop101:10020 | 指定mr历史服务器主机,端口 |
mapreduce.jobhistory.webapp.address | hadoop101;19888 | 指定mr历史服务器WebUI主机,端口 |
mapreduce.jobhistory.joblist.cache.size | 20000 | 历史服务器的WEB UI上最多显示20000个历史的作业记录信息 |
mapreduce.jobhistory.done-dir | ${yarn.app.mapreduce.am.staging-dir}/history/done | 配置作业运行日志 |
mapreduce.jobhistory.intermediate-done-dir | ${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate | |
yarn.app.mapreduce.am.staging-dir | /tmp/hadoop-yarn/staging |
【节点配置】
$vim slaves //此处针对hadoop2.x
$vim workers //此处针对hadoop3.x
#默认已经存在文件,若存在其一,只需要修改其中一个即可,否则datanode,nodemanager不启动
#增加如下内容,默认只存在localhost,否则搭建会报localhost:ssh:connection to port 22 refused.
hadoop101
hadoop102
hadoop103
【Hadoop HA集群的初始化】
$zkServer.sh start //启动各台主机的zookeeper,启动zookeeper集群,一定关闭防火墙,查看启动状态
$hadoop-daemon.sh start journalnode //在各个journalnode节点上启动journalnode
$hdfs namenode -format //选取一台namenode节点上格式化Namenode(清除数据和日志后),令其为nn1
$hadoop-daemon.sh start/stop namenode //在nn1上启动(首先成为一个active)
#此时,在nn1上的journal node存储目录data/ha/jn产生集群id信息,同时也会在hadoop运行存储目录产生相关信息
$hdfs namenode -bootstrapStandby //在其余namnode节点上同步nn1的元数据管理信息
$hadoop-daemon.sh start namenode //在其余节点启动Namenode
$hadoop-daemon.sh start datanode //启动所有的datanode
$stop-dfs.sh //关闭所有hdfs服务
$hdfs zkfc -formatZK //在每台namenode上初始化ZKFC组件,此时会产生一个hadoop-ha目录
$zkServer.sh stop //关闭各台主机的zookeeper,关闭zookeeper集群
#初始化完毕
【Hadoop HA集群的启动和关闭】
#启动zookeeper集群,分别在各个主机上启动,一定关闭防火墙,查看启动状态
$zkServer.sh start //启动各台主机的zookeeper,启动zookeeper集群
#启动HDFS
$start-dfs.sh //在主备namenode中随便选一台启动HDFS服务,自动设置了active节点
#手动改变active namenode
$hdfs haadmin -transitionToActive nn1 --forcemanual //强制nn1节点转变为active
$hdfs haadmin -getServiceState nn1 //查看nn1的激活状态
#查看各个节点进程启动是否正常,如果某些节点的某些进程没开启,需要手动开启
$jps //Namenode,Datanode,JournalNode,DFSZKFailoverContraller,QuorumPeerMain
#启动yarn
$start-yarn.sh //在主备resourcemanager中随便选一台启动yarn服务
#手动改变active
$yarn rmadmin -transitionToActive rmx --forcemanual //强制将rmx中resourcemanager设为激活状态
$yarn rmadmin -getServiceState rmx //查看rmx中resourcemanager的激活状态
#查看节点进程启动是否正常,如果某些节点的某些进程没开启,需要手动开启
$jps //ResourceManager,NodeManager
#启动日志聚集
$mr-jobhistory-daemon.sh start historyserver
"""
手动启动HDFS模式
#hadoop-daemon.sh // hdfs --daemon(hadoop3.x)
#yarn-daemon.sh //yarn --daemon(hadoop3.x)
#mr-jobhistory-daemon.sh //mapred --daemon(hadoop3.x)
"""
#对于停止操作,则是反过来的操作
**************
重置,重新格式化
1、删除所有节点data/ha、logs/*
2、删除zookeeper中的节点
$zkCli.sh #开启客户端
$ls / #查看对应节点
$deleteall /xxx #删除对应节点
$quit
【验证与问题】
#验证操作
1.1、验证HDFS-HA中namenode的HA模式:kill进程
$kill -9 namenode的进程id
$service network stop //此两种方法均为阻断进程
$hdfs haadmin -getServiceState nn1 //查看另一个节点的active状态以及web状态
1.2、验证HDFS-HA中的namenode的HA模式:上传/下载大文件
"找一个比较大的文件,hadoop103进行文件上传操作,5秒钟的时候干掉Hadoop101 active状态的namenode,看看文件是否能上传成功"
2.1、验证YARN-HA中resourcemanager的HA模式:kill进程
"与HDFS同样验证"
2.2、验证YARN-HA中resourcemanager的HA模式:执行WordCount操作
"hadoop101执行wordcount操作,中途断掉hadoop102的resourcemanager的active状态,查看执行状态"
#问题1:logs日志出现,“does not contain a valid host:port authority”
将显示的对应配置的host更改为真实的ip地址
#问题2:Standby所在的namenode不会自动切换为active状态。
$yum install -y psmisc //Linux系统没有 fuser 命令,主备切换是执行 fuser 失败了,报 fuser: command not found
//修改权限hdfs-site.xml
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
#问题3:namenode启动后关闭,设置连接尝试次数
见core-site.xml
CentOS7.5搭建Hadoop2.7.6完全分布式集群
ZooKeeper学习之路 (九)利用ZooKeeper搭建Hadoop的HA集群
【HA概述:HDFS-HA与YARN-HA】
四、操作集群
1、文件系统hdfs操作指令
$hadoop dfs -put localfile dfsfile //将文件上传到hdfs
$hadoop dfs -get dfsfile localpath //将文件从hdfs上下载下来
$hadoop dfs -mv [options] //剪切修改文件名
$hadoop dfs -mkdir [options] //创建目录
$hadoop dfs -cp [options] //复制操作
$hadoop dfs -touch [options] //创建文件
$hadoop dfs -rm [options] //删除文件
2、hadoop操作指令
$hadoop checknative //查看源码编译结果
$hadoop jar [jarfile] [jarclass] [input_file_or_diretory] [output_diretory] //执行mapred操作,执行任务
五、XML hadoop分布式配置属性(其他属性及值)
1、core-site.xml
属性 | 值 | 解释 |
---|---|---|
2、hdfs-site.xml
属性 | 值 | 解释 |
---|---|---|
3、mapred.xml
属性 | 值 | 解释 |
---|---|---|
4、yarn-site.xml
属性 | 值 | 解释 |
---|---|---|