目录(?)[-]

  1. Hadoop概要
  2. Hadoop相关组件介绍
    1. HDFS
    2. Yarn
    3. Hive
    4. HBase
    5. Spark
    6. Other Tools
  3. Hadoop集群硬件和拓扑规划
    1. 硬件配置
    2. 软件配置
  4. Hadoop的设计目标和适用场景
  5. Hadoop的架构解析
  6. MapReduce工作原理和案例说明
    1. MapReduce数据流
    2. MapReduce实际案例

GitChat 作者:Lee 
原文:一步一步学习大数据:Hadoop 生态系统与场景 
关注公众号:GitChat 技术杂谈,一本正经的讲技术

Hadoop概要

到底是业务推动了技术的发展,还是技术推动了业务的发展,这个话题放在什么时候都会惹来一些争议。

随着互联网以及物联网的蓬勃发展,我们进入了大数据时代。IDC预测,到2020年,全球会有44ZB的数据量。传统存储和技术架构无法满足需求。在2013年出版的《大数据时代》一书中,定义了大数据的5V特点:Volume(大量)、Velocity(高速)、Variety(多样)、Value(低价值密度)、Veracity(真实性)。

当我们把时间往回看10年,来到了2003年,这一年Google发表《Google File System》,其中提出一个GFS集群中由多个节点组成,其中主要分为两类:一个Master node,很多Chunkservers。之后于2004年Google发表论文并引入MapReduce。2006年2月,Doug Cutting等人在Nutch项目上应用GFS和 MapReduce思想,并演化为Hadoop项目。

Doug Cutting曾经说过他非常喜欢自己的程序被千万人使用的感觉,很明显,他做到了;下图就是本尊照片,帅气的一塌糊涂

2008年1月, Hadoop成为Apache的开源项目。

Hadoop的出现解决了互联网时代的海量数据存储和处理,其是一种支持分布式计算和存储的框架体系。假如把Hadoop集群抽象成一台机器的话,理论上我们的硬件资源(CPU、Memoery等)是可以无限扩展的。

Hadoop通过其各个组件来扩展其应用场景,例如离线分析、实时处理等。

Hadoop相关组件介绍

本文主要是依据Hadoop2.7版本,后面没有特殊说明也是按照此版本

HDFS

HDFS,Hadoop Distributed File System (Hadoop分布式文件系统)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。它和现有的分布式文件系统有很多共同点,例如典型的Master/Slave架构(这里不准备展开介绍);然而HDFS是一个高度容错性的系统,适合部署在廉价的机器上。

关于HDFS主要想说两点。

  1. HDFS中的默认副本数是3,这里涉及到一个问题为什么是3而不是2或者4。

  2. 机架感知(Rack Awareness)。

只有深刻理解了这两点才能理解为什么Hadoop有着高度的容错性,高度容错性是Hadoop可以在通用硬件上运行的基础。

Yarn

Yarn,Yet Another Resource Negotiator(又一个资源协调者),是继Common、HDFS、MapReduce之后Hadoop 的又一个子项目。Yarn的出现是因为在Hadoop1.x中存在如下几个问题:

  1. 扩展性差。JobTracker兼备资源管理和作业控制两个功能。

  2. 可靠性差。在Master/Slave架构中,存在Master单点故障。

  3. 资源利用率低。Map Slot(1.x中资源分配的单位)和Reduce Slot分开,两者之间无法共享。

  4. 无法支持多种计算框架。MapReduce计算框架是基于磁盘的离线计算 模型,新应用要求支持内存计算、流式计算、迭代式计算等多种计算框架。

Yarn通过拆分原有的JobTracker为:

  1. 全局的 ResourceManager(RM)。

  2. 每个Application有一个ApplicationMaster(AM)。

由Yarn专门负责资源管理,JobTracker可以专门负责作业控制,Yarn接替 TaskScheduler的资源管理功能,这种松耦合的架构方式 实现了Hadoop整体框架的灵活性。

Hive

Hive的是基于Hadoop上的数据仓库基础构架,利用简单的SQL语句(简称HQL)来查询、分析存储在HDFS的数据。并且把SQL语句转换成MapReduce程序来数据的处理。

Hive与传统的关系数据库主要区别在以下几点:

  1. 存储的位置 Hive的数据存储在HDFS或者Hbase中,而后者一般存储在裸设备或者本地的文件系统中。

  2. 数据库更新 Hive是不支持更新的,一般是一次写入多次读写。

  3. 执行SQL的延迟 Hive的延迟相对较高,因为每次执行HQL需要解析成MapReduce。

  4. 数据的规模上 Hive一般是TB级别,而后者相对较小。

  5. 可扩展性上 Hive支持UDF/UDAF/UDTF,后者相对来说较差。

HBase

HBase,是Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。它底层的文件系统使用HDFS,使用Zookeeper来管理集群的HMaster和各Region server之间的通信,监控各Region server的状态,存储各Region的入口地址等。

HBase是Key-Value形式的数据库(类比Java中的Map)。那么既然是数据库那肯定就有表,HBase中的表大概有以下几个特点:

  1. 大:一个表可以有上亿行,上百万列(列多时,插入变慢)。

    面向列:面向列(族)的存储和权限控制,列(族)独立检索。

  2. 稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。

  3. 每个cell中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳。

  4. HBase中的数据都是字节,没有类型(因为系统需要适应不同种类的数据格式和数据源,不能预先严格定义模式)。

Spark

Spark是由伯克利大学开发的分布式计算引擎,解决了海量数据流式分析的问题。Spark首先将数据导入Spark集群,然后再通过基于内存的管理方式对数据进行快速扫描 ,通过迭代算法实现全局I/O操作的最小化,达到提升整体处理性能的目的,这与Hadoop从“计算”找“数据”的实现思路是类似的。

Other Tools

Phoneix

基于Hbase的SQL接口,安装完Phoneix之后可以适用SQL语句来操作Hbase数据库。

Sqoop

Sqoop的主要作用是方便不同的关系数据库将数据迁移到Hadoop,支持多种数据库例如Postgres,Mysql等。

Hadoop集群硬件和拓扑规划

规划这件事情并没有最优解,只是在预算、数据规模、应用场景下之间的平衡。

硬件配置

Raid

首先Raid是否需要,在回答这个问题之前,我们首先了解什么是Raid0以及Raid1。

Raid0是提高存储性能的原理是把连续的数据分散到多个磁盘上存取,这样,系统有数据请求就可以被多个磁盘并行的执行,每个磁盘执行属于它自己的那部分数据请求。这种数据上的并行操作可以充分利用总线的带宽,显著提高磁盘整体存取性能。(来源百度百科)

当Raid0与Hadoop结合在一起会产生什么影响呢?

优势:

  1. 提高IO。

  2. 加快读写。

  3. 消除单块磁盘的读写过热的情况。

然而在Hadoop系统中,当Raid0中的一块磁盘数据出现问题(或者读写变得很慢的时候)时,你需要重新格式化整个Raid,并且数据需要重新恢复到DataNode中。整个周期会随着数据的增加而逐步增加。

其次Raid0的瓶颈是Raid中最慢的那一块盘,当你需要替换其中最慢的那一块盘的时候就会重新格式化整个Raid然后恢复数据。

RAID 1通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互 为备份的数据。当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此RAID 1可以提高读取性能。RAID 1是磁盘阵列中单位成本最高的,但提供了很高的数据安全性和可用性。当一个磁盘失效时,系统可以自动切换到镜像磁盘上读写,而不需要重组失效的数据。(来源百度百科)

所以Raid1的本质是提高数据的冗余,而Hadoop本身默认就是3个副本,所以当存在Raid1时候,副本数将会变成6,将会提高系统对于硬件资源的需求。

所以在Hadoop系统中不建议适用Raid的,其实更加推荐JBOD,当一块磁盘出现问题时,直接unmount然后替换磁盘(很多时候直接换机器的)。

集群规模及资源

这里主要依据数据总量来推算集群规模,不考虑CPU以以及内存配置。

一般情况来说,我们是根据磁盘的的需求来计算需要机器的个数。

首先我们需要调研整个系统的当量以及增量数据。

举个例子来说,假如现在系统中存在8T的数据,默认副本数为3,那么所需要的存储=8T*3/80% = 30T左右。

每台机器存储为6T,则数据节点个数为5。

加上Master节点,不考虑HA的情况下,大概是6台左右机器。

软件配置

根据业务需求是否需要配置HA方案进行划分,由于实际场景复杂多变,下面方案仅供参考。

1.非HA方案

一般考虑将所有的管理节点放在一台机器上,同时在数据节点上启动若干个Zookeeper服务(奇数)。

  • 管理节点:NameNode+ResourceManager+HMaster

  • 数据节点:SecondaryNameNode

  • 数据节点:DataNode +RegionServer+Zookeeper

2.HA方案

在HA方案中,需要将Primary Node 与Standby Node 放在不同的机器上,一般在实际场景中,考虑到节省机器,可能会将不同的组件的Master节点进行交叉互备,如A机器上有Primary NameNonde 以及 Standby HMaster ,B机器上有Standby NameNode 以及 Primary Master。

  • 管理节 点:NameNode(Primary)+HMaster(Standby)

  • 管理节点:NameNode(Standby)+HMaster(Primary)

  • 管理节点:ResourceManager

  • 数据节点:DataNode +RegionServer+Zookeeper

Hadoop的设计目标和适用场景

其实在上面的Hadoop概要上我们就可以看到Hadoop当初的设计目标是什么。Hadoop在很多场合下都是大数据的代名词。其主要是用来处理半结构以及非结构数据(例如MapReduce)。

其本质也是通过Mapreduce程序来将半结构化或者非结构化的数据结构化继而来进行后续的处理。

其次由于Hadoop是分布式的架构,其针对的是大规模的数据处理,所以相对较少的数据量并不能体现Hadoop的优势。例如处理GB级别的数据量,利用传统的关系型数据库的速度可能相对较快。

基于上述来看Hadoop的适用场景如下:

  1. 离线日志的处理(包括ETL过程,其实本质就是基于Hadoop的数据仓库)。

  2. 大规模并行计算。

Hadoop的架构解析

Hadoop由主要由两部分组成:

  1. 分布式文件系统(HDFS),主要用于大规模的数据存储。

  2. 分布式计算框架MapReduce,其主要用来对HDFS上的数据进行运算处理。

HDFS主要由NameNode(Master)以及DataNode(Slave)组成。前者主要是对命名空间管理:如对HDFS中的目录、文件和块做类似 文件系统的创建、修改、删除、列表文件和目录等基本操作。后者存储实际的数据块,并与NameNode保持一定的心跳。

MapReduce2.0的计算框架本质是有Yarn来完成的,Yarn是关注点分离的思路,由Yarn专门负责资源管理 ,JobTracker可以专门负责作业控制,Yarn接替 TaskScheduler的资源管理功能,这种松耦合的架构方式 实现了Hadoop整体框架的灵活性。

MapReduce工作原理和案例说明

MapReduce可谓Hadoop的精华所在,是用于数据处理的编程模型。MapReduce从名称上面可以看到Map以及Reduce两个部分。其思想类似于先分后合,Map对与数据进行抽取转换,Reduce对数据进行汇总。其中需要注意的是Map任务将输出结果存储在本地磁盘,而不是HDFS。

在我们执行MapReduce的过程中,根据Map与数据库的关系大体上可以分为三类:

  1. 数据本地

  2. 机架本地

  3. 跨机架

从上述几种可以看出来,假设一个MapReduce过程中存在大量的数据移动对于执行效率来说是灾难性。

MapReduce数据流

从数据流来看MapReduce的关系大体可以分为以下几类:

  • 单Reduce

 
- 多Reduce

 
- 无Reduce

 
然而无论什么MapReduce关系如何,MapReduce的执行流程都如下图所示:

 
其中在执行每个Map Task时,无论Map方法中执行什么逻辑,最终都是要把输出写到磁盘上。如果没有Reduce阶段,则直接输出到HDFS上。如果有Reduce作业,则每个Map方法的输出在写磁盘前线在内存中缓存。每个Map Task都有一个环状的内存缓冲区,存储着Map的输出结果,默认100m,在每次当缓冲区快满的时候由一个独立的线程将缓冲区的数据以一个溢出文件的方式存放到磁盘,当整个Map Task结束后再对磁盘中这个Map Task产生的所有溢出文件做合并,被合并成已分区且已排序的输出文件。然后等待Reduce Task来拉数据。

上述这个过程其实也MapReduce中赫赫有名的Shuffle过程。

MapReduce实际案例

  • Raw Data

    原始的数据文件是普通的文本文件,每一行记录中存在一个年份以及改年份中每一天的温度。

  • Map

    Map过程中,将每一行记录都生成一个key,key一般是改行在文件中的行数(Offset),例如下图中的0,106代表第一行、第107行。其中粗体的地方代表年份以及温度。

  • Shuffle

    该过程中获取所要的记录组成键值对{年份,温度}。

  • Sort

    将上一步过程中的相同key的value组成一个list,即{年份,List<温度>},传到Reduce端。

  • Reduce

    Reduce端对list进行处理,获取最大值,然后输出到HDFS中。

上述过程进行总结下来流程如下:


  1. http://static.zybuluo.com/Fvanni/5au2nndmozu1kf8a9jh1vvoh/image_1bim6ie781kgb15nl58fjvq1fpm13.png

  2. http://static.zybuluo.com/Fvanni/zjbrg5lthhs4nw53xgg4o325/image.png

  3. http://static.zybuluo.com/Fvanni/9l1matroj29e9bf2wkdzf6iq/image.png

  4. http://static.zybuluo.com/Fvanni/ccax9nr7zegd93i2cqw3xw1s/image.png

  5. http://static.zybuluo.com/Fvanni/xzlmpcudzq5uylbs6tqvp4co/image.png

  6. http://static.zybuluo.com/Fvanni/hc4ofg0o6ktwmvu6x448qusu/image.png

  7. http://static.zybuluo.com/Fvanni/vltoc0gw1pvym5gjs8yidz3p/image.png

  8. http://static.zybuluo.com/Fvanni/s82vpzxjkqbwytuq49lwkhoe/image.png

  9. http://static.zybuluo.com/Fvanni/yrgmg3cfw0m08ruziefk0wzg/image.png

  10. http://static.zybuluo.com/Fvanni/u35n0t8wkhnp7ggnbl5twqhq/image.png

  11. http://static.zybuluo.com/Fvanni/vqhuw7b4g6fpj3s3a6lsd5uh/image.png

  12. http://static.zybuluo.com/Fvanni/l90ucgzi21jhf1wulxkoxd22/image.png

来源:http://blog.csdn.net/gitchat/article/details/77931757

GitChat · 大数据 | 一步一步学习大数据:Hadoop 生态系统与场景相关推荐

  1. 什么是大数据?零基础如何学习大数据?(附学习路线)

    其实简单的来说,大数据就是通过分析和挖掘全量的非抽样的数据辅助决策. 大数据可以实现的应用可以概括为两个方向,一个是精准化定制,第二个是预测.比如像通过搜索引擎搜索同样的内容,每个人的结果却是大不相同 ...

  2. 写给初学大数据的你,从零开始学习大数据开发的完整学习路线

    最近很多人都想学习大数据开发,但是却不知道如何开始学习,今天专门整理了一份针对大数据初学者的大数据开发学习路线. 下面分十个章节来说明大数据开发要学习的内容: 互联网科技发展蓬勃兴起,人工智能时代来临 ...

  3. 大数据学习笔记:Hadoop生态系统

    文章目录 一.Hadoop是什么 二.Hadoop生态系统图 三.Hadoop生态圈常用组件 (一)Hadoop (二)HDFS (三)MapReduce (四)Hive (五)Hbase (六)Zo ...

  4. 大数据能做什么,为什么学习大数据

    Hadoop和大数据是这两年最火的词儿们之一,越来越多的公司对这个东西感兴趣,但是我接触到的大多数公司里的人,无论是技术人员还是老板.都不知道怎么能把这些东西用于改善自己公司的业务.在解答的过程中,提 ...

  5. 大数据培训 | 什么才算是大数据,零基础怎么学习大数据技术

    大数据并非是大的数据,而是将数据价值化的新概念,可以说任何体量的数据都可以使用大数据技术来处理.在大数据时代,企业中有很多商业数据需要大数据开发工程师来采集.储存.处理,所以逐渐的大数据岗位越来越多. ...

  6. python处理mat数据和处理png的区别_Python---利用scipy.misc等库对jpg以及png等图像数据预处理(用于深度学习喂数据)...

    转载自:http://blog.csdn.net/qq_16949707/article/details/56306720import os import glob image_dir = " ...

  7. 【转载】利用scipy.misc等库对jpg以及png等图像数据预处理(用于深度学习喂数据)...

    http://blog.csdn.net/qq_16949707/article/details/56306720 转载于:https://www.cnblogs.com/tenderwx/p/805 ...

  8. 大数据新手的0基础学习路线,从菜鸟到高手的成长之路

    大数据作为一个新兴的热门行业,吸引了很多人,但是对于大数据新手来说,按照什么路线去学习,才能够学习好大数据,实现从大数据菜鸟到高手的转变.这是很多想要学习大数据的朋友们想要了解的. 今天我们就来和大家 ...

  9. 大数据学习要知道的十大发展趋势,以及学习大数据的几点建议

    2016年,近40%的公司正在实施和扩展大数据技术应用,另有30%的公司计划在未来12个月内采用大数据技术,62.5%的公司现在至少有一个大数据项目投入生产,只有5.4%的公司没有大数据应用计划,或者 ...

最新文章

  1. C#多线程编程(1)--线程,线程池和Task
  2. Python 图像 一样大小_Python图像处理,顺便生成一张海报
  3. 尚硅谷图解Java数据结构和算法一
  4. Python center 用法
  5. OS_CORE.C(9)
  6. 【Python】超全的 100 个 Pandas 函数汇总,建议收藏
  7. OpenCV实现Mat与vector,Mat与数组互转
  8. 【修饰符】四种访问修饰符和各自的权限
  9. mysql连表查询on条件_mysql 外连接的时候,条件在on后面和条件在where后面的区别...
  10. Java算法面试题:编写一个程序,将e:\neck目录下的所有.java文件复制到e:\jpg目录下,并将原来文件的扩展名从.java改为.jpg...
  11. 最大最小背光亮度修改
  12. 你的袜子还是干的吗?
  13. Scrapy的log日志功能
  14. c++拼接字符串效率比较(+=、append、stringstream、sprintf)
  15. 虚拟机中centos7找不到vim命令的解决方法
  16. QT windows ICO图标制作方法
  17. python学习-02(数据类型、字符串、列表、元祖、字典)
  18. 2022-2028中国蛋白糖果市场现状研究分析与发展前景预测报告
  19. 使用jQuery easyui和Springdata JPI进行数据的查询
  20. 关于LyfUpload 错误 #x27;80020009#x27; 下标越界的错误,还请大侠们帮帮忙!!!

热门文章

  1. solr获取同义词 java_java操作solr实现查询功能的实例
  2. B02_NumPy数据类型(常见基本数据类型列举,数据类型对象 (dtype))
  3. 3、常用关键字,变量赋值,多个变量赋值,标准数据类型,数字,字符串,列表,元组,字典,数据类型转换
  4. 开发每个静态网站是的模版代码(自己开发是长期优化过的觉得最简的代码)
  5. Python描述性统计示例
  6. 【tensorflow】全连接层函数tf.layers.dense()原理
  7. java 不要使用魔法值_Java代码中的魔法值
  8. 目标检测数据集MSCOCO简介
  9. Qt5.5.0环境下的mingw编译dcmtk 3.6.1_20150924
  10. 全卷积网络FCN详解