大家好,又见面了,我是你们的朋友全栈君。
现在先让我们了解一下 Hadoop 生态系统的构成,主要认识 Hadoop 生态系统都包括那些子项目,每个项目都有什么特点,每个项目都能解决哪一类问题,能回答这三个问题就可以了(本段属于热身…重在理解 Hadoop 生态系统组成,现状,发展,将来)。
HDFS(HadoopDistributedFileSystem,Hadoop 分布式文件系统)是 Hadoop 体系中数据存储管理的基础。它是一个高度容错的系统,能检测和应对硬件故障,用于在低成本的通用硬件上运行。HDFS 简化了文件的一致性模型,通过流式数据访问,提供高吞吐量应用程序数据访问功能,适合带有大型数据集的应用程序。
MapReduce 是一种计算模型,用以进行大数据量的计算。Hadoop 的 MapReduce实现,和 Common、HDFS 一起,构成了 Hadoop 发展初期的三个组件。MapReduce 将应用划分为 Map 和 Reduce 两个步骤,其中 Map 对数据集上的独立元素进行指定的操作,生成键-值对形式中间结果。Reduce 则对中间结果中相同“键”的所有“值”进行规约,以得到最终结果。MapReduce 这样的功能划分,非常适合在大量计算机组成的分布式并行环境里进行数据处理。
HBase 是一个针对结构化数据的可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库。和传统关系数据库不同,HBase 采用了 BigTable 的数据模型:增强的稀疏排序映射表(Key/Value),其中,键由行关键字、列关键字和时间戳构成。HBase 提供了对大规模数据的随机、实时读写访问,同时,HBase 中保存的数据可以使用 MapReduce 来处理,它将数据存储和并行计算完美地结合在一起。
Hive是Hadoop中的一个重要子项目,最早由Facebook设计,是建立在Hadoop基础上的数据仓库架构,它为数据仓库的管理提供了许多功能,包括:数据 ETL(抽取、转换和加载)工具、数据存储管理和大型数据集的查询和分析能力。Hive提供的是一种结构化数据的机制,定义了类似于传统关系数据库中的类 SQL 语言:HiveQL,通过该查询语言,数据分析人员可以很方便地运行数据分析业务(将SQL 转化为 MapReduce 任务在 Hadoop 上执行)。
Pig 运行在 Hadoop 上,是对大型数据集进行分析和评估的平台。它简化了使 用 Hadoop 进行数据分析的要求,提供了一个高层次的、面向领域的抽象语言:PigLatin。通过 PigLatin,数据工程师可以将复杂且相互关联的数据分析任务编码为 Pig 操作上的数据流脚本,通过将该脚本转换为 MapReduce 任务链,在Hadoop 上执行。和 Hive 一样,Pig 降低了对大型数据集进行分析和评估的门槛。
在分布式系统中如何就某个值(决议)达成一致,是一个十分重要的基础问题。ZooKeeper 作为一个分布式的服务框架,解决了分布式计算中的一致性问题。
在此基础上,ZooKeeper 可用于处理分布式应用中经常遇到的一些数据管理问题,如统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。
ZooKeeper 常作为其他 Hadoop 相关项目的主要组件,发挥着越来越重要的作用。
Mahout 起源于 2008 年,最初是 ApacheLucent 的子项目,它在极短的时间内取得了长足的发展,现在是 Apache 的顶级项目。Mahout 的主要目标是创建一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout 现在已经包含了聚类、分类、推荐引擎(协同过滤)和频繁集挖掘等广泛使用的数据挖掘方法。除了算法,Mahout 还包含数据的输入/输出工具、与其他存储系统(如数据库、MongoDB 或 Cassandra)集成等数据挖掘支持架构。
Flume 是 Cloudera 开发维护的分布式、可靠、高可用的日志收集系统。它将数据从产生、传输、处理并最终写入目标的路径的过程抽象为数据流,在具体的数据流中,数据源支持在 Flume 中定制数据发送方,从而支持收集各种不同协议数据。同时,Flume 数据流提供对日志数据进行简单处理的能力,如过滤、格式转换等。此外,Flume 还具有能够将日志写往各种数据目标(可定制)的能力。
总的来说,Flume 是一个可扩展、适合复杂环境的海量日志收集系统。
Sqoop 是 SQL-to-Hadoop 的缩写,是 Hadoop 的周边工具,它的主要作用是在结构化数据存储与 Hadoop 之间进行数据交换。Sqoop 可以将一个关系型数据库(例如 MySQL、Oracle、PostgreSQL 等)中的数据导入 Hadoop 的 HDFS、Hive 中,也可以将 HDFS、Hive 中的数据导入关系型数据库中。Sqoop 充分利用了 Hadoop的优点,整个数据导入导出过程都是用 MapReduce 实现并行化,同时,该过程中的大部分步骤自动执行,非常方便。
Accumulo 是一个可靠的、可伸缩的、高性能的排序分布式的 Key-Value 存储解决方案,基于单元访问控制以及可定制的服务器端处理。使用 GoogleBigTable设计思路,基于 ApacheHadoop、Zookeeper 和 Thrift 构建。
Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark 是UCBerkeleyAMPlab( 加 州 大 学 伯 克 利 分 校 的 AMP 实验室 ) 所 开 源 的 类HadoopMapReduce 的通用并行框架,Spark,拥有HadoopMapReduce 所具有的优点;但不同于 MapReduce 的是——Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。
Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。
Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架。与 Hadoop不同,Spark 和 Scala 能够紧密集成,其中的 Scala 可以像操作本地集合对象一样轻松地操作分布式数据集。
尽管创建 Spark 是为了支持分布式数据集上的迭代作业,但是实际上它是对Hadoop 的补充,可以在 Hadoop 文件系统中并行运行。通过名为 Mesos 的第三方集群框架可以支持此行为。Spark 由加州大学伯克利分校 AMP 实验室 (Algorithms,Machines,andPeopleLab)开发,可用来构建大型的、低延迟的数据分析应用程序。
Avro 是一个数据序列化系统,设计用于支持大批量数据交换的应用。它的主 要特点有:支持二进制序列化方式,可以便捷,快速地处理大量数据;动态语言友好,Avro 提供的机制使动态语言可以方便地处理 Avro 数据。当前市场上有很多类似的序列化系统,如 Google 的 Protocol Buffers, Facebook 的 Thrift。这些系统反响良好,完全可以满足普通应用的需求。针对重复开发的疑惑,Doug Cutting 撰文解释道:Hadoop 现存的 RPC 系统遇到一些
问题,如性能瓶颈(当前采用 IPC 系统,它使用 Java 自带的 DataOutputStream 和 DataInputStream);需要服务器端和客户端必须运行相同版本的 Hadoop;只能使用 Java 开发等。但现存的这些序列化系统自身也有毛病,以 ProtocolBuffers 为例,它需要用户先定义数据结构,然后根据这个数据结构生成代码,再组装数据。如果需要操作多个数据源的数据集,那么需要定义多套数据结构并重复执行多次上面的流程,这样就不能对任意数据集做统一处理。其次,对于 Hadoop 中 Hive 和 Pig 这样的脚本系统来说,使用代码生成是不合理的。并且 Protocol Buffers 在序列化时考虑到数据定义与数据可能不完全匹配,在数据中添加注解,这会让数据变得庞大并拖慢处理速度。其它序列化系统有如 Protocol Buffers 类似的问题。所以为了 Hadoop 的前途考虑,Doug Cutting 主导开发一套全新的序列化系统,这就是 Avro,于 09 年加入 Hadoop 项目族中。
Apache Crunch 是基于 FlumeJava 实现的,它是一个基于 MapReduce 的数 据管道库。Apache Crunch 是一个 Java 类库,它用于简化 MapReduce 作业的 编写和执行,并且可以用于简化连接和数据聚合任务 API 的 Java 类库。与 Pig 和 Hive 一样,Crunch 是为了降低 MapReduce 的入门成本。它们的区别是:
Pig 是一个基于管道的框架,而 Crunch 则是一个 Java 库,它提供比 Pig 更高级别的灵活性。
HUE=Hadoop User Experience
Hue 是一个开源的 Apache Hadoop UI 系统,由 Cloudera Desktop 演化而来,最后 Cloudera 公司将其贡献给 Apache 基金会的 Hadoop 社区,它是基于 Python Web 框架 Django 实现的。
通过使用 Hue,可以在浏览器端的 Web 控制台上与 Hadoop 集群进行交互,来分析处理数据,例如操作 HDFS 上的数据,运行 MapReduce Job,执行 Hive 的 SQL语句,浏览 HBase 数据库等等。(就是支持提供各种 Web 图形化界面的)。
Impala 是 Cloudera 公司主导开发的新型查询系统,它提供 SQL 语义,能查询存储在 Hadoop 的 HDFS 和 HBase 中的 PB 级大数据。已有的 Hive 系统虽然也 提供了 SQL 语义,但由于 Hive 底层执行使用的是 MapReduce 引擎,仍然是一个批处理过程,难以满足查询的交互性。相比之下,Impala 的最大特点也是最大卖点就是它的快速。
Kafka 是由 Apache 软件基金会开发的一个开源流处理平台,由 Scala 和 Java
编写。Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在
网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。
对于像 Hadoop 一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka 的目的是通过 Hadoop 的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。
Kudu 是 cloudera 开源的运行在 hadoop 平台上的列式存储系统,拥有 Hadoop生态系统应用的常见技术特性,运行在一般的商用硬件上,支持水平扩展,高可用。
Oozie由 Cloudera 公司贡献给 Apache 的基于工作流引擎的开源框架,是用于 Hadoop平台的开源的工作流调度引擎,是用来管理 Hadoop 作业,属于 web 应用程序,由 Oozie client 和 Oozie Server 两个组件构成,Oozie Server 运行于Java Servlet 容器(Tomcat)中的 web 程序。
Sentry 是一个开源的实时错误追踪系统,可以帮助开发者实时监控并修复异常问题。它主要专注于持续集成、提高效率并且提升用户体验。Sentry 分为服务端和客户端 SDK,前者可以直接使用它家提供的在线服务,也可以本地自行搭建;后者提供了对多种主流语言和框架的支持,包括 React、Angular、Node、Django、RoR、PHP、Laravel、Android、.NET、JAVA 等。同时它可提供了和其他流行服务集成的方案,例如 GitHub、GitLab、bitbuck、heroku、slack、Trello 等。
注意:Apache Parquet 是一种能够有效存储嵌套数据的列式存储格式。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/144441.html原文链接:https://javaforall.cn