设为首页收藏本站

小牛社区-大数据学习交流社区|大数据免费学习资源

 找回密码
 立即注册!

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 149|回复: 0

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

[复制链接]

166

主题

0

帖子

12

积分

吃土小白

Rank: 1

积分
12
发表于 2018-1-10 18:01:10 | 显示全部楼层 |阅读模式

Hadoop可以说是现在最流行,最普遍的分布式系统框架。许多公司都使用Hadoop处理和分析公司内大量的业务和日志数据。同时大数据本身亦是一个很火并且在可预见范围内也会很火的技术。
本文主要是通过实践搭建Hadoop集群,让大家从实际操作中加深对Hadoop原理,框架和配置的理解。
环境准备:


  • JAVA:版本 jdk1.8.0_121
    下载地址:http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk8-downloads-2133151-zhs.html

  • Hadoop:版本 hadoop-2.7.4
    下载地址:http://hadoop.apache.org/releases.html

  • Zookeeper:版本 zookeeper-3.4.10
    下载地址:http://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/

  • 操作系统:CentOS release 6.7
    http://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 #解压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/hdpdata3. 启动ZKFC

ZKFC(ZK Failover Controller)主要是确保namenode的高可用,在active namenode不可用时及时切换到standby namenode。我们在node01上执行:
hdfs zkfc -formatZK有如下输出表明ZKFC启动成功:
INFO ha.ActiveStandbyElector: Successfully created /hadoop-ha/ns in ZK4. 启动HDFS(node01)

/usr/local/hadoop/sbin/start-dfs.sh5. 启动YARN(node02)

/usr/local/hadoop/sbin/start-yarn.sh并且在node01上也启动一个ResourceManager作为备份节点
/usr/local/hadoop/sbin/yarn-daemon.sh start resourcemanager6. 启动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是很成熟的技术,如果你遇到了问题,其他人可能也遇到过相同问题,大家可以自行百度或其他技术网站,或者在下面留言,大家一起讨论。
如果本文有理解或者操作有问题,也希望大家不吝指教。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册!

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册!

本版积分规则

快速回复 返回顶部 返回列表