Stay hungry Stay foolish

Hadoop生态系统

Posted on By blue

目录



一、Hadoop介绍

  • Hadoop: 开源的数据分析平台,解决了大数据(大到一台计算机无法进行存储,一台计算机无法在要求的时间内进行处理)的可靠存储和处理。适合处理结构化、非结构化数据,包括HDFS,MapReduce基本组件。

  • HDFS:提供了一种跨服务器的弹性数据存储系统。

  • MapReduce:技术提供了感知数据位置的标准化处理流程:读取数据,对数据进行映射(Map),使用某个键值对数据进行重排,然后对数据进行化简(Reduce)得到最终的输出。


二、Hadoop相关组件

  • Apache Hadoop: 是Apache开源组织的一个分布式计算开源框架,提供了一个分布式文件系统子项目(HDFS)和支持MapReduce分布式计算的软件架构。

  • Apache Hive: 是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。(数据仓库分析工具)

  • Apache Storm:其目标是大数据流的实时处理。Storm可以可靠地处理无限的数据流,实时处理Hadoop的批任务。STORM非常简单,支持所有的编程语言

  • Apache Pig: 是一个基于Hadoop的大规模数据分析工具,它提供的SQL-LIKE语言叫Pig Latin,该语言的编译器会把类SQL的数据分析请求转换为一系列经过优化处理的MapReduce运算。

  • Apache Mesos:Mesos提供了高效、跨分布式应用程序和框架的资源隔离和共享,支持Hadoop、 MPI、Hypertable、Spark等。(资源管理)

  • Apache HBase: 是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。(分布式数据库)

  • Apache Sqoop: 是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。

  • Apache Zookeeper: 是一个为分布式应用所设计的分布的、开源的协调服务,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,简化分布式应用协调及其管理的难度,提供高性能的分布式服务

  • Apache Mahout:是基于Hadoop的机器学习和数据挖掘的一个分布式框架。Mahout用MapReduce实现了部分数据挖掘算法,解决了并行挖掘的问题。

  • Apache Cassandra:是一套开源分布式NoSQL数据库系统。它最初由Facebook开发,用于储存简单格式数据,集Google BigTable的数据模型与Amazon Dynamo的完全分布式的架构于一身

  • Apache Avro: 是一个数据序列化系统,设计用于支持数据密集型,大批量数据交换的应用。Avro是新的数据序列化格式与传输工具,将逐步取代Hadoop原有的IPC机制

  • Apache Ambari: 是一种基于Web的工具,支持Hadoop集群的供应、管理和监控。

  • Apache Chukwa: 是一个开源的用于监控大型分布式系统的数据收集系统,它可以将各种各样类型的数据收集成适合 Hadoop 处理的文件保存在 HDFS 中供 Hadoop 进行各种 MapReduce 操作。

  • Apache Hama: 是一个基于HDFS的BSP(Bulk Synchronous Parallel)并行计算框架, Hama可用于包括图、矩阵和网络算法在内的大规模、大数据计算。

  • Apache Flume: 是一个分布的、可靠的、高可用的海量日志聚合的系统,可用于日志数据收集,日志数据处理,日志数据传输。

  • Apache Giraph: 是一个可伸缩的分布式迭代图处理系统, 基于Hadoop平台,灵感来自 BSP (bulk synchronous parallel) 和 Google 的 Pregel。

  • Apache Oozie: 是一个工作流引擎服务器, 用于管理和协调运行在Hadoop平台上(HDFS、Pig和MapReduce)的任务(调度工具)。

  • Apache Crunch: 是基于Google的FlumeJava库编写的Java库,用于创建MapReduce程序。与Hive,Pig类似,Crunch提供了用于实现如连接数据、执行聚合和排序记录等常见任务的模式库

  • Apache Whirr: 是一套运行于云服务的类库(包括Hadoop),可提供高度的互补性。Whirr学支持Amazon EC2和Rackspace的服务。

  • Apache Bigtop: 是一个对Hadoop及其周边生态进行打包,分发和测试的工具。

  • Apache HCatalog: 是基于Hadoop的数据表和存储管理,实现中央的元数据和模式管理,跨越Hadoop和RDBMS,利用Pig和Hive提供关系视图。

  • Hue: 是一个基于WEB的监控和管理系统,实现对HDFS,MapReduce/YARN, HBase, Hive, Pig的web化操作和管理。

更多Hadoop生态组件,详见:https://hadoopecosystemtable.github.io/


三、与Hadoop结合的常用工具

1、Spark

Spark主要意图是基于内存计算做更快的数据分析,Spark的性能相比Hadoop有很大提升,2014年10月,Spark完成了一个Daytona Gray类别的Sort Benchmark测试,排序完全是在磁盘上进行的,与Hadoop之前的测试的对比结果如表格所示:

从表格中可以看出排序100TB的数据(1万亿条数据),Spark只用了Hadoop所用1/10的计算资源,耗时只有Hadoop的1/3

Spark的优势不仅体现在性能提升上的,Spark框架为批处理(Spark Core),交互式(Spark SQL),流式(Spark Streaming),机器学习(MLlib),图计算(GraphX)提供一个统一的数据处理平台,这相对于使用Hadoop有很大优势。

2、Kafka

Kafka是一种分布式的,基于发布/订阅的消息系统。主要设计目标如下:

  • 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间复杂度的访问性能。

  • 高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条以上消息的传输。

  • 支持Kafka Server间的消息分区,及分布式消费,同时保证每个Partition内的消息顺序传输。

  • 同时支持离线数据处理和实时数据处理。

  • Scale out:支持在线水平扩展。

3、Impala

Impala是Cloudera公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase中的PB级大数据。已有的Hive系统虽然也提供了SQL语义,但由于Hive底层执行使用的是MapReduce引擎,仍然是一个批处理过程,难以满足查询的交互性。相比之下,Impala的最大特点也是最大卖点就是它的快速。

Impala架构图:

从技术角度上来看,Impala之所以能有好的性能,主要有以下几方面的原因:

  • Impala不需要把中间结果写入磁盘,省掉了大量的I/O开销。

  • 省掉了MapReduce作业启动的开销。MapReduce启动task的速度很慢(默认每个心跳间隔是3秒钟),Impala直接通过相应的服务进程来进行作业调度,速度快了很多。

  • Impala完全抛弃了MapReduce这个不太适合做SQL查询的范式,借鉴了MPP并行数据库的思想另起炉灶,因此可做更多的查询优化,从而省掉不必要的shuffle、sort等开销。

  • 通过使用LLVM来统一编译运行时代码,避免了为支持通用编译而带来的不必要开销。

  • 用C++实现,做了很多有针对性的硬件优化,例如使用SSE指令。

  • 使用了支持Data locality的I/O调度机制,尽可能地将数据和计算分配在同一台机器上进行,减少了网络开销。

通过实际使用,Impala比Hive能提高3~90的效率,并且可以和Hive结合完美,共用元数据。

4、ElasticSearch

Elasticsearch能够提供近乎实时的响应速度(毫秒等级),这极大的改善了Hadoop job的执行速度以及执行的各种开销。使用Elasticsearch,你就可以将搜索工作交给搜索引擎去完成,而专注于其它方面的工作,例如数据转换。Elasticsearch-Hadoop项目为Hadoop提供了直接的整合功能,因此用户使用起来没有任何障碍。

常见的Elasticsearch使用如上图所示,通过Nginx作为中间件,对外提供统一的数据接口。


四、常见的Hadoop系统架构

1、MapR公司推荐的Hadoop架构

将一个Hadoop系统分为:

  • Data Stroage(数据存储层)

    使用HDFS/Amazon S3等对数据提供底层存储

  • Data Processing(数据处理层)

    使用Map Reduce开发批量离线任务

    使用Spark完成实时交互的任务

    数据流作业采用Storm来进行处理

    机器学习使用Mahout/Mllib

  • Data Access(数据访问层)

    使用Hive、Impala、Drill进行SQL查询

    使用Solr/ElasticSearch提供数据查询接口

    使用NFS引用已存在的业务数据

    通过Sqoop导入关系型数据库

    通过Flume收集其它相关日志

  • Management(集群管理层)

    使用Oozie进行作业调度

    使用Nagios/Ganglia/Chukwa对集群性能进行监控

    使用Zookeeper对集群各种状态进行统一管理

2、TalkingData数据中心平台

TalkingData(北京腾云天下科技有限公司),是中国最大的独立第三方移动数据服务平台。

在数据中心平台中,Kafka作为日志汇集的通道,收集业务系统的的日志,实时地写入到Kafka 中,从而方便后续的数据消费。

利用Spark Streaming,对Kafka中的数据进行消费处理。在整个架构中,Spark Streaming主要完成了以下工作:

  • 原始日志的保存。将Kafka中的原始日志以JSON格式无损的保存在HDFS中。

  • 数据清洗和转换,清洗和标准化之后,转变为Parquet格式,存储在HDFS中,方便后续的各种数据计算任务。

  • 定义好的流式计算任务,比如基于频次规则的标签加工等等,计算结果直接存储在MongoDB中。

同时使用Spark和Parquet列式存储带来的性能提升,利用YARN提供的资源管理能力,保障多维度分析资源可用

一个针对数据业务部门的自服务大数据平台,基于围绕YARN和Spark的架构,数据业务部门可以方便地利用这个平台对进行多维度的分析、数据的抽取,以及进行自定义的标签加工。通过以上架构,提高了数据利用的能力,同时也大大提高了数据利用的效率。

3、七牛云存储日志处理系统

七牛云存储(以下简称七牛),是专为移动时代开发者打造的数据管理平台,为互联网网站和移动App提供数据的在线托管、传输加速以及图片、音视频等富媒体的云处理服务。

七牛云存储日志处理系统,使用Flume+Kafka+Spark 混部在8台高配机器,日均处理500亿条数据,峰值80w TPS。

七牛将日志处理分为三个大的步骤:

日志收集:使用Agent,收集原始业务日志,并将日志发送到Flume

日志流转: Flume将日志发送到Kafka集群,作为Kafka生产者

日志计算:离线计算,消费Kafka,存入HDFS,用于离线任务。实时计算,通过Spark Streaming实时消费数据,将计算结果,存入到DB中。


五、Hadoop知名服务商

1、亚马逊

亚马逊在2009年推出了亚马逊弹性MapReduce(Amazon Elastic MapReduce),,无论用户是运行试点项目的新手,还是内部部署的预置型系统遇到需求过载时,利用弹性MapReduce来获取额外容量的专业人士

弹性MapReduce是一项能够迅速扩展的Web服务,运行在亚马逊弹性计算云(Amazon EC2)和亚马逊简单存储服务(Amazon S3)上。这可是货真价实的云:面对数据密集型任务,比如互联网索引、数据挖掘、日志文件分析、机器学习、金融分析、科学模拟和生物信息学研究,用户需要多大容量,立即就能配置到多大容量。

2、Cloudera

由于Hadoop深受客户欢迎,许多公司都推出了各自版本的Hadoop,也有一些公司则围绕Hadoop开发产品。在Hadoop生态系统中,规模最大、知名度最高的公司则是Cloudera。

3、Hortonworks

Hortonworks公司在2011年从雅虎拆分出来,凭借一支由近50人组成的核心团队(其中一些人是Hadoop社区最资深最多产的贡献者),办成了一家完全致力于推进这个开源平台的独立公司。

其他Hadoop服务商还有:MapR Technologies、微软Hadoop on Azure、Intel Hadoop等


六、其他

1、hadoop1.x和hadoop2.x的区别

Hadoop2相比较于Hadoop1.x来说,HDFS的架构与MapReduce的都有较大的变化,且速度上和可用性上都有了很大的提高,Hadoop2中有两个重要的变更:

  • HDFS的NameNodes可以以集群的方式布署,增强了NameNodes的水平扩展能力和可用性;

  • MapReduce将JobTracker中的资源管理及任务生命周期管理(包括定时触发及监控),拆分成两个独立的组件,并更名为YARN(Yet Another Resource Negotiator)。

除此之外,还解决了如下问题:

  • 解决了namenode单点故障问题。
  • 解决namenode内存压力过大难以扩展问题。
  • 解决JobTracker单点故障问题。
  • 解决JobTracker访问压力过大问题。
  • 解决对MapReduce之外的框架支持问题。

2、 Hadoop的局限和不足

  • 抽象层次低,需要手工编写代码来完成,使用上难以上手。

  • 只提供两个操作,Map和Reduce,表达力欠缺。

  • 一个Job只有Map和Reduce两个阶段(Phase),复杂的计算需要大量的Job完成,Job之间的依赖关系是由开发者自己管理的。

  • 处理逻辑隐藏在代码细节中,没有整体逻辑

  • 中间结果也放在HDFS文件系统中

  • ReduceTask需要等待所有MapTask都完成后才可以开始

  • 延时高,只适用Batch数据处理,对于交互式数据处理,实时数据处理的支持不够,对于迭代式数据处理性能比较差

比如说,用MapReduce实现两个表的Join都是一个很有技巧性的过程,如下图所示:

因此,在Hadoop推出之后,出现了很多相关的技术对其中的局限进行改进,如Pig,Hive,Storm,OOzie,Tez,Spark等。