专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

学习实践-Linux Hadoop集群配置与搭建

ins518 2024-10-23 13:04:38 技术文章 15 ℃ 0 评论

Hadoop可以说是现在最流行,最普遍的分布式系统框架。许多公司都使用Hadoop处理和分析公司内大量的业务和日志数据。同时大数据本身亦是一个很火并且在可预见范围内也会很火的技术。

本文主要是通过实践搭建Hadoop集群,让大家从实际操作中加深对Hadoop原理,框架和配置的理解。


环境准备:

  1. JAVA:版本 jdk1.8.0_121

    下载地址:http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk8-downloads-2133151-zhs.html

  2. Hadoop:版本 hadoop-2.7.4

    下载地址:http://hadoop.apache.org/releases.html

  3. Zookeeper:版本 zookeeper-3.4.10

    下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/

  4. 操作系统:CentOS release 6.7

    https://www.centos.org/download/

注:这里的环境是本人这次实践的环境,java建议使用1.8以上,Hadoop和zookeeper版本和这里的版本差别不是太大应该是没有问题,操作系统是linux,其他Linux版本应该也没有问题。

Hadoop 组织框架

Hadoop主要包括两部分,一部分是HDFS(Hadoop Distributed File System),主要负责分布式存储和计算;另一部分是YARN(Yet Another Resource Negotiator, 从Hadoop2.0开始引入),主要负责集群的资源管理和调度。

HDFS架构

1. Active Name Node

  • 主Master,整个Hadoop集群只能有一个

  • 管理HDFS文件系统的命名空间

  • 维护元数据信息

  • 管理副本的配置和信息(默认三个副本)

  • 处理客户端读写请求

2. Standby Name Node

  • Active Name Node的热备节点

  • Active Name Node故障时可快速切换成新的Active Name Node

  • 周期性同步edits编辑日志,定期合并fsimage与edits到本地磁盘

3. Journal Node

  • 可以被Active Name Node和StandBy Name Node同时访问,用以支持Active Name Node高可用

  • Active Name Node在文件系统被修改时,会向Journal Node写入操作日志(edits)

  • Standby Name Node同步Journal Node edits日志,使集群中的更新操作可以被共享和同步。

3. Data Node

  • Slave 工作节点,集群一般会启动多个

  • 负责存储数据块和数据块校验

  • 执行客户端的读写请求

  • 通过心跳机制定期向NameNode汇报运行状态和本地所有块的列表信息

  • 在集群启动时DataNode项NameNode提供存储Block块的列表信息

4. Block数据块

  • HDSF固定的最小的存储单元(默认128M,可配置修改)

  • 写入到HDFS的文件会被切分成Block数据块(若文件大小小于数据块大小,则不会占用整个数据块)

  • 默认配置下,每个block有三个副本

5. Client

  • 与Name Node交互获取文件的元数据信息

  • 与Data Node,读取或者写入数据

  • 通过客户端可以管理HDFS

YARN架构

1. Resource Manager

  • 整个集群只有一个Master。Slave可以有多个,支持高可用

  • 处理客户端Client请求

  • 启动/管理/监控ApplicationMaster

  • 监控NodeManager

  • 资源的分配和调度

2. Node Manager

  • 每个节点只有一个,一般与Data Node部署在同一台机器上且一一对应

  • 定时向Resource Manager汇报本机资源的使用状况

  • 处理来自Resource Manager的作业请求,为作业分配Container

  • 处理来自Application Master的请求,启动和停止Container

3. Application Master

  • 每个任务只有一个,负责任务的管理,资源的申请和任务调度

  • 与Resource Manager协商,为任务申请资源

  • 与Node Manager通信,启动/停止任务

  • 监控任务的运行状态和失败处理

4. Container

  • 任务运行环境的抽象,只有在分配任务时才会抽象生成一个Container

  • 负责任务运行资源和环境的维护(节点,内存,CPU)

  • 负责任务的启动

虽然在架构图中没有画出,但Hadoop高可用都是基于Zookeeper来实现的。如NameNode高可用,Block高可用,ResourceManager高可用等。

集群配置

Hadoop集群部署概图

1. 修改各个机器的hostname

为了方便,重命名各机器为图中各个hostname,后面配置就可以使用hostname而不是IP地址。

使用root用户在各个机器上执行(各个机器序号需要改变)

hostname node01
#修改完所有机器的hostname后,将IP和hostname的对应关系写到所有机器的/etc/hosts文件中

2. 在各个机器上添加hadoop用户,并修改密码

后面集群的配置和启动都用hadoop来操作

useradd hadoop #添加hadoop用户
passwd hadoop #修改hadoop用户密码

3. 配置各个机器间相互免密登陆

su hadoop #切换到hadoop用户,后面的命令,没有特殊说明,都是使用hadoop用户操作
ssh-keygen -t -rsa #生成密钥,一直按回车即可
ssh-copy-id -i node01 #将生成的公钥copy到所有集群上01-05,包括生成密钥的本机。即node01 拷贝到node01-05, node02 拷贝到node01-node05 以此类推

4. 创建目录用于保存搭建集群相关的代码和工具

cd ~ #到hadoop home目录
mkdir apps # 创建apps目录,用于存放于搭建集群相关的代码和工具。集群所有机器都需要创建该目录

5. 安装JDK

#将下载好的JDK copy到刚创建的apps目录下
tar -zxvf jdk-8u121-linux-x64.tar.gz #解压jdk
su root #下面几步的操作需要root权限
ln -s /home/hadoop/app/jdk1.8.0_121 /usr/local/jdk #创建jdk的软连接,所有机器都是相同的目录,为了操作和配置方便
vim /etc/profile # 打开该文件并在文末添加:export JAVA_HOME=/usr/local/jdk ,然后保存文件
source /etc/profile #重新加载环境配置文件
su hadoop #切换回hadoop
scp -r /home/hadoop/app/jdk1.8.0_121 hadoop@node02:/home/hadoop/app #将jdk拷贝到集群中其他机器上,然后重复上面的安装JDK步骤
java -version #在集群中任一台机器上执行,有如下信息,说明JDK安装成功

6. 配置zookeeper

#将下载好的zookeeper拷贝到node01的/home/hadoop/apps目录下
tar -zxvf zookeeper-3.4.10.tar.gz #解压压缩包
su root #创建软连接需要root权限
ln -s /home/hadoop/apps/zookeeper-3.4.10 /usr/local/zookeeper
chown -R hadoop:hadoop /usr/local/zookeeper #修改属组
#修改配置文件
su hadoop
cd /usr/local/zookeeper
cp /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg
# 修改下图中红框的内容

zoo.cfg

scp -r /usr/local/zookeeper hadoop@node02:/home/hadoop/app #将zookeeper拷贝到node02和node03机器上,并创建软连接和修改属组
#在node01,node02,node03上运行下面命令
/usr/local/zookeeper/bin/zkServer.sh start #启动zookeeper
/usr/local/zookeeper/bin/zkServer.sh status #查看zookeeper运行状态
# 有如下图输出,说明zookeeper配置和运行成功。其中Mode可以为leader(只会有一个),follower(有两个)

7. 配置Hadoop

#将hadoop安装包拷贝到node01的/home/hadoop/apps目录下
tar -zxvf hadoop-2.7.4.tar.gz #解压下载copy过来的hadoop压缩包
su root
ln -s /home/hadoop/apps/hadoop-2.7.4 /usr/local/hadoop #创建软连接
chown -R hadoop:hadoop /usr/local/hadoop #修改软连接属组为hadoop
su hadoop
cd /usr/local/hadoop/etc/hadoop
#修改hadoop-env.sh
export JAVA_HOME=/usr/local/jdk #找到export JAVA_HOME并修改
#修改core-site.xml
#找到configuration,并按下图修改

core-site.xml配置

#修改hdfs-site.xml
#找到configuration,并按下图修改

hdfs-site.xml

#修改yarn-site.xml
#找到configuration,并按下图修改

yarn-site.xml

#在/usr/local/hadoop目录下创建hdpdata文件夹
cd /usr/local/hadoop
mkdir hdpdata
#修改slave文件,设置datanode和nodemanager的启动节点
vim /usr/local/hadoop/etc/hadoop/slaves 
#添加以下内容
node03
node04
node05
#修改/etc/profile,配置环境变量
su root 
vim /etc/profile
#添加hadoop相关环境变量,配置完后/etc/profile文件应该包含以下信息
source /etc/profile

#拷贝hadoop目录到其他(node02 - node05)机器上
scp -r /usr/local/hadoop hadoop@node02:/home/hadoop/apps#在各个机器上创建hadoop的软连接并修改属组#修改各个机器上的/etc/profile

至此,hadoop集群的配置完成,下一步我们来启动Hadoop集群

集群启动

以下操作都使用hadoop用户。

1. 启动Journal Node

参照部署图,Journal Node部署在node03,node04,node05上

分别去这几台机器上执行:

/usr/local/hadoop/sbin/hadoop-daemon.sh start journalnode
jps #运行该命令后,如果输出中有JournalNode则表明启动成功

2. 格式化HDFS

我们的namenode avtive部署在node01上,去node01上格式化HDFS

hdfs namenode -format

格式化成功后会在/usr/local/hadoop/hdpdata(在core-site.xml中配置,并在前面已经提前创建)中新增一个dfs目录。将该目录copy到node02上,因为我们的namenode standby部署在node02上

scp -r /usr/local/hadoop/hdpdata/dfs hadoop@node02:/usr/local/hadoop/hdpdata

3. 启动ZKFC

ZKFC(ZK Failover Controller)主要是确保namenode的高可用,在active namenode不可用时及时切换到standby namenode。我们在node01上执行:

hdfs zkfc -formatZK

有如下输出表明ZKFC启动成功:

INFO ha.ActiveStandbyElector: Successfully created /hadoop-ha/ns in ZK

4. 启动HDFS(node01)

/usr/local/hadoop/sbin/start-dfs.sh

5. 启动YARN(node02)

/usr/local/hadoop/sbin/start-yarn.sh

并且在node01上也启动一个ResourceManager作为备份节点

/usr/local/hadoop/sbin/yarn-daemon.sh start resourcemanager

6. 启动JobHistoryServer(node2)

/usr/local/hadoop/sbin/mr-jobhistory-daemon.sh start historyserver

通过jps命令可以查看到一个JobHistoryServer进程

至此,hadoop集群的启动完成了,下一步我们通过网页查看集群状态。

Hadoop状态界面

在我们需要访问集群的机器上配置下面hosts项(主要是为了访问方便)

1. NameNode Active (http://node01:50070/)

2. NameNode StandBy (http://node02:50070/)

3. Resource Manager (http://node02:8088/)

注:这里我自己添加了一台Data Node。大家也可以自行找些资料来练习如何动态的添加和删除DataNode。

4. Job History (http://node02:19888/)

注:这里我提前运行了一个JOB,所以有一条记录

总结

Hadoop集群的搭建流程比较长,配置和安装需要注意的细节也比较多。但从头走一次下来,会对Hadoop有更深的理解。网上也有一些自动话脚本,但自己操作一遍后,也才能理解里面的操作流程。搭建完成后,就可以写些任务来测试。或者在 Hadoop集群上结合更多的东西,如kafka,hive等。

Hadoop是很成熟的技术,如果你遇到了问题,其他人可能也遇到过相同问题,大家可以自行百度或其他技术网站,或者在下面留言,大家一起讨论。

如果本文有理解或者操作有问题,也希望大家不吝指教。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表