一 . hadoop 生态概况
Hadoop 是一个由 Apache 基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。具有可靠、高效、可伸缩的特点。
Hadoop 的核心是 YARN,HDFS 和 Mapreduce
下图是 hadoop 生态系统,集成 spark 生态圈。在未来一段时间内, hadoop 将于spark 共存, hadoop 与 spark 都能部署在 yarn 、 mesos 的资源管理系统之上。
1 、 HDFS ( Hadoop 分布式文件系统)
源自于 Google 的 GFS 论文,发表于 2003 年 10 月, HDFS 是 GFS 克隆版。
HDFS 是 Hadoop 体系中数据存储管理的基础。它是一个高度容错的系统,能检测和应对硬件故障,用于在低成本的通用硬件上运行。
HDFS 简化了文件的一致性模型,通过流式数据访问,提供高吞吐量应用程序数据访问功能,适合带有大型数据集的应用程序。
它提供了一次写入多次读取的机制,数据以块的形式,同时分布在集群不同物理机器上。
2 、 Mapreduce (分布式计算框架)
源自于 google 的 MapReduce 论文,发表于 2004 年 12 月, HadoopMapReduce是 google MapReduce 克隆版。
MapReduce 是一种分布式计算模型,用以进行大数据量的计算。它屏蔽了分布式计算框架细节,将计算抽象成 map 和 reduce 两部分,
其中 Map 对数据集上的独立元素进行指定的操作,生成键 - 值对形式中间结果。Reduce 则对中间结果中相同“键”的所有“值”进行规约,以得到最终结果。
MapReduce 非常适合在大量计算机组成的分布式并行环境里进行数据处理。
3. HBASE (分布式列存数据库)
源自 Google 的 Bigtable 论文,发表于 2006 年 11 月, HBase 是 GoogleBigtable克隆版。
HBase 是一个建立在 HDFS 之上,面向列的针对结构化数据的可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库。
HBase 采用了 BigTable 的数据模型:增强的稀疏排序映射表( Key/Value ),其中,键由行关键字、列关键字和时间戳构成。
HBase 提供了对大规模数据的随机、实时读写访问,同时, HBase 中保存的数据可以使用 MapReduce 来处理,它将数据存储和并行计算完美地结合在一起。
4. Zookeeper (分布式协作服务)
源自 Google 的 Chubby 论文,发表于 2006 年 11 月, Zookeeper 是 Chubby 克隆版
解决分布式环境下的数据管理问题:统一命名,状态同步,集群管理,配置同步等
Hadoop 的许多组件依赖于 Zookeeper ,它运行在计算机集群上面,用于管理Hadoop 操作。
5. HIVE (数据仓库)
由 facebook 开源,最初用于解决海量结构化的日志数据统计问题。
Hive 定义了一种类似 SQL 的查询语言 (HQL), 将 SQL 转化为 MapReduce 任务在Hadoop 上执行。通常用于离线分析。
HQL 用于运行存储在 Hadoop 上的查询语句, Hive 让不熟悉 MapReduce 开发人员也能编写数据查询语句,然后这些语句被翻译为 Hadoop 上面的 MapReduce 任务。
6.Pig(ad-hoc 脚本)
由 yahoo! 开源,设计动机是提供一种基于 MapReduce 的 ad-hoc( 计算在 query 时发生 ) 数据分析工具
Pig 定义了一种数据流语言― PigLatin ,它是 MapReduce 编程的复杂性的抽象 ,Pig平台包括运行环境和用于分析 Hadoop 数据集的脚本语言 (Pig Latin) 。
其编译器将 Pig Latin 翻译成 MapReduce 程序序列将脚本转换为 MapReduce 任务在 Hadoop 上执行。通常用于进行离线分析。
7.Sqoop( 数据 ETL/ 同步工具)
Sqoop 是 SQL-to-Hadoop 的缩写,主要用于传统数据库和 Hadoop 之前传输数据。数据的导入和导出本质上是 Mapreduce 程序,充分利用了 MR 的并行化和容错性。
Sqoop 利用数据库技术描述数据架构,用于在关系数据库、数据仓库和 Hadoop 之间转移数据。
8.Flume (日志收集工具)
Cloudera 开源的日志收集系统,具有分布式、高可靠、高容错、易于定制和扩展的特点。
它将数据从产生、传输、处理并最终写入目标的路径的过程抽象为数据流,在具体的数据流中,数据源支持在 Flume 中定制数据发送方,从而支持收集各种不同协议数据。
同时, Flume 数据流提供对日志数据进行简单处理的能力,如过滤、格式转换等。此外, Flume 还具有能够将日志写往各种数据目标(可定制)的能力。
总的来说, Flume 是一个可扩展、适合复杂环境的海量日志收集系统。当然也可以用于收集其他类型数据
9. Oozie( 工作流调度器)
Oozie 是一个可扩展的工作体系,集成于 Hadoop 的堆栈,用于协调多个MapReduce 作业的执行。它能够管理一个复杂的系统,基于外部事件来执行,外部事件包括数据的定时和数据的出现。
Oozie 工作流是放置在控制依赖 DAG (有向无环图 DirectAcyclic Graph )中的一组动作(例如, Hadoop 的 Map/Reduce 作业、 Pig 作业等),其中指定了动作执行的顺序。
Oozie 使用 hPDL (一种 XML 流程定义语言)来描述这个图。
10. Yarn( 分布式资源管理器)
YARN 是下一代 MapReduce ,即 MRv2 ,是在第一代 MapReduce 基础上演变而来的,主要是为了解决原始 Hadoop 扩展性较差,不支持多计算框架而提出的。
yarn 是下一代 Hadoop 计算平台, yarn 是一个通用的运行时框架,用户可以编写自己的计算框架,在该运行环境中运行。
用于自己编写的框架作为客户端的一个 lib ,在运用提交作业时打包即可。该框架为提供了以下几个组件:
资源管理:包括应用程序管理和机器资源管理
资源双层调度
容错性:各个组件均有考虑容错性
扩展性:可扩展到上万个节点
内存 DAG 计算模型 )
11. Spark 是一个 Apache 项目,它被标榜为“快如闪电的集群计算”。它拥有一个繁荣的开源社区,并且是目前最活跃的 Apache 项目。
最早 Spark 是 UC BerkeleyAMP lab 所开源的类 Hadoop MapReduce 的通用的并行计算框架。
Spark 提供了一个更快、更通用的数据处理平台。和 Hadoop 相比, Spark 可以让你的程序在内存中运行时速度提升 100 倍,或者在磁盘上运行时速度提升 10 倍
12. Kafka (分布式消息队列)
Kafka 是 Linkedin 于 2010 年 12 月份开源的消息系统,它主要用于处理活跃的流式数据。
活跃的流式数据在 web 网站应用中非常常见,这些数据包括网站的 pv 、用户访问了什么内容,搜索了什么内容等。
这些数据通常以日志的形式记录下来,然后每隔一段时间进行一次统计处理。
13.Ambari (安装部署配置管理工具)
Apache Ambari 的作用来说,就是创建、管理、监视 Hadoop 的集群,是为了让Hadoop 以及相关的大数据软件更容易使用的一个 web 工具。