文章目录
一、Hadoop
狭义上: 分布式数据管理(存储,计算)的系统服务
广义上: 大数据开发的一个生态系统,很多大数据开发的工具都可以接入到hadoop中
如 zk可以配合Hadoop一起实现高可用
1.1、Hadoop发展
Hadoop属于Apache基金会的开源项目,下载源码使用
是搜索引擎公司开发的,Hadoop的实现原理参考谷歌的两篇论文,
GFS论文,开发了hdfs 负责存储
Mapreduce论文,开发了mapreduce 负责计算
1.2、Hadoop特性
扩容能力(Scalable)
:Hadoop是在可用的计算机集群间分配数据并完成计算任务的,这些集群可以方便的扩展到数以千计的节点中。成本低(Economical)
:Hadoop通过普通廉价的机器组成服务器集群来分发以及处理数据,以至于成本很低。高效率(Efficient)
:通过并发数据,Hadoop可以在节点之间动态并行的移动数据,使得速度非常快。可靠性(Rellable)
:能自动维护数据的多份复制,并且在任务失败后能自动地重新部署(redeploy)计算任务。所以Hadoop的按位存储和处理数据的能力值得信赖。
1.3、Hadoop三大组件
- HDFS 负责数据存储服务
- MapReduce 负责数据计算
- Yarn 负责计算资源的调度 hadoop2.0 之后的版本引入
二、Hadoop—HDFS(分布式文件存储系统)
负责大数据的数据储存功能
对海量数采用文件的方式进行存储,同一个文件的数据可能会存储在不同的服务器实现分布式存储
2.1、hdfs服务的构成
- namenode服务 管理hdfs的主服务
- 所有的数据的读写请求都要交给namenode处理
- 由namenode负责将数据进行分配存在不同的datanode上
- namenode主服务只会有一个,一旦namenode服务出现问题,整个hdfs服务都不可用,namenode是单点故障
- datanode服务 负责存储数据
- 和namenode保持通讯,将自身信息告知namenode
- 数据存储时,是按照块(block)进行存储,默认块大小 128M
- 当数据大小不够128M时,按照数据大小存储数据到磁盘上
- 为了保证数据安全可靠,会对数据进行副本备份, 默认是3副本,每块数据会存储3份,三份数据会存储在不同服务器
- SecondaryNameNode 负责协助namenode完成对元数据的存储
- 元数据是文件的信息(名字,大小,存储位置),datanode信息,块信息
- 在hdfs运行期间,元数据是在内存上存储的,内存存储数据是临时存储,一点断电或服务不可用宕机会造成内存数据丢失,hdfs为了避免数据丢失,会将元数据在磁盘上进行存储
- SecondaryNameNode 协助namenode将元数据存在磁盘上
- 如果namenode完成磁盘存储数据,需要耗费大量时间,此时无法处理其他请求,所以元数据的磁盘存储交给SecondaryNameNode 实现
2.2、HDFS的Shell操作
在hadoop的2.x版本中没有web页面的操作选项,只能通过shell方式操作
hdfs dfs 参数
hdfs dfs -mkdir /hdfs_data
hdfs dfs -touch /hdfs_data/a.txt
hdfs dfs -rm -r /hdfs_data
hdfs dfs -cp /hdfs_data/a.txt /data
hdfs dfs -mv /data/画图.pptx /hdfs_data
hdfs dfs -mv /hdfs_data/画图.pptx /hdfs_data/a.pptx
hdfs dfs -cat /hdfs_data/a.txt
hdfs dfs -ls /
hdfs的文件上传下载
hdfs dfs -get hdfs上的文件路径 本地的文件路径(本地指操作的当前服务器)
hdfs dfs -put 本地的文件路径(本地指操作的当前服务器) hdfs上的目录路径
2.3、HDFS读写流程
- 读流程
客户端向filesystem请求获取文件数据,
filesystem请求NN检查文件,
NN获取元数据进行检查并返回检查结果给filesystem,filesystem返回给客户端,客户端请求调用读取数据方法fsDataReadStream,
fsDataReadStream请求NN获取数据所在位置,NN返回数据所在位置(按照块存储顺序返回所有块的DN数据),然后按照packet大小读取数据,存储在内存上,数据读取完成后写入文件
当读取某个DN不可用时,会汇报给NN
- 写流程
1.客户端通过DistributedFileSystem模块向NN请求上传文件,NN检查目标文件是否已存在,父目录是否存在并返回检查结果
2. 客户端向NN请求第一个Block上传到哪几个DN服务器上
3. NN返回3个DN节点,分别为DN1,DN2,DN3
4. 客户端通过FSDataWriteStream模块请求NN获取要存储数据的DN并向DN1上传数据,DN1收到请求会继续调用DN2,然后DN2调用DN3,将这个通信管道建立完成
5. DN1,DN2,DN3逐级应答客户端
6. 客户端开始往 DN1 上传第一个 Block (默认128M)(先从磁盘读取数据放到一个本地内存缓存),以 Packet(64KB) 为单位,DN1 收到一个 Packet 就会传给 DN2,DN2传给 DN3;DN1每传一个 packet 会放入一个应答队列等待应答。
7. 当一个 Block 传输完成之后,客户端再次请求 NameNode 上传第二个 Block 的服务器。(重复执行3-7步)
2.4、三副本机制
保证每个块在不同的服务器不同机架上
服务器数量低于副本数量,存储数据时会报错
1-第一个副本,由NN决定找哪个DN
2-第二个副本,有NN找第一个副本所在机架的不同服务器上
3-第三个副本,找和第一个副本不同机架的服务器上
2.5、元数据介绍
hdfs的元数据两个部分
- 内存上的元数据
- 在服务运行期间,所有的元数据会先存储在内存上
- 文件信息,datanode信息,块信息
- 元数据文件
- 为了避免内存上的元数据丢失,会将内存的上的元数据保存在磁盘上
- secondarynamenode完成元数据文件的保存
- 存储位置在hadoop的指定数据
- /export/data/hadoop-3.3.0/dfs/name/current
- edits_xxxxx 编辑日志文件,记录所有的文件操作信息
hdfs oev -i edits_0000000000000010086-0000000000000010100 -o edits.xml
- fsimage_xxxxx 镜像文件,保存了元数据内容 文件和块内容
- datanode会汇报自身状态给NameNode,默认是3秒
hdfs oiv -i fsimage_0000000000000010119 -p XML -o fsimage.xml
元数据备份流程
客户端发送文件操作请求给NN,NN将新的元数据同步到内存中并同时操作信息记录在edits文件中,如果edits存储1M会产生新的文件
SNN向NN发送checkpoint请求,时间间隔是一小时,当发生checkpoint时会创建新的edits文件,checkpoint后的请求操作信息会被记录在新的edits中,SNN执行edits文件中的操作,操作后的数据加载内存中,将元数据保存在fsimage中,将fsimage文件传递给NN并修改文件名
元数据保存文件的条件
1-时间间隔达到1小时
2-文件操作次数达到100万次
两个条件只要满足一个就是执行checkpoint进行元数据文件保存
# Checkpoint操作受两个参数控制,可以通过hdfs-site.xml进行配置:
<property>
<name> dfs.namenode.checkpoint.period</name>
<value>3600</value>
<description>
# 两次连续的checkpoint之间的时间间隔。默认1小时
</description>
</property>
<property>
<name>dfs.namenode.checkpoint.txns</name>
<value>1000000</value>
<description>
# 最大的没有执行checkpoint事务的数量,满足将强制执行紧急checkpoint,即使尚未达到检查点周期。默认设置为100万。
</description>
</property>
2.6、HDFS的归档
主要解决内存元数据数据量过大
文件数据量非常多时,内存上或存储大量的文件元数据,此时内存占用资源比较大,可以对文件进行归档,类似对文件进行打包合成一个打包文件
一般归档是针对大量小文件
- 文件归档
hadoop archive -archiveName data.har -p /data /hdfs_data
- 归档的查看
hdfs dfs -ls har:///hdfs_data/data.har
- 归档解压
hdfs dfs -cp har:///hdfs_data/data.har/a.txt /hdfs_data
归档注意点
归档后并不会删除原有数据
原有数据依然会占用内存空间
要节省内存空就需要删除原有文件
2.7、HDFS垃圾桶机制
删除hdfs文件时,可以将文件临时存在垃圾桶中,存储时间可以进行设置
可以core-site.xml中设置 时间单位是分钟
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
[root@node1 hadoop] hdfs dfs -rm /hdfs_data/a.txt
2023-06-18 18:01:34,332 INFO fs.TrashPolicyDefault: Moved: 'hdfs://node1:8020/hdfs_data/a.txt' to trash at: hdfs://node1:8020/user/root/.Trash/Current/hdfs_data/a.txt
[root@node1 hadoop] hdfs dfs -rm -skipTrash /hdfs_data/a.pptx
Deleted /hdfs_data/a.pptx
2.8、HDFS安全机制
保证文件操作的安全性
在hdfs启动时,会进行安全机制检查,检查块信息和datanode信息
检查通过了,可以进行文件的增删改查操作
检查未通过 只能读取文件,不能进行文件的写入修改删除操作
安全机制检查的内容
1-保证每个块至少有一个副本,没有出现块的丢失
2-保证数据块占整个块的比例不能低于0.999f,不能低于99.999%
3-保证至少有0个datanode运行
4-满足以上3个条件之后等待30秒
退出安全模式
- shell操作
- 查看
hdfs dfsadmin -safemode get
- 启动
hdfs dfsadmin -safemode enter
- 关闭
hdfs dfsadmin -safemode leave hdfs dfsadmin -safemode forceExit
三、Hadoop—MapReduce(分布式计算引擎)
MapReduce 是hadoop负责计算的服务功能,采用的计算方式是分布式计算,就算思想’分而治之’
传统计算方式是移动数据计算
分布式计算,移动计算到数据所在位置进行计算
3.1、MapReudce简单使用
hadoop提供测试代码
/export/server/hadoop/share/hadoop/mapreduce
hadoop jar hadoop-mapreduce-examples-3.3.0.jar pi 5 100
- 词频统计
hadoop jar hadoop-mapreduce-examples-3.3.0.jar wordcount /input /output
3.2、MapReduce 计算流程
- Map过程:(Map数量由块决定)
a. 通过split切割读取文件中的每行数据
b. 将每行需要计算的数据转为kv结构
c. 将kv数据写入环形缓冲区,默认大小100M,当达到80%开始spill溢出写入文件进行shuffle操作 - shuffle过程:
a. 分区:partition
ⅰ. 将Map处理后的数据分成多份:- 采用hash取余的方式进行分区
- 采用hash(key)%分区数(reduce个数) --余数相同的数据放同一分区
- 分区数由reduce个数决定
b. 排序:sort
ⅰ. 会对相同分区后的数据进行排序–排序的分区数据会写入文件
c. 合并:merge
ⅰ. 将相同分区的小文件数据合并成大文件(合并后的数据会排序,最终保证数据有序)
- Reduce过程:(Reduce数量由开发人员决定)
a. 先通过fetch拉取合并后的文件数据,将数据加载到内存,然后将拉取后的数据进行排序
b. 堆排序后的数据聚合计算
c. 不同分区的数据会有对应的reduce进行拉取
3.3、MapReduce计算历史服务
- 需要对历史日志服务进行配置
- 启动历史日志服务
mapred --daemon start historyserver
- hadoop服务运行错误查看的日志文件
四、Hadoop—Yarn(资源调度系统)
Yarn是hadoop中负责资源调度的服务功能,mapreduce计算时使用的资源都需要找yarn申请,申请成功后才能进行计算。
yarn是hadoop2.x版本之后引入的服务,在之前计算实时都是使用各自服务器上的资源,有了yarn可以协调分配多台服务器的资源。
4.1、Yarn服务的构成
- ResourceManager 简写RM
- 管理整个yarn服务
- 处理所有的计算任务资源申请请求
- 单点故障,出现问题后整个yarn都不可用
- 计算时会指定创建applicationmaster服务
- 不参与具体计算的资源分配
- NodeManager 简写NM
- 监控每台服务器的资源情况,汇报给RM
- 创建container资源空间给计算任务使用
- ApplicationMaster
- 只有在进行计算时会由RM创建
- 负责整个计算任务的管理(具体资源的分配),也就是管Map和Reduce计算
- Map和Reduce在计算时的信息会汇报给ApplicationMaster
- 计算完成,会由RM释放
4.2、Yarn的资源调度流程
1.客户端提交计算任务给RM
2. RM找到NM创建ApplicantionMaster
3. ApplicationMater和RM保持通讯并申请计算资源
4.申请成功,RM返回资源充足的NM信息,App通知对应的NM创建container资源空间
5.在对应的资源空间上运行MapTask,读取block数据转为kv(mr计算时有一个combine机制在map端进行聚合计算)
6.map通过shuffle将数据传递给reduce计算
7.计算完成后释放所有计算资源
4.3、Yarn资源调度方案
当有多个计算任务提交时,资源分配给哪个计算任务使用?
此时需要指定资源调度策略
1-先进先出(FIFO) 谁先申请先给谁分配
2-容量调度(Capacity) 将资源划分多份,交给多个任务分开使用 默认采用
3-公平调度 (Fair) 计算任务部分完成后,释放资源给其他任务使用 map计算完成后就可以释放资源不必等所有计算完成再释放
在yarn-site.xml文件下可以设置调度侧率
# 容量调度 默认
yarn.resourcemanager.scheduler.class= org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
# 公平调度
yarn.resourcemanager.scheduler.class=org.apache.hadoop.yarn.server.resourcemanager.reservation.FairSchedulerPlanFollower
当采用容量调度时需要单独对分配的容量进行指定
在hadoop的配置文件目录下指定capacity-scheduler.xml文件
<configuration>
<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>prod,dev</value> # 将资源分成两份一个叫prod一个dev
</property>
<property>
<name>yarn.scheduler.capacity.root.dev.queues</name>
<value>mapreduce,spark</value> # 将dev分成两份 一个叫mapreduce一个spark
</property>
<property>
<name>yarn.scheduler.capacity.root.prod.capacity</name>
<value>40</value> # 分配prod资源空间占比为40%
</property>
<property>
<name>yarn.scheduler.capacity.root.dev.capacity</name>
<value>60</value> # 分配dev资源空间占比为60%
</property>
<property>
<name>yarn.scheduler.capacity.root.dev.maximum-capacity</name>
<value>75</value> # 动态调整dev的大小 最大为75%
</property>
<property>
<name>yarn.scheduler.capacity.root.dev.mapreduce.capacity</name>
<value>50</value> # 指定dev下的mapreduce 占用dev的空间的50%
</property>
<property>
<name>yarn.scheduler.capacity.root.dev.spark.capacity</name>
<value>50</value> # 指定dev下的spark 占用dev的空间的50%
</property>
</configuration>
在使用时可以在代码中指定采用哪个资源,指定资源名称
root.dev.mapreduce
五、Hadoop集群搭建
Hadoop部署方式分三种:
Standalone mode(独立模式)
、
Pseudo-Distributed mode(伪分布式模式)
、
Cluster mode(集群模式)
其中前两种都是在单机部署。
独立模式又称为单机模式,仅1个机器运行1个java进程,主要用于调试。
伪分布模式也是在1个机器上运行HDFS的NameNode和DataNode、YARN的 ResourceManger和NodeManager,但分别启动单独的java进程,主要用于调试。
集群模式主要用于生产环境部署。会使用N台主机组成一个Hadoop集群。这种部署模式下,主节点和从节点会分开部署在不同的机器上。
5.1、搭建步骤
1.上传hadoop压缩包(hadoop-3.3.0-Centos7-64-with-snappy.tar.gz
)解压,注意:上传文件位置为 /export/server目录
cd /export/server
tar zxvf /export/server/hadoop-3.3.0-Centos7-64-with-snappy.tar.gz
2.配置环境变量
echo 'export HADOOP_HOME=/export/server/hadoop-3.3.0' >> /etc/profile
echo 'export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' >> /etc/profile
source /etc/profile
3.手动修改配置文件(3和4二选一)
进入
/export/server/hadoop-3.3.0/etc/hadoop
目录下进行修改
① hadoop-env.sh文件
export JAVA_HOME=/export/server/jdk
#文件最后添加
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
② core-site.xml文件
<!-- 设置默认使用的文件系统 Hadoop支持file、HDFS、GFS、ali|Amazon云等文件系统 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:8020</value>
</property>
<!-- 设置Hadoop本地保存数据路径 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/export/data/hadoop-3.3.0</value>
</property>
<!-- 设置HDFS web UI用户身份 -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
<!-- 整合hive 用户代理设置 -->
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
③ hdfs-site.xml文件
<!-- 设置SNN进程运行机器位置信息 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node2:9868</value>
</property>
④ mapred-site.xml文件
<!-- 设置MR程序默认运行模式: yarn集群模式 local本地模式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- MR程序历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>node1:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>node1:19888</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
⑤ yarn-site.xml文件
<!-- 设置YARN集群主角色运行机器位置 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node1</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 是否将对容器实施物理内存限制 -->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<!-- 是否将对容器实施虚拟内存限制。 -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<!-- 开启日志聚集 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置yarn历史服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://node1:19888/jobhistory/logs</value>
</property>
<!-- 保存的时间7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
⑥ workers文件
node1
node2
node3
4.使用配置文件替换(3和4二选一)
上传配置文件压缩包(
hadoop-config.tar
)解压,注意:上传文件位置为 /export/server目录
tar xvf /export/server/hadoop-config.tar
mv -f /export/server/hadoop-config/* /export/server/hadoop-3.3.0/etc/hadoop/
rm /export/server/hadoop-config* -rf
5.集群搭建说明
需要将node1中的Hadoop文件复制到node2和node3的对应位置
scp可以进行主机的文件复制拷贝
scp -r /export/server/hadoop-3.3.0 root@node2:/export/server/
6.hadoop集群启动
① 数据初始化
注意: 初始化操作必须在node1中执行
hdfs namenode -format
② 脚本启动和关闭
start-all.sh
stop-all.sh
http://192.168.88.100:9870
问题:
无法在HDFS上传文件,原因是本地windows下没有进行IP地址的域名解析
解决:windows下进入C:\Windows\System32\drivers\etc
192.168.88.100 node1.jinking.cn node1
192.168.88.101 node2.jinking.cn node2
192.168.88.102 node3.jinking.cn node3
5.2、高可用搭建步骤
主要解决服务的单点故障问题,提高服务的使用效率
使用zk实现多服务状态管理,选举产生主备
- 安装软件
三台服务器都要安装
yum install psmisc -y # 实现多个服务的通讯 zkfc和nn及zk的通讯
rpm -ivh psmisc-22.20-17.el7.x86_64.rpm
- 备份hadoop安装信息
tar cvf hadoop.tar /export/server/hadoop-3.3.0
- 删除原有数据文件
三台服务器都操作
rm -rf /export/data/hadoop-3.3.0
- 修改配置文件
以下配置现在node1上执行
- 修改hadoop-env.sh
# 在文件最后添加下面两行
export HDFS_JOURNALNODE_USER=root
export HDFS_ZKFC_USER=root
- 修改core-site.xml
<configuration>
<!-- HA集群名称,该值要和hdfs-site.xml中的配置保持一致 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://cluster1</value>
</property>
<!-- hadoop本地磁盘存放数据的公共目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/export/data/ha-hadoop</value>
</property>
<!-- ZooKeeper集群的地址和端口-->
<property>
<name>ha.zookeeper.quorum</name>
<value>node1:2181,node2:2181,node3:2181</value>
</property>
</configuration>
- 修改hdfs-site.xml
<configuration>
<!--指定hdfs的nameservice为cluster1,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>cluster1</value>
</property>
<!-- cluster1下面有两个NameNode,分别是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.cluster1</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.cluster1.nn1</name>
<value>node1:8020</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.cluster1.nn1</name>
<value>node1:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.cluster1.nn2</name>
<value>node2:8020</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.cluster1.nn2</name>
<value>node2:50070</value>
</property>
<!-- 指定NameNode的edits元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node1:8485;node2:8485;node3:8485/cluster1</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/export/data/journaldata</value>
</property>
<!-- 开启NameNode失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 指定该集群出故障时,哪个实现类负责执行故障切换 -->
<property>
<name>dfs.client.failover.proxy.provider.cluster1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔离机制方法-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</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>
- 修改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>node1</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>node2</value>
</property>
<!-- 指定zk集群地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>node1:2181,node2:2181,node3:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
注意: 将hadoop配置信息拷贝到node2和node3
注意: 将hadoop配置信息拷贝到node2和node3
注意: 将hadoop配置信息拷贝到node2和node3
5.启动
- 启动zk
- zkServer.sh start
- 启动journalnode 三台服务器都启动
- hadoop-daemon.sh start journalnode
- 初始化namenode 注意:node1上执行
- hdfs namenode -format
- 将数据文件拷贝到node2相同目录
- scp -r ha-hadoop/ node2:/export/data/
- 初始化zkfc 注意在node1上执行
- hdfs zkfc -formatZK
- 启动服务
- start-all.sh
注意
搭建高可用后,之前的SNN会被QJM取代