龙空技术网

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

音你而不同 214

前言:

目前各位老铁们对“hadoopcentos集群搭建”大致比较注意,你们都需要知道一些“hadoopcentos集群搭建”的相关知识。那么小编在网上收集了一些对于“hadoopcentos集群搭建””的相关资讯,希望同学们能喜欢,小伙伴们一起来学习一下吧!

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

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

环境准备:

JAVA:版本 jdk1.8.0_121

下载地址:

Hadoop:版本 hadoop-2.7.4

下载地址:

Zookeeper:版本 zookeeper-3.4.10

下载地址:

操作系统:CentOS release 6.7

注:这里的环境是本人这次实践的环境,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 #解压jdksu 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 #切换回hadoopscp -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/zookeeperchown -R hadoop:hadoop /usr/local/zookeeper #修改属组#修改配置文件su hadoopcd /usr/local/zookeepercp /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 rootln -s /home/hadoop/apps/hadoop-2.7.4 /usr/local/hadoop #创建软连接chown -R hadoop:hadoop /usr/local/hadoop #修改软连接属组为hadoopsu hadoopcd /usr/local/hadoop/etc/hadoop
#修改hadoop-env.shexport 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/hadoopmkdir hdpdata
#修改slave文件,设置datanode和nodemanager的启动节点vim /usr/local/hadoop/etc/hadoop/slaves #添加以下内容node03node04node05
#修改/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 journalnodejps #运行该命令后,如果输出中有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 ()

2. NameNode StandBy ()

3. Resource Manager ()

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

4. Job History ()

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

总结

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

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

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

标签: #hadoopcentos集群搭建