• 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!

Hadoo实战:Hadoop生态圈组件介绍

Hadoop 彭东稳 7年前 (2017-04-25) 25325次浏览 已收录 0个评论

Hadoop生态圈组件介绍

Hadoo实战:Hadoop生态圈组件介绍

Hadoop生态图,家族产品,通俗地说,就是Hadoop核心模块和衍生的子项目。常用的项目包括Hadoop, Hive, Pig, HBase, Sqoop, Mahout, Zookeeper, Avro, Ambari, Chukwa,新增加的项目包括,YARN, Hcatalog, Oozie, Cassandra, Hama, Whirr, Flume, Bigtop, Crunch, Hue等。截止到2013年,根据cloudera的统计,Hadoop家族产品已经达到20个!http://blog.cloudera.com/blog/2013/01/apache-hadoop-in-2013-the-state-of-the-platform

常用组件:

  • Apache Hadoop

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

  • Apache Hive

在Hadoop集群基础上,如果用户需要查询数据的话就需要编写map reduce函数,而Hive就是解决普通用户利用sql语句输入到hive程序,然后hive程序再把对应的sql语句转换为map reduce函数提交给map reduce进行查询。是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

Hive支持一种与SQL几乎完全相同的语言hiveQL、除了不支持更新、索引和事务;几乎SQL的其它特征都能支持,可以看成是从SQL到Map Reduce的映射器。

  • Apache Pig

它是Hadoop的一个扩展,简化了Hadoop的编程,提供了一个高级数据处理语言Pig Latin,Pig Latin可以完成排序、过滤、求和、聚合等操作,并且保持了Hadoop易于扩展与可靠的特征。该语言的编译器会把类SQL的数据分析请求转换为一系列经过优化处理的MapReduce运算。减少用户编写java程序的苦恼。

  • Apache HBase

Google bigtable的开源实现(一张表即可用),是一个高可靠性、高性能、面向列式、可伸缩的分布式存储系统。

利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。HDFS系统利用hive可以查看数据,但是还是不能修改数据,而hbase就是HDFS的客户端同样部署在每一个HDFS节点上;Hbase知道如何跟HDFS交互并且以类似表的形式可以查看和修改删除数据。

  • Apache Sqoop

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

  • Apache Oozie

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

  • Apache Mahout

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

  • Apache Flume

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

  • Apache ZooKeeper

在通过一组服务器向客户端提供服务的场景中,需要客户端能定位各服务器以便使用其提供的服务。然而这面临的挑战之一便是如何维持这个服务器列表——其显然不能放置于网络中的某单个节点上,否则此节点故障将导致整个系统不可用。即便我们有办法保证存储此服务器列表的节点不会出现故障,但当列表中的某服务器故障时将其移出列表仍然会是个问题,故障的服务器无法自行退出列表,因此这需要外部的一组处理动作来完成。Zookeeper正是设计用来提供这种服务.

可以把Zookeeper想像成为一个提供高可用功能的文件系统,它没有文件或目录,而用znode来统一实现目录及文件的功能,它既可以存储数据,又可以包含其它的znode。所有的znodes组成一个层次性的名称空间,父节点的名称为某服务器组的名称,其子节点的名称为此组中的各服务器名称.

开发分布式程序是比较困难的,主要原因在于“部分性错误”——当报文通过网络在两个节点间传递的过程中发生了网络错误,此时,发送方对数据是否已经完整发送至对方无从知晓。惟一可以获知此相关信息的途径是重新连接收方并向其发出询问,但这本身也还是一个问题——我们无法得知询问本身是否正常完成.

ZooKeeper并不能消除“部分性错误”,因为其本质上也是分布式系统。因此,其当然也无法隐藏“部分性错误”。然而,ZooKeeper提供了一组工具,它们能够帮助程序员构建可安全处理“部分式错误”的分布式应用程序。当然,ZooKeeper还有着诸多优点:

1) 简洁:ZooKeeper的核心是一个精简的文件系统,它仅提供了几个简单操作和一些额外的抽像机制如排序和通知等功能;

2) 富于表现力:ZooKeeper的本体是一组丰富的可用于构建大规模协作式数据结构和协议的代码块,这包括分布式队列、分布式锁以及在一组节点中推举主导节点等;

3) 高可用:ZooKeeper运行于一组主机,设计人员在对其进行设计时就充分考虑到节点故障的可能性并由此给系统带来的问题,由此为其添加了高可用能力;

4) 松耦合的交互性:ZooKeeper的交互式并不要求协作方事先互相知悉彼此的存在,甚至也不要求各协作方预先进行同步;

5) 开源:ZooKeeper是一个开源项目;

6) 高性能;

  • Spark

是一个快速的,通用的实时计算引擎。其也是一个分布式的架构,在内存中完成所有过程。所以当我们需要实时运算时,Spark非常好用,据说同样的程序Spark要比MapReduce快100倍。目前Spark非常火,其对应的还有SparkSQL引擎。

  • Apache Ambari

是一种基于Web的工具,支持Hadoop集群的配置、管理和监控。Hadoop组件相当多,且目前还没有好的一体化安装方式,所以这个工具还是不错的选择。

其他组件:

  • Apache Cassandra

是一套开源分布式NoSQL数据库系统吗,它最初由Facebook开发,用于储存简单格式数据,集Google BigTable的数据模型与Amazon Dynamo的完全分布式的架构于一身。只有顺序写、没有随机写的设计满足高负荷情形的性能需求类似Hbase。Facebook研发的,但是现在据说Facebook都是使用Hbase。

  • Apache Avro

是一款数据序列化工具,由Hadoop的创始人doug cutting主持开发,用于支持大批量数据交换的应用、支持二进制序列化方式、可以便捷、快速地处理大量数据。是一个数据序列化系统,设计用于支持数据密集型,大批量数据交换的应用。Avro是新的数据序列化格式与传输工具,将逐步取代Hadoop原有的IPC机制。

  • Apache Chukwa

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

  • Apache Hama

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

  • Apache Giraph

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

  • 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提供关系视图。

  • Cloudera Hue

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

Hadoop运行框架

MapReduce程序也称作为MapReduce作业,一般由mapper代码、reducer代码以及其配置参数(如从哪儿读入数据,以及输出数据的保存位置)组成。准备好的作业可通过JobTracker(作业提交节点)进行提交,然后由运行框架负责完成后续的其它任务。这些任务主要包括如下几个方面。

1) 调度:每个MapReduce作业都会划分为多个称作任务(task)的较小单元,而较大的作业划分的任务数量也可能会超出整个集群可运行的任务数,此时就需要调度器程序维护一个任务队列并能够追踪正在运行态任务的相关进程,以便让队列中处于等待状态的任务派送至某转为可用状态的节点运行。此外,调度器还要负责分属于不同作业的任务协调工作。对于一个运行中的作业来说,只有所用的map任务都完成以后才能将中间数据分组、排序后发往reduce作业,因此,map阶段的完成时间取决于其最慢的一个作业的完成时间。类似的,reduce阶段的最后一个任务执行结束,其最终结果才为可用。因此,MapReduce作业完成速度则由两个阶段各自任务中的掉队者决定,最坏的情况下,这可能会导致作业长时间得不到完成。出于优化执行的角度,Hadoop和Google MapReduce实现了推测执行(Speculative execution)机制,即同一个任务会在不同的主机上启动多个执行副本,运行框架从其最快执行的任务中取得返回结果。不过,推测执行并不能消除其它的滞后场景,比如中间键值对数据的分发速度等。

2) 数据和代码的协同工作(data/code co-location):术语“数据分布”可能会带来误导,因为MapReduce尽力保证的机制是将要执行的代码送至数据所在的节点执行,因为代码的数据量通常要远小于要处理的数据本身。当然,MapReduce并不能消除数据传送,比如在某任务要处理的数据所在的节点已经启动很多任务时,此任务将不得不在其它可用节点运行。此时,考虑到同一个机架内的服务器有着较充裕的网络带宽,一个较优选择是从数据节点同一个机架内挑选一个节点来执行此任务。

3) 同步(Synchronization):异步环境下的一组并发进程因直接制约而互相发送消息而进行互相合作、互相等待,使得各进程按一定的速度执行的过程称为进程间同步,其可分为进程同步(或者线程同步)和数据同步。就编程方法来说,保持进程间同步的主要方法有内存屏障(Memory barrier),互斥锁(Mutex),信号量(Semaphore)和锁(Lock),管程(Monitor),消息(Message),管道(Pipe)等。MapReduce是通过在map阶段的进程与reduce阶段的进程之间实施隔离来完成进程同步的,即map阶段的所有任务都完成后对其产生的中间键值对根据键完成分组、排序后通过网络发往各reducer方可开始reduce阶段的任务,因此这个过程也称为“shuffle and sort”。

4) 错误和故障处理(Error and fault handling):MapReduce运行框架本身就是设计用来容易发生故障的商用服务器上了,因此,其必须有着良好的容错能力。在任何类别的硬件故障发生时,MapReduce运行框架均可自行将运行在相关节点的任务在一个新挑选出的节点上重新启动。同样,在任何程序发生故障时,运行框架也要能够捕获异常、记录异常并自动完成从异常中恢复。另外,在一个较大规模的集群中,其它任何超出程序员理解能力的故障发生时,MapReduce运行框架也要能够安全挺过。


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (5)
[资助本站您就扫码 谢谢]
分享 (0)

您必须 登录 才能发表评论!