目录

  • 一、hadoop简介
  • 二、hadoop的安装与部署
  • 1、hadoop的安装
  • 2、hadoop的伪分布式部署
  • 3、hadoop的完全分布式部署
  • 三、资源管理器YARN – ResourceManager部署


一、hadoop简介

  • Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统( Distributed File System),其中一个组件是HDFS(Hadoop Distributed File System)。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上,即性价比极高;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,允许以流的形式访问(streaming access)文件系统中的数据。
  • Hadoop的框架最核心的设计就是:HDFS 和 MapReduce。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算。Hadoop 最底部是 Hadoop Distributed File System(HDFS),它存储 Hadoop 集群中所有存储节点上的文件。HDFS的上一层是MapReduce 引擎,该引擎由 JobTrackers 和 TaskTrackers 组成。通过对Hadoop分布式计算平台最核心的分布式文件系统HDFS、MapReduce处理过程,以及数据仓库工具Hive和分布式数据库Hbase的介绍,基本涵盖了Hadoop分布式平台的所有技术核心 。
  • 对外部客户机而言,HDFS就像一个传统的分级文件系统。可以创建、删除、移动或重命名文件,等等。但是 HDFS 的架构采用 master/slave (主从)架构,是基于一组特定的节点构建的,这些节点包括 NameNode(仅一个),它在 HDFS 内部提供元数据服务。DataNode(DN),它为 HDFS 提供存储块。由于仅存在一个 NameNode,因此这是 HDFS 1.x版本的一个缺点(单点失败)。在Hadoop 2.x版本可以存在两个NameNode,解决了单节点故障问题 。存储在 HDFS 中的文件被分成块,然后将这些块复制到多个DataNode中。块的大小(1.x版本默认为 64MB,2.x版本默认为128MB)和复制的块数量在创建文件时由客户机决定。由于块是128M的大小,那么如果小文件太多,会导致内存的负担很重。HDFS 内部的所有通信都基于标准的 TCP/IP 协议 。


hadoop平台系统 hadoop 管理平台_分布式

如上图所示,客户首先根据DFS找NN节点,NN节点根据客户的要求(文件分为128M的块,设置三个副本)建立DataNode 和块文件映射的元数据,然后NN节点根据距离的远近,把最近的DN地址告诉客户的HDFS系统。HDFS把数据以块的形式存书到DN1上,DN1收到的同时,还把文件发给DN2,DN2发给DN3。最后一个DN3节点都收到了,回馈给NN消息,已收到。一个块完成后,再来一遍传输下一个块。

hadoop平台系统 hadoop 管理平台_hdfs_02

  • HDFS容错机制:
    节点失败监测机制:DN每隔3秒向NN发送心跳信号,10分钟收不到,认为DN宕机。
    通信故障监测机制:只要发送了数据,接收方就会返回确认码。
    数据错误监测机制:在传输数据时,同时会发送总和校验码。
  • 对于副本的存储。假如第一个副本在第一个机架上存储,第二个副本不能和第一个副本在同一个机架上,也不能在同一个DN。假如第二个副本放在第二个机架,第三个副本要和第二个副本在同一个机架上,但不在同一个DN上。后面的副本就不做限制了。

hadoop平台系统 hadoop 管理平台_HDFS_03

二、hadoop的安装与部署

1、hadoop的安装

  • 实验环境:首先准备三台虚拟机;
    server9(172.25.36.9)NN;
    server7(172.25.36.7)、server8(172.25.36.8)、server10(172.25.36.10)DN;
    分别分配2G内存。
    安装过程可以参考操作手册:点击

准备hadoop软件压缩包及提供支持的jdk压缩包

hadoop平台系统 hadoop 管理平台_分布式_04


创建hadoop用户,将压缩文件移动至hadoop用户家目录下,切换为hadoop用户;

解压jdk压缩包并做软连接方便使用,解压hadoop压缩包并做软连接方便使用

hadoop平台系统 hadoop 管理平台_hdfs_05


进入hadoop/etc/hadoop目录,修改环境变量hadoop-env.sh文件,配置hadoop环境,指定hadoop及java位置

hadoop平台系统 hadoop 管理平台_hadoop平台系统_06


hadoop平台系统 hadoop 管理平台_分布式_07


创建input目录,复制一些xml文件用作后面的输入测试

hadoop平台系统 hadoop 管理平台_hadoop_08


执行测试命令,使用hadoop-mapreduce-example示例文件

hadoop平台系统 hadoop 管理平台_分布式_09


测试命令,抓取input目录中以dfs开头的每个匹配项,并保存到output目录下

hadoop平台系统 hadoop 管理平台_hdfs_10


查看output内容

hadoop平台系统 hadoop 管理平台_hdfs_11

2、hadoop的伪分布式部署

使用一台虚拟机server9即做NN也做DN。伪分布式:一台机器有多个节点放在一起,namenode(master)和datanode(存数据)在一起,但是执行的分布式程序。

进入hadoop/etc/hadoop目录,编辑hdfs-site.xml文件

hadoop平台系统 hadoop 管理平台_hdfs_12


先指定副本数量为1

hadoop平台系统 hadoop 管理平台_分布式_13


编辑core-site.xml文件

hadoop平台系统 hadoop 管理平台_分布式_14


指定 hdfs 名称节点(NN)的ip,由于这里是伪分布式,主从都在一起,所以可以写localhost,端口为9000

hadoop平台系统 hadoop 管理平台_hadoop_15


因为主从都是自己,所以worker文件里面也写的localhost;

生成ssh密钥

hadoop平台系统 hadoop 管理平台_HDFS_16


切换root用户给hadoop用户设置密码,设置hadoop密码为westos

hadoop平台系统 hadoop 管理平台_HDFS_17


切换为hadoop用户,把密钥给localhost(设置localhost免密登陆)

hadoop平台系统 hadoop 管理平台_hadoop平台系统_18


测试免密登陆

hadoop平台系统 hadoop 管理平台_hadoop_19


进入软连接目录,初始化hdfs

hadoop平台系统 hadoop 管理平台_分布式_20


hadoop平台系统 hadoop 管理平台_hadoop_21


成功初始化后,/tmp就有数据了,数据都是存放在/tmp的;

执行hdfs启动脚本

hadoop平台系统 hadoop 管理平台_hdfs_22


类似于ps ax,java里面有jps命令可以查看开启进程,但是默认相对路径无法打开,所以修改家目录下的bash的环境变量文件,

hadoop平台系统 hadoop 管理平台_hdfs_23


hadoop平台系统 hadoop 管理平台_hadoop平台系统_24


把home/java/bin添加进去

hadoop平台系统 hadoop 管理平台_分布式_25


重新读取环境变量文件,现在使用jps可以看到DN和NN都启动了

hadoop平台系统 hadoop 管理平台_hdfs_26


相应的端口也开放了(hadoop默认的监听端口)

hadoop平台系统 hadoop 管理平台_hdfs_27


访问172.25.36.9:9870,9000是Namenode和Datanode的连接端口

hadoop平台系统 hadoop 管理平台_hdfs_28


查看节点信息

hadoop平台系统 hadoop 管理平台_HDFS_29


hadoop平台系统 hadoop 管理平台_HDFS_30


创建分布式用户目录/user/hadoop(该子目录的名字hadoop必须与操作用户hadoop一致)

hadoop平台系统 hadoop 管理平台_hadoop平台系统_31


查看文件系统,已有虚拟目录/user/hadoop

hadoop平台系统 hadoop 管理平台_HDFS_32


从本地上传input目录到分布文件系统

hadoop平台系统 hadoop 管理平台_hdfs_33


查看导入目录

hadoop平台系统 hadoop 管理平台_分布式_34


已有虚拟目录/user/hadoop/input

hadoop平台系统 hadoop 管理平台_hdfs_35


测试命令,以单词数的方式输出为output目录

hadoop平台系统 hadoop 管理平台_hadoop_36


查看dfs有output目录了

hadoop平台系统 hadoop 管理平台_hadoop_37


现在删除本地的output文件,使用dfs查看output还是在的,因为已经上传到文件系统里了

hadoop平台系统 hadoop 管理平台_HDFS_38


hadoop平台系统 hadoop 管理平台_hadoop_39


下载output目录,本地就有了

hadoop平台系统 hadoop 管理平台_分布式_40


hadoop平台系统 hadoop 管理平台_分布式_41

3、hadoop的完全分布式部署

完全分布式,需要把NN(server9)和DN分开;

首先执行脚本,停止hdfs

hadoop平台系统 hadoop 管理平台_hadoop_42


workers文件中指定server7和server8是数据节点

hadoop平台系统 hadoop 管理平台_hadoop_43


server9修改etc/hadoop/core-site.xml 文件,由于是完全分布式,必须指定ip

hadoop平台系统 hadoop 管理平台_hdfs_44


hadoop平台系统 hadoop 管理平台_HDFS_45


server9修改etc/hadoop/hdfs-site.xml文件,副本数改为2

hadoop平台系统 hadoop 管理平台_hadoop平台系统_46


hadoop平台系统 hadoop 管理平台_分布式_47


server9安装nfs

hadoop平台系统 hadoop 管理平台_hadoop平台系统_48


配置nfs策略,共享/home/hadoop目录,权限为读写,匿名用户uid和gid都是1000,对应hadoop用户;

重启nfs,showmount -e:显示NFS服务器上所有的共享目录

hadoop平台系统 hadoop 管理平台_HDFS_49


server7创建用户hadoop,安装nfs

hadoop平台系统 hadoop 管理平台_hadoop_50


server8创建用户hadoop,安装nfs

hadoop平台系统 hadoop 管理平台_hdfs_51


hadoop平台系统 hadoop 管理平台_hadoop平台系统_52


server7/8挂载172.25.36.9:/home/hadoop/ 到自己的hadpood用户家目录下;

切换hadoop用户,查看成功共享

hadoop平台系统 hadoop 管理平台_hadoop_53


hadoop平台系统 hadoop 管理平台_hadoop_54


由于进行了完全分布式部署,需要重新初始化hdfs

hadoop平台系统 hadoop 管理平台_hdfs_55


hadoop平台系统 hadoop 管理平台_hadoop平台系统_56


server7/8挂载nfs后,主机可以免密登陆,测试免密

hadoop平台系统 hadoop 管理平台_hdfs_57


hadoop平台系统 hadoop 管理平台_hadoop平台系统_58


hadoop平台系统 hadoop 管理平台_hadoop_59


开启hdfs,jps查看server7是NN节点,还有一个secondarynamenode是作为冷备的

hadoop平台系统 hadoop 管理平台_hadoop平台系统_60


jps查看server7/8是DN节点

hadoop平台系统 hadoop 管理平台_分布式_61


hadoop平台系统 hadoop 管理平台_hadoop_62


网页查看两个DN节点已经成功加入

hadoop平台系统 hadoop 管理平台_HDFS_63


hadoop平台系统 hadoop 管理平台_hadoop平台系统_64


hadoop平台系统 hadoop 管理平台_HDFS_65


创建虚拟目录/user/hadoop,上传input目录

hadoop平台系统 hadoop 管理平台_HDFS_66


单词数抓取,输出output目录

hadoop平台系统 hadoop 管理平台_hdfs_67


网页查看成功上传,部署完成

hadoop平台系统 hadoop 管理平台_HDFS_68


当我们想再添加一个DN节点(server10)到HDFS时,也很简单,首先server10安装nfs

hadoop平台系统 hadoop 管理平台_hadoop平台系统_69


server10创建hadoop用户

hadoop平台系统 hadoop 管理平台_分布式_70


hadoop平台系统 hadoop 管理平台_hadoop平台系统_71


将共享目录挂载到自己的/home/hadoop,切换hadoop用户,查看成功共享

hadoop平台系统 hadoop 管理平台_hdfs_72


修改worker文件,添加server10(所有节点的worker文件都跟着变动了,因为nfs)

hadoop平台系统 hadoop 管理平台_HDFS_73


hadoop平台系统 hadoop 管理平台_hadoop平台系统_74


server10开启DN节点,jps可以看到成功变为DN节点

hadoop平台系统 hadoop 管理平台_HDFS_75


网页查看,成功添加DN节点

hadoop平台系统 hadoop 管理平台_hadoop_76


可以看到,每个数据块大小是128M

hadoop平台系统 hadoop 管理平台_分布式_77

三、资源管理器YARN – ResourceManager部署

负责全局的资源管理和任务调度,把整个集群当成计算资源池,只关注分配,不管应用,且不负责容错。

资源管理:

  • 以前资源是每个节点分成一个个的Map slot和Reduce slot,现在是一个个Container,每个Container可以根据需要运行ApplicationMaster、Map、Reduce或者任意的程序;
  • 以前的资源分配是静态的,目前是动态的,资源利用率更高;
  • Container是资源申请的单位,一个资源申请格式:<resource-name, priority, resource-requirement, number-of-containers>,resource-name:主机名、机架名或*(代表任意机器), resource-requirement:目前只支持CPU和内存;
  • 用户提交作业到ResourceManager,然后在某个NodeManager上分配一个Container来运行ApplicationMaster,ApplicationMaster再根据自身程序需要向ResourceManager申请资源;
  • YARN有一套Container的生命周期管理机制,而ApplicationMaster和其Container之间的管理是应用程序自己定义的。

任务调度:

  • 只关注资源的使用情况,根据需求合理分配资源;
  • Scheluer可以根据申请的需要,在特定的机器上申请特定的资源(ApplicationMaster负责申请资源时的数据本地化的考虑,ResourceManager将尽量满足其申请需求,在指定的机器上分配Container,从而减少数据移动)。

    server9编辑etc/hadoop/mapred-site.xml文件

    添加mapreduce模块,这里使用了一个hadoop_mapred_home变量,之后要看看是否指定了该变量

    编辑yarn-site.xml文件,server9给DN添加nodemanage模块

    编辑hadoop-env.xml变量定义文件

    指定hadoop_mapred_home变量的路径

    server9回到软连接目录,开启yarn,jps查看,server1是RM资源管理者

    jps查看,server7/8/10多了NM节点管理角色


    web端口,显示调度器的信息;
    server9开启了8088端口

    网页访问172.25.36.9:8088查看yarn资源管理页面