HDFS、YARN、Mapreduce概述

当今时代,互联网世界中每天都有数以亿计的数据产出,比如某东某宝的商城订单,日志流量等数据,越来越多的小伙伴都投身大数据领域,基于海量数据进行数据处理,从数据中挖掘出各种有价值的信息,而Hadoop作为大数据的基石,核心组件包括HDFS、MapReduce、YARN,为海量数据的存储和计算提供了可行方案。大数据涉及到数据采集、数据处理/分析/挖掘、数据存储、数据可视化等,开源世界是伟大的,各种大数据框架应运而生,比如Pig、Hive、Hbase、Flume、Oozie、Mahout等等等等,这些框架大都基于Hadoop,为大数据的处理提供多种多样的技术选型,共同组成了一个大的技术栈也就Hadoop生态系统,本文对大数据核心组件HDFS、YARN和MapReduce做一个简单的概述。

背景

最初,大数据的存储和分析中有很多系统瓶颈,为了解决这些瓶颈,Google出了几篇论文,但并未做开源实现,这些论文包括MapReduce、GigTable、GFS,这就为Hadoop的产生提供了理论依据。

这里先引出一个问题,为什么很多公司选择Hadoop作为大数据平台的解决方案?原因有以下几点:

  • 源码开源
  • 社区活跃、参与者很多
  • 涉及到分布式存储和计算的方方面面:
    Flume进行数据采集
    Spark/MR/Hive等进行数据处理
    HDFS/HBase进行数据存储
  • 已得到企业界的验证
Hadoop常用发行版及选型包括原生版和商业公司发行版:
  • Apache Hadoop:原生Hadoop http://hadoop.apache.org
  • CDH:Cloudera Distributed Hadoop 商业公司发行 http://archive.cloudera.com
  • HDP:Hortonworks Data PlatForm 商业公司发行
    商业公司发行版可以避免很多组件之间版本兼容问题,其中规模最大、知名度最高的应该是Cloudera公司,下载地址:http://archive.cloudera.com/cdh5/cdh/5/,使用CDH时要注意,生产或者测试环境选择对应CDH版本时,一定要采用尾号是一样的版本
Hadoop三大核心组件包括:
  • HDFS :Hadoop distributed file system 分布式文件系统
  • YARN:Yet another resouce negotiator 负责整个集群资源的管理和调度
  • MapReduce :分布式计算

分布式文件系统HDFS

分布式文件系统HDFS的设计目标:
  • 非常巨大的分布式文件系统
  • 运行在普通廉价的硬件上
  • 易扩展、为用户提供性能不错的文件存储服务
HDFS架构

HDFS采用1个Master(即NameNode)带多个Slaves(DataNode)的架构,即NameNode + N个DataNode,建议NameNode和DataNode部署在不同节点上,类似这种架构的还有YARN/HBase等,这块官方是这样说的:

A typical deployment has a dedicated machine that runs only the NameNode software.
Each of the other machines in the cluster runs one instance of the DataNode software.
The architecture does not preclude running multiple DataNodes on the same machine
but in a real deployment that is rarely the case.

HDFS Architectrue
HDFS中块和副本因子的概念
  • 在HDFS中,每个文件会被拆分成多个Block,存储在多个节点上,每个Block的大小(blocksize)默认为128M,当然这个大小可以手动修改,这样的话比如有一个文件大小为130M,那么会被拆分为2个Block,分别为128M和2M(All blocks in a file except the last block are the same size),然后存储到不同的节点上,这样对文件的读取并发进行,可以提高IO吞吐率,加快速度。
  • 这其中还有个概念叫做副本系数或者叫做副本因子(replication factor),表示每个Block会被存几份,每一份都存储到不同的节点上,万一某个节点挂掉了数据不可用,还可以有其他副本可用,不至于造成数据丢失


    Block Replication

NameNode和DataNode的职责:
NameNode:

  • 负责客户端请求的响应
  • 负责元数据(文件的名称、副本系数、Block存放的DN)的管理

DataNode:

  • 存储用户的文件对应的数据块(Block)
  • 要定期向NN发送心跳信息,汇报本身及其所有的block信息,健康状况
HDFS环境搭建
  1. 下载Hadoop
    http://archive.cloudera.com/cdh5/cdh/5/2.6.0-cdh5.7.0
    wget http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.7.0.tar.gz

  2. 安装jdk
    下载
    解压到app目录:tar -zxvf jdk-7u51-linux-x64.tar.gz -C ~/app/
    验证安装是否成功:~/app/jdk1.7.0_51/bin ./java -version
    建议把bin目录配置到系统环境变量(~/.bash_profile)中
    export JAVA_HOME=/home/hadoop/app/jdk1.7.0_51
    export PATH=$JAVA_HOME/bin:$PATH

  3. 机器参数设置
    hostname: hadoop001
    修改机器名: /etc/sysconfig/network
    NETWORKING=yes
    HOSTNAME=hadoop001
    设置ip和hostname的映射关系: /etc/hosts
    192.168.199.200 hadoop001
    127.0.0.1 localhost
    ssh免密码登陆(本步骤可以省略,但是后面你重启hadoop进程时是需要手工输入密码才行)
    ssh-keygen -t rsa
    cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys

  4. Hadoop配置文件修改: ~/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop

    • hadoop-env.sh
      export JAVA_HOME=/home/hadoop/app/jdk1.7.0_51

    • core-site.xml

        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://hadoop001:8020</value>
        </property>
        <property>
            <name>hadoop.tmp.dir</name>
            <value>/home/hadoop/app/tmp</value>
         </property>  
      
    • hdfs-site.xml

        <property>
            <name>dfs.replication</name>
            <value>1</value>
        </property>
      
  5. 格式化HDFS
    注意:这一步操作,只是在第一次时执行,每次如果都格式化的话,那么HDFS上的数据就会被清空
    bin/hdfs namenode -format

  6. 启动HDFS
    sbin/start-dfs.sh
    验证是否启动成功:
    jps:
    DataNode
    SecondaryNameNode
    NameNode
    浏览器:
    http://hadoop001:50070/

  7. 停止HDFS
    sbin/stop-dfs.sh

资源管理和调度YARN

概述

使用yarn可以是XXX框架与其他计算框架共享集群资源,按资源需要分配,进而提高集群资源的利用率,不同计算框架可以共享同一个HDFS集群上的数据,享受整体的资源调度,XXX可以是Spark/MapReduce/Storm/Flink

YARN架构

YARN和HDFS一样,采用1个Master(即ResourceManager)带多个Slaves(NodeManager)的架构,即1 个ResourceManager + N个NodeManager

ResourceManager的职责: 一个集群active状态的RM只有一个,负责整个集群的资源管理和调度

  • 处理客户端的请求(启动/杀死)
  • 启动/监控ApplicationMaster(一个作业对应一个AM)
  • 监控NM
  • 系统的资源分配和调度

NodeManager:整个集群中有N个,负责单个节点的资源管理和使用以及task的运行情况

  • 定期向RM汇报本节点的资源使用请求和各个Container的运行状态
  • 接收并处理RM的container启停的各种命令
  • 单个节点的资源管理和任务管理

ApplicationMaster:每个应用/作业对应一个,负责应用程序的管理

  • 数据切分
  • 为应用程序向RM申请资源(container),并分配给内部任务
  • 与NM通信以启停task, task是运行在container中的
  • task的监控和容错

Container:

  • 对任务运行情况的描述:cpu、memory、环境变量

Client

  • 提交作业
  • 查询作业的运行进度
  • 杀死作业
YARN执行流程
  • 用户向YARN提交作业
  • RM为该作业分配第一个container(AM)
  • RM会与对应的NM通信,要求NM在这个container上启动应用程序的AM
  • AM首先向RM注册,然后AM将为各个任务申请资源,并监控运行情况
  • AM采用轮训的方式通过RPC协议向RM申请和领取资源
  • AM申请到资源以后,便和相应的NM通信,要求NM启动任务
  • NM启动我们作业对应的task
YARN环境搭建
  • mapred-site.xml

    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    
  • yarn-site.xml

     <property>
         <name>yarn.nodemanager.aux-services</name>
         <value>mapreduce_shuffle</value>
     </property>
    
  • 启动yarn:sbin/start-yarn.sh

  • 验证是否启动成功
    jps:
    ResourceManager
    NodeManager

    web: http://hadoop001:8088

  • 停止yarn: sbin/stop-yarn.sh

  • 在yarn上提交pi案例:
    hadoop jar /home/hadoop/app/hadoop-2.6.0-cdh5.7.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar pi 2 3

大数据计算框架MapReduce

MapReduce处理数据流程包括Input Spliting Mapping Shuffling Reducing Final result等,代码编写时需要实现Mapper和Reducer,比较繁琐,取而代之的是spark等易于编写代码、处理速度更快的框架。

MapReduce的局限性主要包括以下几点:
  • 代码繁琐;
  • 只能够支持map和reduce方法;
  • 执行效率低下;
  • 不适合迭代多次、交互式、流式的处理;
框架多样化

目前,各种大数据计算处理框架应运而生,主要包括:

  • 批处理(离线):MapReduce、Hive、Pig
  • 流式处理(实时): Storm、JStorm
  • 交互式计算:Impala
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容