1.3 Hadoop生态系统
Hadoop面世之后快速发展,相继开发出了很多组件。这些组件各有特点,共同提供服务给Hadoop相关的工程,并逐渐形成了系列化的组件系统,通常被称为Hadoop生态系统。由于大部分组件的LOGO选用了动物图形,因此Hadoop的生态系统就像是一群动物在狂欢,如图1-8所示。
图1-8 Hadoop的生态系统
下面列出一些Hadoop常用组件,不同的组件分别提供特定的服务。
(1)HBase
HBase 是一个针对非结构化数据的可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库。HBase提供了对大规模数据的随机、实时读/写访问,同时,HBase中保存的数据可以使用MapReduce来处理,它将数据存储和并行计算完美地结合在一起。
HBase适用的场景:大数据量(TB级数据)且有快速随机访问的需求(例如淘宝交易记录);及时响应用户的需求;业务场景简单,不需要关系数据库中的很多特性(交叉,连接);需要扩充数据库结构。
(2)Hive
Hive是建立在 Hadoop上的数据仓库基础构架。它提供了一系列的工具,可存储、查询和分析存储在Hadoop中的大规模数据。Hive定义了一种类SQL语言——HQL。通过简单的HQL语言将数据操作转换为复杂的MapReduce,运行在Hadoop大数据平台上。
Hive 是一款分析历史数据的利器。但是 Hive 只有在结构化数据的情况下才能大显神威。Hive处理有延迟性,Hive的最佳使用场合是大数据集的批处理作业,例如网络日志分析。
(3)Pig
Pig是一个基于Hadoop的大规模数据分析框架,它提供的SQL-LIKE语言叫Pig Latin。该语言的编译器会把类 SQL 的数据分析请求转换成一系列经过优化处理的 MapReduce 运算。数据格式非常灵活,可以自由转化,并且在运算过程中用关系进行存储,减少了文件的输出。
Pig 放宽了对数据存储的要求,适用于非结构化的数据集,可以充分利用 SQL。它支持复合数据类型(Map、Tuple、Bag),支持常见的数据操作,例如筛选、排序和Join,适用于日志数据的处理。雅虎和Twitter都采用了Pig处理数据。
(4)Sqoop
Sqoop 是一款开源的工具,主要用于在 Hadoop(Hive)与传统的数据库(MySQL、PostgreSQL 等)间进行数据的传递,可以将一个关系型数据库中的数据导入到 Hadoop 的HDFS中,也可以将HDFS的数据导出到关系型数据库中。
对于结构化数据库,采用Sqoop是合适的,可以实现结构化数据库中的数据并行批量入库到HDFS存储。
(5)Flume
Flume是Cloudera提供的一个高可用的、高可靠的、分布式的海量日志采集、聚合和传输的系统。Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume可对数据进行简单处理,并写到各种数据接收方(可定制)。
如果数据来源很多、数据流向很多,可以使用Flume,适用于日志文件的采集。
(6)Oozie
Oozie是基于Hadoop的调度器,以xml的形式写调度流程,可以调度MapReduce、Pig、Hive、Shell、JAR任务等。
当一个工作任务中需要调用几个任务时,一个任务完成再启动另一个是比较麻烦的,这个时候就可以用Oozie将任务串联,通过Oozie调动整个任务进程。
(7)ZooKeeper
ZooKeeper 可解决分布式环境下的数据管理问题:统一命名、状态同步、集群管理、配置同步等。
ZooKeeper 的使用主要是为了保证集群各项功能正常进行,在出现异常时能够及时通知处理,保持数据一致性,是对整个集群的监控。
(8)Mahout
Mahout的主要目标是创建一些可扩展的机器学习领域经典算法,旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout现在已经包含了聚类、分类、推荐引擎(协同过滤)和频繁集挖掘等广泛使用的数据挖掘方法。除了算法外,Mahout还包含数据的输入/输出工具、与其他存储系统(如数据库、MongoDB 或Cassandra)集成等数据挖掘支持架构。
Mahout 主要的应用还是通过提供机器算法包使得用户在使用的过程中能够通过调用算法包缩短编程时间,同时也减少用户复杂的算法程序对资源的消耗,当然用户的特殊需求除外。