Hadoop 实战篇(2)
作者 | WenasWei
前言
在上一篇的 Hadoop 实战篇介绍过了 Hadoop-离线批处理技术的本地模式和伪集群模式安装,接下来继续学习 Hadoop 集群模式安装; 将从以下几点介绍:
Linux 主机部署规划
Zookeeper 注册中心安装
集群模式安装
Hadoop 的目录结构说明和命令帮助文档
集群动态增加和删除节点
一 Linux 环境的配置与安装 Hadoop
Hadoop 集群部署规划:
Hadoop 需要使用到 Linux 环境上的一些基本的配置需要,Hadoop 用户组和用户添加,免密登录操作,JDK 安装
1.1 VMWare 中 Ubuntu 网络配置
在使用 VMWare 安装 Ubuntu18.04-Linux 操作系统下时产生系统配置问题可以通过分享的博文进行配置,CSDN 跳转链接: VMWare中Ubuntu网络配置
其中包含了以下几个重要操作步骤:
1.2 Hadoop 用户组和用户添加
1.2.1 添加 Hadoop 用户组和用户
以 root 用户登录 Linux-Ubuntu 18.04 虚拟机,执行命令:
$ groupadd hadoop
$ useradd -r -g hadoop hadoop
复制代码
1.2.2 赋予 Hadoop 用户目录权限
将 /usr/local
目录权限赋予 Hadoop 用户, 命令如下:
$ chown -R hadoop.hadoop /usr/local/
$ chown -R hadoop.hadoop /tmp/
$ chown -R hadoop.hadoop /home/
复制代码
1.2.3 赋予 Hadoop 用户 sodu 权限
编辑/etc/sudoers
文件,在root ALL=(ALL:ALL) ALL
下添加hadoop ALL=(ALL:ALL) ALL
$ vi /etc/sudoers
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
root ALL=(ALL:ALL) ALL
hadoop ALL=(ALL:ALL) ALL
%admin ALL=(ALL) ALL
%sudo ALL=(ALL:ALL) ALL
复制代码
1.2.4 赋予 Hadoop 用户登录密码
$ passwd hadoop
Enter new UNIX password: 输入新密码
Retype new UNIX password: 确认新密码
passwd: password updated successfully
复制代码
1.3 JDK 安装
Linux 安装 JDK 可以参照分享的博文《Logstash-数据流引擎》-<第三节:Logstash 安装>--(第二小节: 3.2 Linux 安装 JDK 进行)安装配置到每一台主机上,CSDN 跳转链接: Logstash-数据流引擎
1.4 Hadoop 官网下载
官网下载:https://hadoop.apache.org/releases.html Binary download
例如:version3.3.0 https://mirrors.bfsu.edu.cn/apache/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz
$ wget https://mirrors.bfsu.edu.cn/apache/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz
复制代码
$ mv ./hadoop-3.3.0.tar.gz /usr/local
$ cd /usr/local
$ tar -zvxf hadoop-3.3.0.tar.gz
复制代码
1.5 配置 Hadoop 环境
$ vi /etc/profile
# 类同JDK配置添加
export JAVA_HOME=/usr/local/java/jdk1.8.0_152
export JRE_HOME=/usr/local/java/jdk1.8.0_152/jre
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export HADOOP_HOME=/usr/local/hadoop-3.3.0
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
复制代码
$ hadoop version
Hadoop 3.3.0
Source code repository https://gitbox.apache.org/repos/asf/hadoop.git -r aa96f1871bfd858f9bac59cf2a81ec470da649af
Compiled by brahma on 2020-07-06T18:44Z
Compiled with protoc 3.7.1
From source with checksum 5dc29b802d6ccd77b262ef9d04d19c4
This command was run using /usr/local/hadoop-3.3.0/share/hadoop/common/hadoop-common-3.3.0.jar
复制代码
从结果可以看出,Hadoop 版本为 Hadoop 3.3.0
,说明 Hadoop 环境安装并配置成功。
二 Zookeeper 注册中心
Zookeeper 注册中心章节主要介绍如下:
Zookeeper 介绍
Zookeeper 下载安装
Zookeeper 配置文件
启动 zookeeper 集群验证
Zookeeper 集群主机规划:
2.1 Zookeeper 介绍
ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 Hbase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
ZooKeeper 的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户,其中包含一个简单的原语集,提供 Java 和 C 的接口,ZooKeeper 代码版本中,提供了分布式独享锁、选举、队列的接口。其中分布锁和队列有 Java 和 C 两个版本,选举只有 Java 版本。
Zookeeper 负责服务的协调调度, 当客户端发起请求时, 返回正确的服务器地址。
2.2 Zookeeper 下载安装
Linux(执行主机-hadoop1) 下载 apache-zookeeper-3.5.9-bin 版本包, 移动到安装目录: /usr/local/
,解压并重命名为: zookeeper-3.5.9
:
$ wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.5.9/apache-zookeeper-3.5.9-bin.tar.gz
$ mv apache-zookeeper-3.5.9-bin.tar.gz /usr/local/
$ cd /usr/local/
$ tar -zxvf apache-zookeeper-3.5.9-bin.tar.gz
$ mv apache-zookeeper-3.5.9-bin zookeeper-3.5.9
复制代码
离线安装可以到指定官网下载版本包上传安装,官网地址: http://zookeeper.apache.org/releases.html
如图所示:
2.3 Zookeeper 配置文件
2.3.1 配置 Zookeeper 环境变量
配置 Zookeeper 环境变量,需要在 /etc/profile
配置文件中修改添加,具体配置如下:
export JAVA_HOME=/usr/local/java/jdk1.8.0_152
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export ZOOKEEPER_HOME=/usr/local/zookeeper-3.5.9
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin:$ZOOKEEPER_HOME
复制代码
修改完成后刷新环境变量配置文件:
其中已经包含安装了 JDK 配置,如无安装 JDK 可以查看 Hadoop 实战篇(1)中的安装
2.3.2 Zookeeper 配置文件
$ cd /usr/local/zookeeper-3.5.9
$ mkdir data
$ mkdir dataLog
复制代码
切换到新建的 data 目录下,创建 myid 文件,添加具体内容为数字 1,如下所示:
$ cd /usr/local/zookeeper-3.5.9/data
$ vi myid
# 添加内容数字1
1
$ cat myid
1
复制代码
复制配置文件 zoo_sample.cfg
并且修改名称为 zoo.cfg
:
$ cp zoo_sample.cfg zoo.cfg
复制代码
修改 zoo.cfg 文件,修改内容如下:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper-3.5.9/data
dataLogDir=/usr/local/zookeeper-3.5.9/dataLog
clientPort=2181
server.1=hadoop1:2888:3888
server.2=hadoop2:2888:3888
server.3=hadoop3:2888:3888
复制代码
2.3.3 将 Zookeeper 和系统环境变量拷贝到其他服务器
$ scp -r zookeeper-3.5.9/ root@hadoop2:/usr/local/
$ scp -r zookeeper-3.5.9/ root@hadoop3:/usr/local/
$ scp /etc/profile root@hadoop2:/etc/
$ scp /etc/profile root@hadoop3:/etc/
复制代码
并刷新环境变量配置文件:
2.4 启动 zookeeper 集群
在 hadoop1、hadoop2 和 hadoop3 三台服务器上分别启动 Zookeeper 服务器并查看 Zookeeper 运行状态
$ cd /usr/local/zookeeper-3.5.9/bin/
$ ./zkServer.sh start
$ ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.5.9/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
复制代码
说明 hadoop1 主机上 zookeeper 的运行状态是 follower
$ cd /usr/local/zookeeper-3.5.9/bin/
$ ./zkServer.sh start
$ ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.5.9/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader
复制代码
说明 hadoop2 主机上 zookeeper 的运行状态是 leader
$ cd /usr/local/zookeeper-3.5.9/bin/
$ ./zkServer.sh start
$ ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.5.9/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
复制代码
说明 hadoop3 主机上 zookeeper 的运行状态是 follower
三 集群模式安装
3.1 Hadoop 配置文件修改
3.1.1 修改配置 hadoop-env.sh
主机 hadoop1 配置 hadoop-env.sh
,在 hadoop-env.sh 文件中指定 JAVA_HOME 的安装目录: /usr/local/hadoop-3.3.0/etc/hadoop
,配置如下:
export JAVA_HOME=/usr/local/java/jdk1.8.0_152
# 配置允许使用 root 账户权限
export HDFS_DATANODE_USER=root
export HADOOP_SECURE_USER=root
export HDFS_NAMENODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
export HADOOP_SHELL_EXECNAME=root
export HDFS_JOURNALNODE_USER=root
export HDFS_ZKFC_USER=root
复制代码
3.1.2 修改配置 core-site.xml
主机 hadoop1 配置 core-site.xml
,在 core-site.xml
文件中指定 Zookeeper 的集群节点 /usr/local/hadoop-3.3.0/etc/hadoop
,配置如下:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns/</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop-3.3.0/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
</property>
</configuration>
复制代码
3.1.3 修改配置 hdfs-site.xml
主机 hadoop1 配置 hdfs-site.xml
,在 hdfs-site.xml
文件中指定 namenodes 节点, /usr/local/hadoop-3.3.0/etc/hadoop
,配置如下:
<configuration>
<property>
<name>dfs.nameservices</name>
<value>ns</value>
</property>
<property>
<name>dfs.ha.namenodes.ns</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址,nn1所在地址 -->
<property>
<name>dfs.namenode.rpc-address.ns.nn1</name>
<value>hadoop1:9000</value>
</property>
<!-- nn1的http通信地址,外部访问地址 -->
<property>
<name>dfs.namenode.http-address.ns.nn1</name>
<value>hadoop1:9870</value>
</property>
<!-- nn2的RPC通信地址,nn2所在地址 -->
<property>
<name>dfs.namenode.rpc-address.ns.nn2</name>
<value>hadoop2:9000</value>
</property>
<!-- nn2的http通信地址,外部访问地址 -->
<property>
<name>dfs.namenode.http-address.ns.nn2</name>
<value>hadoop2:9870</value>
</property>
<!-- 指定NameNode的元数据在JournalNode日志上的存放位置(一般和zookeeper部署在一起) -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop5:8485;hadoop6:8485;hadoop7:8485/ns</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/local/hadoop-3.3.0/data/journal</value>
</property>
<!--客户端通过代理访问namenode,访问文件系统,HDFS 客户端与Active 节点通信的Java 类,使用其确定Active 节点是否活跃 -->
<property>
<name>dfs.client.failover.proxy.provider.ns</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!--这是配置自动切换的方法,有多种使用方法,具体可以看官网,这里是远程登录杀死的方法 -->
<property>
<name>dfs.ha.fencing.methods</name>
<!-- 这个参数的值可以有多种,你也可以换成shell(/bin/true)试试,也是可以的,这个脚本do nothing 返回0 -->
<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>
<!-- 这个是开启自动故障转移,如果你没有自动故障转移,这个可以先不配 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
</configuration>
复制代码
3.1.4 修改配置 mapred-site.xml
主机 hadoop1 配置 mapred-site.xml
,在 mapred-site.xml
文件中指定 mapreduce 信息, /usr/local/hadoop-3.3.0/etc/hadoop
,配置如下:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</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>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop1:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop1:19888</value>
</property>
复制代码
3.1.5 修改配置 yarn-site.xml
主机 hadoop1 配置 yarn-site.xml
,在 yarn-site.xml
文件中指定 ResourceManaeger 节点, /usr/local/hadoop-3.3.0/etc/hadoop
,配置如下:
<configuration>
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hadoop3</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop4</value>
</property>
<property>
<name>yarn.resourcemanager.address.rm1</name>
<value>hadoop3:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address.rm1</name>
<value>hadoop3:8030</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>hadoop3:8088</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm1</name>
<value>hadoop3:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address.rm1</name>
<value>hadoop3:8033</value>
</property>
<property>
<name>yarn.resourcemanager.ha.admin.address.rm1</name>
<value>hadoop3:23142</value>
</property>
<property>
<name>yarn.resourcemanager.address.rm2</name>
<value>hadoop4:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address.rm2</name>
<value>hadoop4:8030</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>hadoop4:8088</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm2</name>
<value>hadoop4:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address.rm2</name>
<value>hadoop4:8033</value>
</property>
<property>
<name>yarn.resourcemanager.ha.admin.address.rm2</name>
<value>hadoop4:23142</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
</property>
<!-- 资源调度模型 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 开启mapreduce中间过程压缩 -->
<property>
<name>mapreduce.map.output.compress</name>
<value>true</value>
</property>
</configuration>
复制代码
3.1.6 修改 workers 文件
主机 hadoop1 配置 workers
,在 workers
文件中指定 DataNode 节点, /usr/local/hadoop-3.3.0/etc/hadoop
,配置如下:
3.2 Hadoop 节点拷贝配置
3.2.1 将配置好的 Hadoop 复制到其他节点
将在 hadoop1 上安装并配置好的 Hadoop 复制到其他服务器上,操作如下所示:
scp -r /usr/local/hadoop-3.3.0/ hadoop2:/usr/local/
scp -r /usr/local/hadoop-3.3.0/ hadoop3:/usr/local/
scp -r /usr/local/hadoop-3.3.0/ hadoop4:/usr/local/
scp -r /usr/local/hadoop-3.3.0/ hadoop5:/usr/local/
scp -r /usr/local/hadoop-3.3.0/ hadoop6:/usr/local/
scp -r /usr/local/hadoop-3.3.0/ hadoop7:/usr/local/
复制代码
3.2.2 复制 hadoop1 上的系统环境变量
将在 hadoop1 上安装并配置好的系统环境变量复制到其他服务器上,操作如下所示:
sudo scp /etc/profile hadoop2:/etc/
sudo scp /etc/profile hadoop3:/etc/
sudo scp /etc/profile hadoop4:/etc/
sudo scp /etc/profile hadoop5:/etc/
sudo scp /etc/profile hadoop6:/etc/
sudo scp /etc/profile hadoop7:/etc/
复制代码
使系统环境变量生效
source /etc/profile
hadoop version
复制代码
3.3 启动 hadoop 集群(1)
启动 hadoop 集群步骤分为:
启动并验证 journalnode 进程
格式化 HDFS
格式化 ZKFC
启动并验证 NameNode 进程
同步元数据信息
启动并验证备用 NameNode 进程
启动并验证 DataNode 进程
启动并验证 YARN
启动并验证 ZKFC
查看每台服务器上运行的运行信息
3.3.1 启动并验证 journalnode 进程
(1)启动 journalnode 进程,在 hadoop1 服务器上执行如下命令,启动 journalnode 进程:
hdfs --workers --daemon start journalnode
复制代码
(2)验证 journalnode 进程是否启动成功,分别在 hadoop5、hadoop6 和 hadoop7 三台服务器上分别执行 jps
命令,执行结果如下
root@hadoop5:~# jps
17322 Jps
14939 JournalNode
复制代码
root@hadoop6:~# jps
13577 JournalNode
15407 Jps
复制代码
root@hadoop7:~# jps
13412 JournalNode
15212 Jps
复制代码
3.3.2 格式化 HDFS
common.Storage: Storage directory /usr/local/hadoop-3.3.0/tmp/dfs/name has been successfully formatted.
复制代码
3.3.3 格式化 ZKFC
ha.ActiveStandbyElector: Successfuly created /hadoop-ha/ns in ZK.
复制代码
3.3.4 启动并验证 NameNode 进程
hdfs --daemon start namenode
复制代码
# jps
26721 NameNode
50317 Jps
复制代码
3.3.5 同步元数据信息
hdfs namenode -bootstrapStandby
复制代码
common.Storage: Storage directory /usr/local/hadoop-3.3.0/tmp/dfs/name has been successfully formatted.
复制代码
3.3.6 启动并验证备用 NameNode 进程
hdfs --daemon start namenode
复制代码
# jps
21482 NameNode
50317 Jps
复制代码
3.3.7 启动并验证 DataNode 进程
hdfs --workers --daemon start datanode
复制代码
hadoop5 服务器:
# jps
31713 Jps
16435 DataNode
14939 JournalNode
15406 NodeManager
复制代码
hadoop6 服务器:
# jps
13744 NodeManager
13577 JournalNode
29806 Jps
14526 DataNode
复制代码
hadoop7 服务器:
# jps
29188 Jps
14324 DataNode
13412 JournalNode
13580 NodeManager
复制代码
3.3.8 启动并验证 YARN
hadoop3 服务器:
# jps
21937 Jps
8070 ResourceManager
7430 QuorumPeerMain
复制代码
hadoop4 服务器:
# jps
6000 ResourceManager
20183 Jps
复制代码
3.3.9 启动并验证 ZKFC
hdfs --workers daemon start zkfc
复制代码
hadoop1 服务器:
# jps
26721 NameNode
14851 QuorumPeerMain
50563 Jps
27336 DFSZKFailoverController
复制代码
hadoop2 服务器:
# jps
21825 DFSZKFailoverController
39399 Jps
15832 QuorumPeerMain
21482 NameNode
复制代码
3.3.10 查看每台服务器上运行的运行信息
# jps
26721 NameNode
14851 QuorumPeerMain
50563 Jps
27336 DFSZKFailoverController
复制代码
# jps
21825 DFSZKFailoverController
39399 Jps
15832 QuorumPeerMain
21482 NameNode
复制代码
# jps
8070 ResourceManager
7430 QuorumPeerMain
21950 Jps
复制代码
# jps
6000 ResourceManager
20197 Jps
复制代码
# jps
16435 DataNode
31735 Jps
14939 JournalNode
15406 NodeManager
复制代码
# jps
13744 NodeManager
13577 JournalNode
29833 Jps
14526 DataNode
复制代码
# jps
14324 DataNode
13412 JournalNode
29211 Jps
13580 NodeManager
复制代码
3.4 启动 hadoop 集群(2)
格式化 HDFS
复制元数据信息
格式化 ZKFC
启动 HDFS
启动 YARN
查看每台服务器上运行的运行信息
3.4.1 格式化 HDFS
在 hadoop1 服务器上格式化 HDFS,如下所示:
3.4.2 复制元数据信息
将 hadoop1 服务器上的 /usr/local/hadoop-3.3.0/tmp
目录复制到 hadoop2 服务器上 /usr/local/hadoop-3.3.0
目录下,在 hadoop1 服务器上执行如下命令:
scp -r /usr/local/hadoop-3.3.0/tmp hadoop2:/usr/local/hadoop-3.3.0/
复制代码
3.4.3 格式化 ZKFC
在 hadoop1 服务器上格式化 ZKFC,如下所示:
3.4.4 启动 HDFS
在 hadoop1 服务器上通过启动脚本启动 HDFS,如下所示:
3.4.5 启动 YARN
在 hadoop1 服务器上通过启动脚本启动 YARN,如下所示:
3.4.6 查看每台服务器上运行的运行信息
# jps
26721 NameNode
14851 QuorumPeerMain
50563 Jps
27336 DFSZKFailoverController
复制代码
# jps
21825 DFSZKFailoverController
39399 Jps
15832 QuorumPeerMain
21482 NameNode
复制代码
# jps
8070 ResourceManager
7430 QuorumPeerMain
21950 Jps
复制代码
# jps
6000 ResourceManager
20197 Jps
复制代码
# jps
16435 DataNode
31735 Jps
14939 JournalNode
15406 NodeManager
复制代码
# jps
13744 NodeManager
13577 JournalNode
29833 Jps
14526 DataNode
复制代码
# jps
14324 DataNode
13412 JournalNode
29211 Jps
13580 NodeManager
复制代码
四 Hadoop 的目录结构说明和命令帮助文档
4.1 Hadoop 的目录结构说明
使用命令“ls”查看 Hadoop 3.3.0 下面的目录,如下所示:
-bash-4.1$ ls
bin etc include lib libexec LICENSE.txt NOTICE.txt README.txt sbin share
复制代码
下面就简单介绍下每个目录的作用:
bin:bin 目录是 Hadoop 最基本的管理脚本和使用脚本所在的目录,这些脚本是 sbin 目录下管理脚本的基础实现,用户可以直接使用这些脚本管理和使用 Hadoop
etc:Hadoop 配置文件所在的目录,包括:core-site.xml、hdfs-site.xml、mapred-site.xml 和 yarn-site.xml 等配置文件。
include:对外提供的编程库头文件(具体的动态库和静态库在 lib 目录中),这些文件都是用 C++定义的,通常用于 C++程序访问 HDFS 或者编写 MapReduce 程序。
lib:包含了 Hadoop 对外提供的编程动态库和静态库,与 include 目录中的头文件结合使用。
libexec:各个服务对应的 shell 配置文件所在的目录,可用于配置日志输出目录、启动参数(比如 JVM 参数)等基本信息。
sbin:Hadoop 管理脚本所在目录,主要包含 HDFS 和 YARN 中各类服务启动/关闭的脚本。
share:Hadoop 各个模块编译后的 Jar 包所在目录,这个目录中也包含了 Hadoop 文档。
4.2 Hadoop 命令帮助文档
hdfs dfs –ls [文件目录]
hdfs dfs -ls -R / //显式目录结构
eg: hdfs dfs –ls /user/wangkai.pt
复制代码
hdfs dfs –cat [file_path]
eg:hdfs dfs -cat /user/wangkai.pt/data.txt
复制代码
hdfs dfs –put [本地地址] [hadoop目录]
hdfs dfs –put /home/t/file.txt /user/t
复制代码
hdfs dfs –put [本地目录] [hadoop目录]
hdfs dfs –put /home/t/dir_name /user/t
(dir_name是文件夹名)
复制代码
hadoop dfs -get [文件目录] [本地目录]
hadoop dfs –get /user/t/ok.txt /home/t
复制代码
hdfs dfs –rm [文件地址]
hdfs dfs –rm /user/t/ok.txt
复制代码
hdfs dfs –rm [目录地址]
hdfs dfs –rmr /user/t
复制代码
hdfs dfs –mkdir /user/t
hdfs dfs -mkdir - p /user/centos/hadoop
复制代码
使用 touchz 命令:
hdfs dfs -touchz /user/new.txt
复制代码
使用 mv 命令:
hdfs dfs –mv /user/test.txt /user/ok.txt (将test.txt重命名为ok.txt)
复制代码
hdfs dfs –getmerge /user /home/t
复制代码
hadoop job –kill [job-id]
复制代码
五 集群动态增加和删除节点
5.1 动态添加 DataNode 和 NodeManager
5.1.1 查看集群的状态
# hdfs dfsadmin -report
Configured Capacity: 60028796928 (55.91 GB)
Present Capacity: 45182173184 (42.08 GB)
DFS Remaining: 45178265600 (42.08 GB)
DFS Used: 3907584 (3.73 MB)
DFS Used%: 0.01%
Replicated Blocks:
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
Missing blocks (with replication factor 1): 0
Low redundancy blocks with highest priority to recover: 0
Pending deletion blocks: 0
Erasure Coded Block Groups:
Low redundancy block groups: 0
Block groups with corrupt internal blocks: 0
Missing block groups: 0
Low redundancy blocks with highest priority to recover: 0
Pending deletion blocks: 0
-------------------------------------------------
Live datanodes (3):
Name: 192.168.254.134:9866 (hadoop5)
Hostname: hadoop5
Decommission Status : Normal
Configured Capacity: 20009598976 (18.64 GB)
DFS Used: 1302528 (1.24 MB)
Non DFS Used: 4072615936 (3.79 GB)
DFS Remaining: 15060099072 (14.03 GB)
DFS Used%: 0.01%
DFS Remaining%: 75.26%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Thu Nov 18 14:23:05 CST 2021
Last Block Report: Thu Nov 18 13:42:32 CST 2021
Num of Blocks: 16
Name: 192.168.254.135:9866 (hadoop6)
Hostname: hadoop6
Decommission Status : Normal
Configured Capacity: 20009598976 (18.64 GB)
DFS Used: 1302528 (1.24 MB)
Non DFS Used: 4082216960 (3.80 GB)
DFS Remaining: 15050498048 (14.02 GB)
DFS Used%: 0.01%
DFS Remaining%: 75.22%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Thu Nov 18 14:23:06 CST 2021
Last Block Report: Thu Nov 18 08:58:22 CST 2021
Num of Blocks: 16
Name: 192.168.254.136:9866 (hadoop7)
Hostname: hadoop7
Decommission Status : Normal
Configured Capacity: 20009598976 (18.64 GB)
DFS Used: 1302528 (1.24 MB)
Non DFS Used: 4065046528 (3.79 GB)
DFS Remaining: 15067668480 (14.03 GB)
DFS Used%: 0.01%
DFS Remaining%: 75.30%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Thu Nov 18 14:23:05 CST 2021
Last Block Report: Thu Nov 18 14:09:59 CST 2021
Num of Blocks: 16
复制代码
可以看到,添加 DataNode 之前,DataNode 总共有 3 个,分别在 hadoop5、hadoop6 和 hadoop7 服务器上
# yarn node -list
Total Nodes:3
Node-Id Node-State Node-Http-Address Number-of-Running-Containers
hadoop5:34211 RUNNING hadoop5:8042 0
hadoop7:43419 RUNNING hadoop7:8042 0
hadoop6:36501 RUNNING hadoop6:8042 0
复制代码
可以看到,添加 NodeManager 之前,NodeManger 进程运行在 hadoop5、hadoop6 和 hadoop7 服务器上
5.1.2 动态添加 DataNode 和 NodeManager
# vi /usr/local/hadoop-3.3.0/etc/hadoop/workers
hadoop4
hadoop5
hadoop6
hadoop7
复制代码
# scp /usr/local/hadoop-3.3.0/etc/hadoop/workers hadoop2:/usr/local/hadoop-3.3.0/etc/hadoop/
# scp /usr/local/hadoop-3.3.0/etc/hadoop/workers hadoop3:/usr/local/hadoop-3.3.0/etc/hadoop/
# scp /usr/local/hadoop-3.3.0/etc/hadoop/workers hadoop4:/usr/local/hadoop-3.3.0/etc/hadoop/
# scp /usr/local/hadoop-3.3.0/etc/hadoop/workers hadoop5:/usr/local/hadoop-3.3.0/etc/hadoop/
# scp /usr/local/hadoop-3.3.0/etc/hadoop/workers hadoop6:/usr/local/hadoop-3.3.0/etc/hadoop/
# scp /usr/local/hadoop-3.3.0/etc/hadoop/workers hadoop7:/usr/local/hadoop-3.3.0/etc/hadoop/
复制代码
# hdfs --daemon start datanode
# yarn --daemin start nodemanager
复制代码
# hdfs dfsadmin -refreshNodes
# start-balancer.sh
复制代码
# jps
20768 NodeManager
6000 ResourceManager
20465 DataNode
20910 Jps
复制代码
5.1.3 再次查看集群的状态
# hdfs dfsadmin -report
Configured Capacity: 80038395904 (74.54 GB)
Present Capacity: 60257288192 (56.12 GB)
DFS Remaining: 60253356032 (56.12 GB)
DFS Used: 3932160 (3.75 MB)
DFS Used%: 0.01%
Replicated Blocks:
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
Missing blocks (with replication factor 1): 0
Low redundancy blocks with highest priority to recover: 0
Pending deletion blocks: 0
Erasure Coded Block Groups:
Low redundancy block groups: 0
Block groups with corrupt internal blocks: 0
Missing block groups: 0
Low redundancy blocks with highest priority to recover: 0
Pending deletion blocks: 0
-------------------------------------------------
Live datanodes (4):
Name: 192.168.254.133:9866 (hadoop4)
Hostname: hadoop4
Decommission Status : Normal
Configured Capacity: 20009598976 (18.64 GB)
DFS Used: 24576 (24 KB)
Non DFS Used: 4058525696 (3.78 GB)
DFS Remaining: 15075467264 (14.04 GB)
DFS Used%: 0.00%
DFS Remaining%: 75.34%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Thu Nov 18 15:12:30 CST 2021
Last Block Report: Thu Nov 18 15:10:49 CST 2021
Num of Blocks: 0
Name: 192.168.254.134:9866 (hadoop5)
Hostname: hadoop5
Decommission Status : Normal
Configured Capacity: 20009598976 (18.64 GB)
DFS Used: 1302528 (1.24 MB)
Non DFS Used: 4072738816 (3.79 GB)
DFS Remaining: 15059976192 (14.03 GB)
DFS Used%: 0.01%
DFS Remaining%: 75.26%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Thu Nov 18 15:12:33 CST 2021
Last Block Report: Thu Nov 18 13:42:32 CST 2021
Num of Blocks: 16
Name: 192.168.254.135:9866 (hadoop6)
Hostname: hadoop6
Decommission Status : Normal
Configured Capacity: 20009598976 (18.64 GB)
DFS Used: 1302528 (1.24 MB)
Non DFS Used: 4082335744 (3.80 GB)
DFS Remaining: 15050379264 (14.02 GB)
DFS Used%: 0.01%
DFS Remaining%: 75.22%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Thu Nov 18 15:12:31 CST 2021
Last Block Report: Thu Nov 18 14:58:22 CST 2021
Num of Blocks: 16
Name: 192.168.254.136:9866 (hadoop7)
Hostname: hadoop7
Decommission Status : Normal
Configured Capacity: 20009598976 (18.64 GB)
DFS Used: 1302528 (1.24 MB)
Non DFS Used: 4065181696 (3.79 GB)
DFS Remaining: 15067533312 (14.03 GB)
DFS Used%: 0.01%
DFS Remaining%: 75.30%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Thu Nov 18 15:12:33 CST 2021
Last Block Report: Thu Nov 18 14:09:59 CST 2021
Num of Blocks: 16
复制代码
可以看到,添加 DataNode 之前,DataNode 总共有 3 个,分别在 hadoop4、hadoop5、hadoop6 和 hadoop7 服务器上
# yarn node -list
Total Nodes:4
Node-Id Node-State Node-Http-Address Number-of-Running-Containers
hadoop5:34211 RUNNING hadoop5:8042 0
hadoop4:36431 RUNNING hadoop4:8042 0
hadoop7:43419 RUNNING hadoop7:8042 0
hadoop6:36501 RUNNING hadoop6:8042 0
复制代码
5.2 动态删除 DataNode 和 NodeManager
5.2.1 删除 DataNode 和 NodeManager
# hdfs --daemon stop datanode
# yarn --daemon stop nodemanager
复制代码
# vi /usr/local/hadoop-3.3.0/etc/hadoop/workers
hadoop5
hadoop6
hadoop7
复制代码
# hdfs dfsadmin -refreshNodes # start-balancer.sh
复制代码
参考文档:
[1] 逸非羽.CSDN: https://www.cnblogs.com/yifeiyu/p/11044290.html ,2019-06-18.
[2] Hadoop 官网: https://hadoop.apache.org/
[3] 冰河.海量数据处理与大数据技术实站 [M].第 1 版.北京: 北京大学出版社,2020-09
评论