Hadoop 概述(一)
Hadoop概述信息
hadoop 有三大组成部分,HDFS(分布式文件存储系统)、YARN(资源管理器)、MAPREDUCE(分布式计算框架) ,下边我们来简单介绍一下
HDFS 分布式文件存储系统
HDFS分布式文件系统,是由Google的GFS谷歌文件系统开源出来,其存储模型是有主从结构的,可以划分出来以下几点
NameNode(NN)
基于内存存储,不会和磁盘发生交互,使用映射快照和日志文件进行持久化,保存元数据信息,
以及保存文件名,文件属性,block块列表偏移量,位置信息和副本位置(block位置信息不会持久化,由 DN 心跳汇报)DataNode(DN)
以文件形式进行本地磁盘目录存储block块信息,同时会存储block块的元数据文件(MD5文件,用于校验文件完整性)
启动 DN 时会向 NN 发送心跳信息,同时汇报block的位置信息,默认心跳时间是3秒一次,如果 NN 10分钟没有收到 DN 的心跳汇报,
则认为其已经丢失,由于副本数会小于系统配置副本数,NN 会进行copy该block块信息到其他 DN 上block,是将文件线性切割成块,也是偏移量 offset,大小默认设置为128M,副本数默认为3个,分散存储在集群节点中,
已上传的文件block副本数可以调整,大小不可以调整,只支持一次写入多次读取,同一时刻只有一个写入者副本的放置位置的逻辑
第一个副本:放置在上传文件的 DN,如果是集群外提交,则随机挑选一台磁盘不满,CPU不忙的
第二个副本:放置在与同一个副本不同的机架上的某个 DN
第三个副本:放置在与第二个副本同一个机架,不同的 DN 上
更多个脚本:出去上边3个,其他随机放置在不同的 DN 上
SecondaryNameNode (2NN)
它不是 NN 的备份,主要工作是帮助 NN 合并 fsimage 和 edits log信息,减少 NN 启动时间2NN 执行合并文件的时机:根据配置的时间间隔 dfs.namenode.checkpoint.perid 默认是3600秒,
或者根据配置文件设置一定数量的文件系统事物之后 dfs.namenode.checkpoint.txns,默认是 1000000次事物
如果同时设置了这两个属性,则达到的哪一个阈值将触发一个检查点2NN 合并的流程
NN 在触发checkpoint时间节点,会将自己的fsimage 和 edits log 日志信息同步到 2NN。同时创建一个新的edits log
2NN 会加载fsimage 并执行log日志里的命令,生成一个最新的fsimage.ckpt文件,此时fsimage.ckpt保存的快照信息就是从hadoop启动到当前checkpoint时间节点的信息。
再次推送fsimage.ckpt 到 NN 转换成fsimage文件,此时会有一个checkpoint时间节点的快照文件,和checkpoint时间节点后的edits log日志文件
当下次再次触发checkpoint时,2NN 只需要加载edits log日志文件就可以合并下一个最新的快照文件
安全模式
NN 启动的时候,首先将映射文件fsimage载入内存,并执行编辑日志edits log文件里的操作
一旦在内存中成功建立文件系统元数据的映射,则会创建一个新的fsimage 文件和一个空的edits log文件
此刻 NN 是安全模式,即 NN 的文件系统对于客户端来说只读此时,NN 接收到各个 DN 的心跳和汇报信息,会收集到数据块的位置等信息,当数据块达到最小副本数时,
会被认为是安全的,在一定比例的数据块被确认为安全后,再过若干时间,安全模式结束当检测到副本数不足的数据块,块会被复制到其他 DN 中,直到达到最小副本数,系统中数据块的位置并不是由 NN 维护,而是以块列表形式存储在 DN 中
hadoop 概述一,已经写了hdfs的一些基本概念,那作为分布式文件系统,是怎么进行读写的?下边讲述hdfs的读写流程
HDFS中读写流程中有一些额外的小的概念,下面讲述一下
- block
blokc块,一般是128M,可以修改大小,但不推荐,原因如下:
如果块设置过大,
一方面,从磁盘传输数据的时间会明显大于寻址时间,导致程序在处理这块数据时,变得非常慢;
另一方面,mapreduce中的map任务通常一次只处理一个块中的数据,如果块过大运行速度也会很慢。如果块设置过小,
一方面存放大量小文件会占用NameNode中大量内存来存储元数据,而NameNode的内存是有限的,不可取;
另一方面文件块过小,寻址时间增大,导致程序一直在找block的开始位置。
packet
packet 它是client端向DataNode,或者DataNode之间使用PipLine传输的基本单位,默认64KBchunk
它是client向DataNode,或者DataNode之间PipLine之间进行数据校验的基本单位,默认是512Byte,因为要用作校验,
故每个chunk需要带有4Byte的校验位,一个chunk的大小是516Byte
HDFS写流程

写流程步骤
客户端向NameNode发出写文件请求,
检查文件是否已经存在,是否有权限写,如果校验通过,写入到edits log,并返回输出流对象和可写的DataNode列表
客户端按128MB的大小切分文件
客户端根据NameNode返回的可分配的可写DataNode列表,将Data数据发送给最近的一个DataNode节点写入一个packet,
列表中其他可写DataNode节点会和第一个节点形成pipline管道,将packet在多个节点写入,使得多个DataNode节点可以同时写入给个DataNode写完一个块后,会返回确认信息
写数据完成,关闭输出流
发送完成信号给NameNode
HDFS读流程

读流程步骤
客户端访问NameNode,查询元数据信息,获取这个文件按照距离排序的位置信息,返回输入流对象
选择最近的一台DataNode服务器,请求建立输入流
客户端从DataNode读取数据,以packet为单位,还要校验完整性
关闭输入流
从我们之前搭建的hadoop来看HDFS存在如下问题
- NameNode 单点故障,难于应用于在线场景
- NameNode 压力过大,且内存受限,影响系统扩展性
- MapReduce jobTracker访问压力过大,影响系统扩展性
那有没有解决方案呢?
解决单点故障:HDFS HA 通过主备NameNode解决
解决系统扩展性问题:使用HDFS Federation 水平扩展,支持多个NameNode,所有NameNode共享所有DataNode存储资源,每个NameNode分管一部分目录
hadoop集群下几个好用的脚本工具
远程复制同步脚本
1.通过scp直接拷贝
一般Linux系统之间复制同步文件,或者文件夹使用的是scp,基本语法如下:
scp -r sourceFile username@host:destpath
- 或者在有ssh免密登录的情况下可以使用如下命令
scp -r sourceFile host:$PWD
2. 通过rsync来实现增量拷贝
rsync 远程同步工具,rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。
(1) 基本语法
rsync -av sourceFile username@host:destPath
选项参数说明
| 选项 | 功能 |
|---|---|
| -a | 归档拷贝 |
| -v | 显示复制过程 |
| 例如hadoop01执行以下命令同步zk安装包 |
rsync -av /bigdata/soft/apache-zookeeper-3.6.2-bin.tar.gz hadoop02:/bigdata/soft/
3. 通过rsync来封装分发脚本
我们可以通过rsync这个命令工具来实现脚本的分发,可以增量的将文件分发到我们所有其他的机器上面去
(1)需求:循环复制文件到所有节点的相同目录下
(2)需求分析:
(a)rsync命令原始拷贝:
rsync -av /bigdata/soft hadoop@hadoop02:/bigdata/soft
(b)期望脚本使用方式:
xsync要同步的文件名称
(c)说明:在/home/hadoop/bin这个目录下存放的脚本,hadoop用户可以在系统任何地方直接执行。
(3)脚本实现
三台机器执行以下命令安装rsync工具
sudo yum -y install rsync
(a)在/home/hadoop目录下创建bin目录,并在bin目录下xsync创建文件,文件内容如下:
[hadoop@hadoop01 ~]$ cd ~
[hadoop@hadoop01 ~]$ mkdir bin
[hadoop@hadoop01 ~]$ cd /home/hadoop/bin
[hadoop@hadoop01 bin]$ touch xsync
[hadoop@hadoop01 bin]$ vim xsync
在该文件中编写如下代码
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if ((pcount==0)); then
echo no args;
exit;
fi
#2 获取文件名称
p1=$1
fname=`basename $p1`
echo $fname
#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo $pdir
#4 获取当前用户名称
user=`whoami`
#5 循环
for((host=1; host<4; host++)); do
echo ------------------- hadoop0$host --------------
rsync -av $pdir/$fname $user@hadoop0$host:$pdir
done
(b)修改脚本 xsync 具有执行权限
[hadoop@hadoop01 bin]$ cd ~/bin/
[hadoop@hadoop01 bin]$ chmod 777 xsync
(c)调用脚本形式:xsync 文件名称
[hadoop@hadoop01 bin]$ xsync /home/hadoop/bin/
注意:如果将xsync放到/home/hadoop/bin目录下仍然不能实现全局使用,可以将xsync移动到/usr/local/bin目录下
一键启动hadoop集群的脚本
- 为了便于一键启动hadoop集群,我们可以编写shell脚本
- 在主节点hadoop01服务器的/home/hadoop/bin目录下创建脚本
[hadoop@hadoop01 bin]$ cd /home/hadoop/bin/
[hadoop@hadoop01 bin]$ vi hadoop.sh
- 内容如下
#!/bin/bash
case $1 in
"start" ){
source /etc/profile;
/bigdata/install/hadoop-3.1.4/sbin/start-dfs.sh
/bigdata/install/hadoop-3.1.4/sbin/start-yarn.sh
#/bigdata/install/hadoop-3.1.4/sbin/mr-jobhistory-daemon.sh start historyserver
/bigdata/install/hadoop-3.1.4/bin/mapred --daemon start historyserver
};;
"stop"){
/bigdata/install/hadoop-3.1.4/sbin/stop-dfs.sh
/bigdata/install/hadoop-3.1.4/sbin/stop-yarn.sh
#/bigdata/install/hadoop-3.1.4/sbin/mr-jobhistory-daemon.sh stop historyserver
/bigdata/install/hadoop-3.1.4/bin/mapred --daemon stop historyserver
};;
esac
- 修改脚本权限
[hadoop@hadoop01 bin]$ chmod 777 hadoop.sh
[hadoop@hadoop01 bin]$ ./hadoop.sh start # 启动hadoop集群
[hadoop@hadoop01 bin]$ ./hadoop.sh stop # 停止hadoop集群
所有机器查看进程脚本
- 我们也可以通过jps在每台机器上面查看进程名称,为了方便我们以后查看进程,我们可以通过脚本一键查看所有机器的进程
- 在主节点hadoop01服务器的/home/hadoop/bin目录下创建文件xcall
[hadoop@hadoop01 bin]$ cd ~/bin/
[hadoop@hadoop01 bin]$ vi xcall
- 添加以下内容
#!/bin/bash
params=$@
for (( i=1 ; i <= 3 ; i = $i + 1 )) ; do
echo ============= hadoop0$i $params =============
ssh hadoop0$i "source /etc/profile;$params"
done
- 然后一键查看进程并分发该脚本
chmod 777 /home/hadoop/bin/xcall
xsync /home/hadoop/bin/
- 各节点应该启动的hadoop进程如下图
xcall jps
hadoop集群安装
hadoop集群安装
- 安装环境服务部署规划
| 服务器IP | node01 | node02 | node03 |
|---|---|---|---|
| HDFS | NameNode | ||
| HDFS | SecondaryNameNode | ||
| HDFS | DataNode | DataNode | DataNode |
| YARN | ResourceManager | ||
| YARN | NodeManager | NodeManager | NodeManager |
| 历史日志服务器 | JobHistoryServer |
下载安装包,并解压
下载
目前hadoop已经更新到3.x版本,这次我们使用的是3.1.4版本
使用国内清华大学的镜像库地址
https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.1.4/
将下载的压缩包保存在/bigdata/install
解压
cd /bigdata/install
tar -zxf hadoop-3.1.4.tar.gz -C /bigdata/install/
查看hadoop支持的压缩方式以及本地库
在第一台机器执行以下命令
cd /bigdata/install/hadoop-3.1.4/
bin/hadoop checknative

如果出现openssl为false,那么所有机器在线安装openssl即可,执行以下命令,虚拟机联网之后就可以在线进行安装了
sudo yum -y install openssl-devel
配置文件
一共要修改5个文件hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml
修改hadoop-env.sh
第一台机器执行以下命令
cd /bigdata/install/hadoop-3.1.4/etc/hadoop
vi hadoop-env.sh
查找到JAVA_HOME的配置信息,修改为下边信息
export JAVA_HOME=/bigdata/install/jdk1.8.0_141
修改core-site.xml
第一台机器执行以下命令
vi core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop01:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/bigdata/install/hadoop-3.1.4/hadoopDatas/tempDatas</value>
</property>
<!-- 缓冲区大小,实际工作中根据服务器性能动态调整;默认值4096 -->
<property>
<name>io.file.buffer.size</name>
<value>4096</value>
</property>
<!-- 开启hdfs的垃圾桶机制,删除掉的数据可以从垃圾桶中回收,单位分钟;默认值0 -->
<property>
<name>fs.trash.interval</name>
<value>10080</value>
</property>
</configuration>
修改hdfs-site.xml
第一台机器执行以下命令
vi hdfs-site.xml
<configuration>
<!-- NameNode存储元数据信息的路径,实际工作中,一般先确定磁盘的挂载目录,然后多个目录用,进行分割 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop01:9868</value>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop01:9870</value>
</property>
<!-- namenode保存fsimage的路径 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///bigdata/install/hadoop-3.1.4/hadoopDatas/namenodeDatas</value>
</property>
<!-- 定义dataNode数据存储的节点位置,实际工作中,一般先确定磁盘的挂载目录,然后多个目录用,进行分割 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///bigdata/install/hadoop-3.1.4/hadoopDatas/datanodeDatas</value>
</property>
<!-- namenode保存editslog的目录 -->
<property>
<name>dfs.namenode.edits.dir</name>
<value>file:///bigdata/install/hadoop-3.1.4/hadoopDatas/dfs/nn/edits</value>
</property>
<!-- secondarynamenode保存待合并的fsimage -->
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file:///bigdata/install/hadoop-3.1.4/hadoopDatas/dfs/snn/name</value>
</property>
<!-- secondarynamenode保存待合并的editslog -->
<property>
<name>dfs.namenode.checkpoint.edits.dir</name>
<value>file:///bigdata/install/hadoop-3.1.4/hadoopDatas/dfs/nn/snn/edits</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
</property>
</configuration>
修改mapred-site.xml
第一台机器执行以下命令
vi mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.job.ubertask.enable</name>
<value>true</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop01:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop01: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>
</configuration>
修改yarn-site.xml
第一台机器执行以下命令
vi yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop01</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 如果vmem、pmem资源不够,会报错,此处将资源监察置为false -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
</configuration>
修改workers文件
第一台机器执行以下命令
vi workers
把里面内容全部删除后替换为
hadoop01
hadoop02
hadoop03
创建文件存放目录
第一台机器执行以下命令
hadoop01机器上面创建以下目录
mkdir -p /bigdata/install/hadoop-3.1.4/hadoopDatas/tempDatas
mkdir -p /bigdata/install/hadoop-3.1.4/hadoopDatas/namenodeDatas
mkdir -p /bigdata/install/hadoop-3.1.4/hadoopDatas/datanodeDatas
mkdir -p /bigdata/install/hadoop-3.1.4/hadoopDatas/dfs/nn/edits
mkdir -p /bigdata/install/hadoop-3.1.4/hadoopDatas/dfs/snn/name
mkdir -p /bigdata/install/hadoop-3.1.4/hadoopDatas/dfs/nn/snn/edits
hadoop01执行以下命令进行拷贝
cd /bigdata/install
scp -r hadoop-3.1.4/ hadoop02:$PWD
scp -r hadoop-3.1.4/ hadoop03:$PWD
配置hadoop的环境变量
三台机器都要进行配置hadoop的环境变量,三台机器执行以下命令
sudo vi /etc/profile
export HADOOP_HOME=/bigdata/install/hadoop-3.1.4
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
配置完成之后生效
source /etc/profile
集群启动以及验证
格式化集群
- 要启动 Hadoop 集群,需要启动 HDFS 和 YARN 两个集群。
- 注意:首次启动HDFS时,必须对其进行格式化操作。本质上是一些清理和准备工作,因为此时的 HDFS 在物理上还是不存在的。格式化操作只有在首次启动的时候需要,以后再也不需要了
- hadoop01执行一遍即可
hdfs namenode -format
- 或者
hadoop namenode –format
- 下图高亮表示格式化成功;

集群启动
- 启动集群有两种方式:
- ①脚本一键启动;
- ②单个进程逐个启动
1. 启动HDFS、YARN、Historyserver
- 如果配置了 etc/hadoop/workers 和 ssh 免密登录,则可以使用程序脚本启动所有Hadoop 两个集群的相关进程,在主节点所设定的机器上执行。
- 启动集群
- 主节点hadoop01节点上执行以下命令
start-dfs.sh
start-yarn.sh
# 已过时mr-jobhistory-daemon.sh start historyserver
mapred --daemon start historyserver
- 停止集群(主节点hadoop01节点上执行):
stop-dfs.sh
stop-yarn.sh
# 已过时 mr-jobhistory-daemon.sh stop historyserver
mapred --daemon stop historyserver
2. 单个进程逐个启动
# 在主节点上使用以下命令启动 HDFS NameNode:
# 已过时 hadoop-daemon.sh start namenode
hdfs --daemon start namenode
# 在主节点上使用以下命令启动 HDFS SecondaryNamenode:
# 已过时 hadoop-daemon.sh start secondarynamenode
hdfs --daemon start secondarynamenode
# 在每个从节点上使用以下命令启动 HDFS DataNode:
# 已过时 hadoop-daemon.sh start datanode
hdfs --daemon start datanode
# 在主节点上使用以下命令启动 YARN ResourceManager:
# 已过时 yarn-daemon.sh start resourcemanager
yarn --daemon start resourcemanager
# 在每个从节点上使用以下命令启动 YARN nodemanager:
# 已过时 yarn-daemon.sh start nodemanager
yarn --daemon start nodemanager
以上脚本位于$HADOOP_HOME/sbin/目录下。如果想要停止某个节点上某个角色,只需要把命令中的start 改为stop 即可。
验证访问web ui界面
hdfs集群访问地址
http://192.168.56.10:9870
yarn集群访问地址
http://192.168.56.10:8088
jobhistory访问地址:
http://192.168.56.10:19888
hadoop HA高可用搭建
接上回hadoop概述二,我们了解到了hdfs有弊端,需要搭建HA,通过官网查看有2中方式进行高可用。一种基于QJM方式的,另一种基于联邦的,
我们今天先来使用QJM方案来做hadoop的高可用,使用4台服务器来做集群,还会用到zookeeper来做主备切换的调控
先说一下我们的IP分配和服务的规划信息
节点和IP
节点 IP ha01 192.168.56.20 ha02 192.168.56.21 ha03 192.168.56.22 ha04 192.168.56.23 服务规划
节点 namenode namenode datanode zookeeper zkFC Journalnode ha01 * * * ha02 * * * * * ha03 * * * ha04 * *
修改4台服务器的/etc/hosts文件,追加IP和节点信息,HA集群需要用到ssh免密登录,这里免密登录有2中场景
- ha01控制执行hadoop脚本会用到免密登录到其他机器
- 两个namenode进行主备切换时需要登录到对方机器,杀死对方的相应进程,然后提升自己节点的为激活状态
vi /etc/hosts
192.168.56.20 ha01
192.168.56.21 ha02
192.168.56.22 ha03
192.168.56.23 ha04
保存退出后执行/etc/init.d/network restart ,生效hosts文件内容
安装zk
以前已写了安装zk教程,请查看之前的zookeeper集群安装的教程,本次需要安装的是ha02,ha03,ha04,切换成对应的机器信息即可
免密登录
我们使用的hadoop用户,所以我们就在hadoop用户的家目录下进行创建免密登录的信息,其他3台相同操作
[hadoop@ha01 ~]$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
[hadoop@ha01 ~]$ ssh-copy-id ha01 ##复制公钥信息到authorized_keys中
配置hadoop信息
- hadoop.env.sh
cd /bigdata/install/hadoop-3.1.4/etc/hadoop/
vi hadoop.env.sh
找到JAVA_HOME和HADOOP_HOME,对该配置项进行编辑,并去掉注释符
JAVA_HOME=/bigdata/install/jdk1.8.0_141
HADOOP_HOME=/bigdata/install/hadoop-3.1.4
- core-site.xml
vi core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<!-- hadoop临时目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/bigdata/install/hadoop-3.1.4/hadoopDatas/tempDatas</value>
</property>
<!-- zk 集群信息 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>ha02:2181,ha03:2181,ha04:2181</value>
</property>
<!-- 缓冲区大小,实际工作中根据服务器性能动态调整;默认值4096 -->
<property>
<name>io.file.buffer.size</name>
<value>4096</value>
</property>
</configuration>
- hdfs-site.xml
<configuration>
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>ha01:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>ha02:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>ha01:9870</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>ha02:9870</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://ha01:8485;ha02:8485;ha03:8485/mycluster</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/bigdata/install/hadoop-3.1.4/hadoopDatas/journal</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</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
</property>
</configuration>
- yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>cluster1</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>ha01</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>ha02</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>ha01:8088</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>ha02:8088</value>
</property>
<property>
<name>hadoop.zk.address</name>
<value>ha02:2181,ha03:2181,ha04:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 如果vmem、pmem资源不够,会报错,此处将资源监察置为false -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
</configuration>
- works
vi works,works里面表示的datanode节点的名称,我们这里是ha02-ha04
ha02
ha03
ha04
注意
由于我们在安装centos7的时候选择了最小化安装,默认是不安装psmics。但在ZKFC中会使用到里面的命令来进行主从切换,否则切换失败,所以需安装psmisc
yum -y install psmisc
简短说明,包含fuser,killall,pstree三个程序
fuser 显示使用指定文件或者文件系统的进程的PID。
killall 杀死某个名字的进程,它向运行指定命令的所有进程发出信号。
pstree 树型显示当前运行的进程。
集群启动验证
- 启动zookeeper集群
由于我们在ha02/ha03/ha04安装zookeeper,启动是在这3台进行
zkServer.sh start
2.启动journalnode
JN我们规划是在ha01/ha02/ha03,在这3台分别执行
hadoop-daemon.sh start journalnode
3.格式化namenode,启动主从namenode
格式化是hdfs中namenode第一次启动时要进行的操作,这里做了集群后是2个namenode,挑选一台,比如我们选的是ha01
ha01执行 hdfs namenode -format
启动主从namenode,
在ha01执行 hadoop-daemon.sh start namenode
在ha02执行 hdfs namenode -bootstrapStandby
4.格式化zk
在启动ZKFC时需要依赖zookeeper集群,上边已启动集群,对zookeeper集群格式化
在ha01执行 hdfs zkfc -formatZK
5.启动其他服务
现在就可以启动其他服务了,我们在ha01执行 start-dfs.sh
然后在4台机器上输入jps查看是否是我们规划的服务信息
Hadoop 概述(一)的更多相关文章
- hadoop概述测试题和基础模版代码
hadoop概述测试题和基础模版代码 1.Hadoop的创始人是DougCutting?() A.正确 B.错误答对了!正确答案:A解析:参考课程里的文档,这个就不解释了2.下列有关Hadoop的说法 ...
- Hadoop概述
本章内容 什么是Hadoop Hadoop项目及其结构 Hadoop的体系结构 Hadoop与分布式开发 Hadoop计算模型—MapReduce Hadoop的数据管理 小结 1.1 什么是Hado ...
- Hadoop实战之一~Hadoop概述
对技术,我还是抱有敬畏之心的. Hadoop概述 Hadoop是一个开源分布式云计算平台,基于Map/Reduce模型的,处理海量数据的离线分析工具.基于Java开发,建立在HDFS上,最早由Goog ...
- Hadoop_01_Apache Hadoop概述
一:Hadoop(Hadoop Distributed File System)概述:对海量数据分析处理的工具 1. Hadoop是Apache旗下的一个用java语言实现开源软件框架,是一个开发和运 ...
- hadoop入门(1)——hadoop概述
一.hadoop生态系统特点 开源.社区活跃.涉及分布式存储和计算的整个生态系统.已得到企业界验证. hadoop1.0与2.0版本的比较: 1.0包含HDFS+MapReduce. 2.0包括HDF ...
- Hadoop 概述
Hadoop 是 Apache 基金会下的一个开源分布式计算平台,以 HDFS 分布式文件系统 和 MapReduce 分布式计算框架为核心,为用户提供底层细节透明的分布式基础设施.目前,Hadoop ...
- 每天收获一点点------Hadoop概述
一.Hadoop来历 Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明了倒排索引算法,通过加入了Map ...
- Java入门到精通——框架篇之Hadoop概述
一.Hadoop来历 Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明了倒排索引算法,通过加入了Map ...
- 一步一步跟我学hadoop(1)----hadoop概述和安装配置
这几年云计算大数据非常火,借这个东风.今天開始学习apache的分布式计算框架hadoop,希望不要太落后. Hadoop说明 对于hadoop.apache官方wiki给出的说明为 Apache H ...
- Hadoop学习之旅一:Hello Hadoop
开篇概述 随着计算机网络基础设施的完善,社交网络和电商的发展以及物连网的推进,产生了越来越多的大数据,使得人工智能最近几年也有了长足的发展(可供机器学习的样本数据量足够大了),大数据的存储和处理也越来 ...
随机推荐
- 0.4 Nomenclature and notation
- The 2024 ICPC Asia East Continent Online Contest (I) G
Link: The Median of the Median of the Median 考虑二分答案,对中位数进行二分,每次去判断是否比中位数大即可. 我们钦定了一个中位数 \(x\),对于 \(\ ...
- Apache APISIX 和 Kong 的选型对比
从 API 网关核心功能点来看,两者均已覆盖: 功能 Apache APISIX Kong 动态上游 支持 支持 动态路由 支持 支持 健康检查和熔断器 支持 支持 动态SSL证书 支持 支持 七层和 ...
- x-easypdf 初始
一.概述 一个 java 语言简化处理 pdf 的框架 项目主页 https://x-easypdf.cn 项目概述 x-easypdf是一个java语言简化处理pdf的框架,包含fop模块与pdfb ...
- PHPstorm配置webserver
phpstorm自带了一个web server,我们可以直接在IDE中直接运行调试代码,非常方便. 配置interpreter 工程第一次运行还要配置一下php的解释器,我电脑的配置如下: 可以看到代 ...
- Echarts 提示组件
1.开启指示器 默认情况下,指示器是关闭状态,如果需要开启,直接配置tooltip字段即可 var option = { tooltip:{}, } 2.指示器的触发类型 触发类型的字段为trigge ...
- PLC编程—数据类型
CPU 型号不同,实际的有效数据类型与文中略有不同(大同小异) 数据类型概述 基本数据类型(二进制数.整数.浮点数.定时器.DATE.TOD.LTOD.CHAR.WCHAR) 复杂数据类型(DT.LD ...
- uni-app项目button组件去不掉的灰色边框爬坑
前情 uni-app是我比较喜欢的跨平台框架,它能开发小程序/H5/APP(安卓/iOS),重要的是对前端开发友好,自带的IDE让开发体验非常棒,公司项目就是主推uni-app. 坑位 最近在开发个人 ...
- Linux(ubuntu18)下 Qt linguist 在哪里 找不到
1.首先找到Qt安装目录. 2.通过命令查找linguist. find . -name linguist 3.制作桌面快捷方式. 在/usr/share/applications目录下新建lingu ...
- P6474 [NOI Online #2 入门组] 荆轲刺秦王 题解
荆轲将会臭名昭著 首先 $15$ 做法很简单,那就是直接 `cout<<-1` 考虑用 BFS 来解思路很简单,但是怎么求每个士兵的控制范围呢? 直接暴力时间复杂度是 $O(nma^2)$ ...