写点什么

Hadoop 实战篇 - 集群版(2)

作者:进击的梦清
  • 2021 年 11 月 18 日
  • 本文字数:15093 字

    阅读完需:约 50 分钟

Hadoop实战篇-集群版(2)

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网络配置


其中包含了以下几个重要操作步骤:


  • Ubuntu 系统信息与修改主机名

  • Windows 设置 VMWare 的 NAT 网络

  • Linux 网关设置与配置静态 IP

  • Linux 修改 hosts 文件

  • Linux 免密码登录

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_resetDefaults mail_badpassDefaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"root ALL=(ALL:ALL) ALLhadoop 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


  • 使用 wget 命名下载(下载目录是当前目录):


例如: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
复制代码


  • 解压、移动到你想要放置的文件夹: /usr/local


$ mv ./hadoop-3.3.0.tar.gz /usr/local
$ cd /usr/local
$ tar -zvxf hadoop-3.3.0.tar.gz
复制代码

1.5 配置 Hadoop 环境

  • 修改配置文件/etc/profile:


$ vi /etc/profile
# 类同JDK配置添加export JAVA_HOME=/usr/local/java/jdk1.8.0_152export JRE_HOME=/usr/local/java/jdk1.8.0_152/jreexport CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/libexport HADOOP_HOME=/usr/local/hadoop-3.3.0export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
复制代码


  • 使配置文件生效


$ source /etc/profile 
复制代码


  • 查看 Hadoop 配置是否成功


$ hadoop version
Hadoop 3.3.0Source code repository https://gitbox.apache.org/repos/asf/hadoop.git -r aa96f1871bfd858f9bac59cf2a81ec470da649afCompiled by brahma on 2020-07-06T18:44ZCompiled with protoc 3.7.1From source with checksum 5dc29b802d6ccd77b262ef9d04d19c4This 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 集群主机规划:


  • hadoop1

  • hadoop2

  • hadoop3

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_152export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/libexport ZOOKEEPER_HOME=/usr/local/zookeeper-3.5.9export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin:$ZOOKEEPER_HOME
复制代码


修改完成后刷新环境变量配置文件:


$ source /etc/profile
复制代码


其中已经包含安装了 JDK 配置,如无安装 JDK 可以查看 Hadoop 实战篇(1)中的安装

2.3.2 Zookeeper 配置文件
  • 在 zookeeper 根目录/usr/local/zookeeper-3.5.9下创建文件夹:datadataLog


$ cd /usr/local/zookeeper-3.5.9$ mkdir data$ mkdir dataLog
复制代码


切换到新建的 data 目录下,创建 myid 文件,添加具体内容为数字 1,如下所示:


$ cd /usr/local/zookeeper-3.5.9/data$ vi myid# 添加内容数字11
$ cat myid1
复制代码


  • 进入 conf 目录中修改配置文件


复制配置文件 zoo_sample.cfg 并且修改名称为 zoo.cfg:


$ cp zoo_sample.cfg zoo.cfg
复制代码


修改 zoo.cfg 文件,修改内容如下:


tickTime=2000initLimit=10syncLimit=5dataDir=/usr/local/zookeeper-3.5.9/datadataLogDir=/usr/local/zookeeper-3.5.9/dataLogclientPort=2181server.1=hadoop1:2888:3888server.2=hadoop2:2888:3888server.3=hadoop3:2888:3888
复制代码
2.3.3 将 Zookeeper 和系统环境变量拷贝到其他服务器
  • 根据对服务器的规划,将 Zookeeper 和配置文件 /etc/profile 拷贝到 hadoop2 和 hadoop3 主机上:


$ 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/
复制代码


  • 登陆到 hadoop2 和 hadoop3 分别修改 hadoop2 主机和 hadoop3 主机上的配置文件内容: /usr/local/zookeeper-3.5.9/data/myid为 2 和 3


并刷新环境变量配置文件:


$ source /etc/profile
复制代码

2.4 启动 zookeeper 集群

在 hadoop1、hadoop2 和 hadoop3 三台服务器上分别启动 Zookeeper 服务器并查看 Zookeeper 运行状态


  • hadoop1 主机:


$ cd /usr/local/zookeeper-3.5.9/bin/$ ./zkServer.sh start$ ./zkServer.sh status
ZooKeeper JMX enabled by defaultUsing config: /usr/local/zookeeper-3.5.9/bin/../conf/zoo.cfgClient port found: 2181. Client address: localhost. Client SSL: false.Mode: follower
复制代码


说明 hadoop1 主机上 zookeeper 的运行状态是 follower


  • hadoop2 主机:


$ cd /usr/local/zookeeper-3.5.9/bin/$ ./zkServer.sh start$ ./zkServer.sh status
ZooKeeper JMX enabled by defaultUsing config: /usr/local/zookeeper-3.5.9/bin/../conf/zoo.cfgClient port found: 2181. Client address: localhost. Client SSL: false.Mode: leader
复制代码


说明 hadoop2 主机上 zookeeper 的运行状态是 leader


  • hadoop3 主机:


$ cd /usr/local/zookeeper-3.5.9/bin/$ ./zkServer.sh start$ ./zkServer.sh status
ZooKeeper JMX enabled by defaultUsing config: /usr/local/zookeeper-3.5.9/bin/../conf/zoo.cfgClient 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=rootexport HADOOP_SHELL_EXECNAME=rootexport HDFS_JOURNALNODE_USER=rootexport 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,配置如下:


hadoop5hadoop6hadoop7
复制代码

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/profilehadoop 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 命令,执行结果如下


  • hadoop5 服务器:


root@hadoop5:~# jps17322 Jps14939 JournalNode
复制代码


  • hadoop6 服务器:


root@hadoop6:~# jps13577 JournalNode15407 Jps
复制代码


  • hadoop7 服务器:


root@hadoop7:~# jps13412 JournalNode15212 Jps
复制代码
3.3.2 格式化 HDFS
  • 在 hadoop1 服务器上执行如下命令,格式化 HDFS:


hdfs namenode -format
复制代码


  • 执行后,命令行会输出成功信息:


common.Storage: Storage directory /usr/local/hadoop-3.3.0/tmp/dfs/name has been successfully formatted.
复制代码
3.3.3 格式化 ZKFC
  • 在 hadoop1 服务器上执行如下命令,格式化 ZKFC :


hdfs zkfc -formatZK
复制代码


  • 执行后,命令行会输出成功信息:


ha.ActiveStandbyElector: Successfuly created /hadoop-ha/ns in ZK.
复制代码
3.3.4 启动并验证 NameNode 进程
  • 启动 NameNode 进程,在 hadoop1 服务器上执行


hdfs --daemon start namenode
复制代码


  • 验证 NameNode 进程启动成功,


# jps26721 NameNode50317 Jps
复制代码
3.3.5 同步元数据信息
  • 在 hadoop2 服务器上执行如下命令,进行元数据信息的同步操作:


hdfs namenode -bootstrapStandby
复制代码


  • 执行后,命令行成功信息:


common.Storage: Storage directory /usr/local/hadoop-3.3.0/tmp/dfs/name has been successfully formatted.
复制代码
3.3.6 启动并验证备用 NameNode 进程
  • 在 hadoop2 服务器上执行如下命令,启动备用 NameNode 进程:


hdfs --daemon start namenode
复制代码


  • 验证备用的 NameNode 进程


# jps21482 NameNode50317 Jps
复制代码
3.3.7 启动并验证 DataNode 进程
  • 在 hadoop1 服务器上执行如下命令,启动 DataNode 进程


hdfs --workers --daemon start datanode
复制代码


  • 验证 DataNode 进程在 hadoop5、hadoop6 和 hadoop7 服务器上执行:


hadoop5 服务器:


# jps31713 Jps16435 DataNode14939 JournalNode15406 NodeManager
复制代码


hadoop6 服务器:


# jps13744 NodeManager13577 JournalNode29806 Jps14526 DataNode
复制代码


hadoop7 服务器:


# jps29188 Jps14324 DataNode13412 JournalNode13580 NodeManager
复制代码
3.3.8 启动并验证 YARN
  • 在 hadoop1 服务器上执行如下命令,启动 YARN


start-yarn.sh
复制代码


  • 在 hadoop3、hadoop4 服务器上执行 jps 命令,验证 YARN 启动成功


hadoop3 服务器:


# jps21937 Jps8070 ResourceManager7430 QuorumPeerMain
复制代码


hadoop4 服务器:


# jps6000 ResourceManager20183 Jps
复制代码
3.3.9 启动并验证 ZKFC
  • 在 hadoop1 服务器上执行如下命令,启动 ZKFC:


hdfs --workers daemon start zkfc
复制代码


  • 在 hadoop1 和 hadoop2 上执行 jps 命令,验证 DFSZKFailoveController 进程启动成功


hadoop1 服务器:


# jps26721 NameNode14851 QuorumPeerMain50563 Jps27336 DFSZKFailoverController
复制代码


hadoop2 服务器:


# jps21825 DFSZKFailoverController39399 Jps15832 QuorumPeerMain21482 NameNode
复制代码
3.3.10 查看每台服务器上运行的运行信息
  • hadoop1 服务器:


# jps26721 NameNode14851 QuorumPeerMain50563 Jps27336 DFSZKFailoverController
复制代码


  • hadoop2 服务器:


# jps21825 DFSZKFailoverController39399 Jps15832 QuorumPeerMain21482 NameNode
复制代码


  • hadoop3 服务器:


# jps8070 ResourceManager7430 QuorumPeerMain21950 Jps
复制代码


  • hadoop4 服务器:


# jps6000 ResourceManager20197 Jps
复制代码


  • hadoop5 服务器:


# jps16435 DataNode31735 Jps14939 JournalNode15406 NodeManager
复制代码


  • hadoop6 服务器:


# jps13744 NodeManager13577 JournalNode29833 Jps14526 DataNode
复制代码


  • hadoop7 服务器:


# jps14324 DataNode13412 JournalNode29211 Jps13580 NodeManager
复制代码

3.4 启动 hadoop 集群(2)

  • 格式化 HDFS

  • 复制元数据信息

  • 格式化 ZKFC

  • 启动 HDFS

  • 启动 YARN

  • 查看每台服务器上运行的运行信息

3.4.1 格式化 HDFS

在 hadoop1 服务器上格式化 HDFS,如下所示:


hdfs namenode -format
复制代码
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,如下所示:


hdfs zkfc -formatZK
复制代码
3.4.4 启动 HDFS

在 hadoop1 服务器上通过启动脚本启动 HDFS,如下所示:


start-dfs.sh
复制代码
3.4.5 启动 YARN

在 hadoop1 服务器上通过启动脚本启动 YARN,如下所示:


start-yarn.sh
复制代码
3.4.6 查看每台服务器上运行的运行信息
  • hadoop1 服务器:


# jps26721 NameNode14851 QuorumPeerMain50563 Jps27336 DFSZKFailoverController
复制代码


  • hadoop2 服务器:


# jps21825 DFSZKFailoverController39399 Jps15832 QuorumPeerMain21482 NameNode
复制代码


  • hadoop3 服务器:


# jps8070 ResourceManager7430 QuorumPeerMain21950 Jps
复制代码


  • hadoop4 服务器:


# jps6000 ResourceManager20197 Jps
复制代码


  • hadoop5 服务器:


# jps16435 DataNode31735 Jps14939 JournalNode15406 NodeManager
复制代码


  • hadoop6 服务器:


# jps13744 NodeManager13577 JournalNode29833 Jps14526 DataNode
复制代码


  • hadoop7 服务器:


# jps14324 DataNode13412 JournalNode29211 Jps13580 NodeManager
复制代码

四 Hadoop 的目录结构说明和命令帮助文档

4.1 Hadoop 的目录结构说明

使用命令“ls”查看 Hadoop 3.3.0 下面的目录,如下所示:


-bash-4.1$ lsbin  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 命令帮助文档

  • 1、查看指定目录下内容


hdfs dfs –ls [文件目录]hdfs dfs -ls -R   /                   //显式目录结构eg: hdfs dfs –ls /user/wangkai.pt
复制代码


  • 2、打开某个已存在文件


hdfs dfs –cat [file_path]eg:hdfs dfs -cat /user/wangkai.pt/data.txt
复制代码


  • 3、将本地文件存储至 hadoop


hdfs dfs –put [本地地址] [hadoop目录]hdfs dfs –put /home/t/file.txt  /user/t  
复制代码


  • 4、将本地文件夹存储至 hadoop


hdfs dfs –put [本地目录] [hadoop目录] hdfs dfs –put /home/t/dir_name /user/t(dir_name是文件夹名)
复制代码


  • 5、将 hadoop 上某个文件 down 至本地已有目录下


hadoop dfs -get [文件目录] [本地目录]hadoop dfs –get /user/t/ok.txt /home/t
复制代码


  • 6、删除 hadoop 上指定文件


hdfs  dfs –rm [文件地址]hdfs dfs –rm /user/t/ok.txt
复制代码


  • 7、删除 hadoop 上指定文件夹(包含子目录等)


hdfs dfs –rm [目录地址]hdfs dfs –rmr /user/t
复制代码


  • 8、在 hadoop 指定目录内创建新目录


hdfs dfs –mkdir /user/thdfs  dfs -mkdir - p /user/centos/hadoop 
复制代码


  • 9、在 hadoop 指定目录下新建一个空文件


使用 touchz 命令:


hdfs dfs  -touchz  /user/new.txt
复制代码


  • 10、将 hadoop 上某个文件重命名


使用 mv 命令:


hdfs dfs –mv  /user/test.txt  /user/ok.txt   (将test.txt重命名为ok.txt)
复制代码


  • 11、将 hadoop 指定目录下所有内容保存为一个文件,同时 down 至本地


hdfs dfs –getmerge /user /home/t
复制代码


  • 12、将正在运行的 hadoop 作业 kill 掉


hadoop job –kill  [job-id]
复制代码


  • 13.查看帮助


hdfs dfs -help        
复制代码

五 集群动态增加和删除节点

5.1 动态添加 DataNode 和 NodeManager

5.1.1 查看集群的状态
  • 在 hadoop1 服务器上查看 HDFS 各节点状态,如下所示:


# hdfs dfsadmin -reportConfigured 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: 0Erasure 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: hadoop5Decommission Status : NormalConfigured 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: 1Last contact: Thu Nov 18 14:23:05 CST 2021Last Block Report: Thu Nov 18 13:42:32 CST 2021Num of Blocks: 16
Name: 192.168.254.135:9866 (hadoop6)Hostname: hadoop6Decommission Status : NormalConfigured 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: 1Last contact: Thu Nov 18 14:23:06 CST 2021Last Block Report: Thu Nov 18 08:58:22 CST 2021Num of Blocks: 16
Name: 192.168.254.136:9866 (hadoop7)Hostname: hadoop7Decommission Status : NormalConfigured 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: 1Last contact: Thu Nov 18 14:23:05 CST 2021Last Block Report: Thu Nov 18 14:09:59 CST 2021Num of Blocks: 16
复制代码


可以看到,添加 DataNode 之前,DataNode 总共有 3 个,分别在 hadoop5、hadoop6 和 hadoop7 服务器上


  • 查看 YARN 各节点的状态


# yarn node -listTotal 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
  • 在 hadoop 集群所有节点中的 workers 文件中新增 hadoop4 节点,当前修改主机 hadoop1:


# vi /usr/local/hadoop-3.3.0/etc/hadoop/workershadoop4hadoop5hadoop6hadoop7
复制代码


  • 将修改的文件拷贝到其他节点上


# 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/
复制代码


  • 启动 hadoop4 服务器上 DataNode 和 NodeManager,如下所示:


# hdfs --daemon start datanode# yarn --daemin start nodemanager
复制代码


  • 刷新节点,在 hadoop1 服务器上执行如下命令,刷新 Hadoop 集群节点:


# hdfs dfsadmin -refreshNodes# start-balancer.sh
复制代码


  • 查看 hadoop4 节点上的运行进程:


# jps20768 NodeManager6000 ResourceManager20465 DataNode20910 Jps
复制代码
5.1.3 再次查看集群的状态
  • 在 hadoop1 服务器上查看 HDFS 各节点状态,如下所示:


# hdfs dfsadmin -reportConfigured 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: 0Erasure 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: hadoop4Decommission Status : NormalConfigured 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: 1Last contact: Thu Nov 18 15:12:30 CST 2021Last Block Report: Thu Nov 18 15:10:49 CST 2021Num of Blocks: 0
Name: 192.168.254.134:9866 (hadoop5)Hostname: hadoop5Decommission Status : NormalConfigured 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: 1Last contact: Thu Nov 18 15:12:33 CST 2021Last Block Report: Thu Nov 18 13:42:32 CST 2021Num of Blocks: 16
Name: 192.168.254.135:9866 (hadoop6)Hostname: hadoop6Decommission Status : NormalConfigured 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: 1Last contact: Thu Nov 18 15:12:31 CST 2021Last Block Report: Thu Nov 18 14:58:22 CST 2021Num of Blocks: 16
Name: 192.168.254.136:9866 (hadoop7)Hostname: hadoop7Decommission Status : NormalConfigured 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: 1Last contact: Thu Nov 18 15:12:33 CST 2021Last Block Report: Thu Nov 18 14:09:59 CST 2021Num of Blocks: 16
复制代码


可以看到,添加 DataNode 之前,DataNode 总共有 3 个,分别在 hadoop4、hadoop5、hadoop6 和 hadoop7 服务器上


  • 查看 YARN 各节点的状态


# yarn node -listTotal 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
  • 停止 hadoop4 上面的 DataNode 和 NodeManager 进程,在 hadoop4 上执行


# hdfs --daemon stop datanode # yarn --daemon stop nodemanager 
复制代码


  • 删除 hadoop 集群每台主机的 workers 文件中的 hadoop4 配置信息


# vi /usr/local/hadoop-3.3.0/etc/hadoop/workershadoop5hadoop6hadoop7 
复制代码


  • 刷新节点,在 hadoop1 服务器上执行如下命令,刷新 hadoop 集群节点:


# 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

发布于: 2021 年 11 月 18 日阅读数: 6
用户头像

当你知道的越多,不知道的就越多! 2021.04.20 加入

在互联网浪潮下的程序人生!

评论

发布
暂无评论
Hadoop实战篇-集群版(2)