首页 > 编程知识 正文

hadoop生态系统的开源工具,hadoop生态圈组件有哪些

时间:2023-05-04 16:44:30 阅读:56996 作者:3693

什么是大数据

大数据是什么? 有多大? 100克大吗? 用于存储1080P高清电影(即几部电影)的容量。 但是,100G全部是文本数据,例如云智慧透视宝的后端kafka中的数据的情况下,如果提取mobileTopic的数据,则【107,5505323054626937,LAN,LAN,unn】

数据之所以大,不仅是因为数据量巨大,各种渠道生成的数据既有IT系统生成的标准数据,也有大量多媒体类的非标准数据,数据种类繁多,充斥着大量不必要的数据

通常,在数据量大或业务复杂的情况下,常规技术无法及时有效地处理这么大量的数据。 在这种情况下,可以使用Hadoop。 这是由Apache基金会开发的分布式系统基础架构,使用户可以创建和运行分布式APP应用程序,并利用群集处理大型数据,而无需了解分布式基础架构的详细信息。 Hadoop可以构建在廉价的机器上。 例如,可以把我们废除的PC服务器或租用的云主机带来使用。

今天,云智能的mdqt先生将为大家介绍Hadoop生态圈中常用的组件。

根据Gartner的调查,到2015年,65%的分析APP应用程序和高级分析工具基于Hadoop平台,作为主要的大数据处理技术,Hadoop具有以下特点:

方便: Hadoop可以在由常见商用机器组成的大型群集上运行,也可以在云计算服务上运行

稳健性: Hadoop致力于在常见的商用硬件上运行,并且具有基于硬件频繁故障的前提架构。 Hadoop可以从容应对许多这样的故障。

可扩展:通过增加群集节点,Hadoop可以线性扩展以处理更大的数据集。

目前使用Hadoop最多的领域包括:

1 )搜索引擎DougCutting在设计Hadoop之初,是为了快速为大型网页编制索引。

2 )利用Hadoop分布式存储功能,如数据备份、数据仓库等的大数据存储。

3 )利用Hadoop分布式处理能力,如数据挖掘、数据分析等的大数据处理。

Hadoop生态系统与基础组件

在Hadoop2.0时引入了高可用性(HA )和YARN。 这是和1.0的最大区别。 Hadoop主要包括Mapreduce编程模型、HDFS分布式文件存储和YARN三部分。

上图为Hadoop生态系统,底层为HDFS作为数据存储,其他组件则以HDFS为基础进行组合和使用。 HDFS具有容错性强、适合批处理、适合大数据处理、可以在廉价的机器上构建等优点。 缺点是低延迟数据访问、小文件访问、并发写入和文件随机更改。

HadoopMapReduce是一个软件框架,它在由数千台商业机器组成的大型群集上运行,并便于创建以可靠、容错的方式并行处理TB大容量数据集的APP应用程序。 这个定义包含几个关键字。 软件框架、并行处理、可靠性和容错性、大型群集和大量数据集是MapReduce的特色。

MapReduce经典代码(wordCount ) )。

上面的代码接收很多文本数据,并计算这些文本数据中每个单词出现的次数。 MapReduce也是一种计算模型。 数据量大时,例如10个g时,可以将该10G的数据分成10个块,分发到10个节点上执行并汇总。 这就是并行计算,计算速度比用一台机器计算快得多。

HBase

在介绍了Hadoop的主要组件之后,我们来看看HBase。 HBase是一个可靠、高性能、面向列且可扩展的分布式存储系统,您可以利用HBase技术在廉价的PC服务器上构建大型结构化存储群集。 HBase是GoogleBigtable的开源实现,与GoogleBigtable使用GFS作为文件存储系统一样,HBase使用HadoopHDFS作为文件存储系统。 谷歌运行MapReduce处理Bigtable的大容量数据,HBase也利用HadoopMapReduce处理HBase的大容量数据; 谷歌bigtable使用Chubby作为协作服务,而HBase使用Zookeeper作为支持。

HBase和HDFS是什么关系? HBase正在使用HDFS的存储。 像MySQL和磁盘一样,MySQL是APP应用程序,磁盘是具体的存储介质。 HDFS由于自身的特性,不适合随机查找,对更新操作不太友好。 例如,百度网盘是用HDFS构建的,支持上传和删除,但用户不会直接修改作为网盘的文件内容。

HBase表格具有以下特征:

1 )大)一个表可以有几亿行,几百万列。

2 ) 面向列:面向列表(簇)的存储和权限控制,列(簇)独立检索。

3 ) 稀疏:对于为空(NULL)的列,并不占用存储空间,因此,表可以设计的非常稀疏。

HBase提供的访问方式有命令行shell方式,java API(最高效和常用的),Thrift Gateway 支持C++,PHP,Python等多种语言。

HBase的使用场景:

• 需对数据进行随机读操作或者随机写操作;

• 大数据上高并发操作,比如每秒对PB级数据进行上千次操作;

• 读写访问均是非常简单的操作,比如历史记录,历史订单查询,三大运营商的流量通话清单的查询。

Hive

之前我们说了MapReduce计算模型,但是只有懂Java的才能撸代码干这个事,不懂Java的想用Hadoop的计算模型是不是就没法搞了呢?比如HDFS里的海量数据,数据分析师想弄点数据出来,咋办?所以就要用到Hive,它提供了SQL式的访问方式供人使用。

Hive是由Facebook 开源, 最初用于解决海量结构化的日志数据统计问题的ETL(Extraction-Transformation-Loading) 工具,Hive是构建在Hadoop上的数据仓库平台,设计目标是可以用传统SQL操作Hadoop上的数据,让熟悉SQL编程的人员也能拥抱Hadoop(注意。是数据仓库。不是数据库啊。)

• 使用HQL作为查询接口

• 使用HDFS作为底层存储

• 使用MapReduce作为执行层

所以说Hive就是基于Hadoop的一个数据仓库工具,是为简化MapReduce编程而生的,非常适合数据仓库的统计分析,通过解析SQL转化成MapReduce,组成一个DAG(有向无环图)来执行。

Flume

Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、 聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。

当前Flume有两个版本Flume 0.9X版本的统称Flume-og,Flume1.X版本的统称Flume-ng,由于Flume-ng经过重大重构,与Flume-og有很大不同,使用时请注意区分。

Flume就是一个数据管道,支持很多源(source),sink(目标),和透视宝的suro很像,比如拉取nginx日志可以拿这个工具简单一配就可用。当然每台nginx服务器上都要配置并启动一个flume.

下面给大家看看配置文件(把kafka的数据写入hdfs的配置),配置很简单.完全免去了自己写一个kafka的consumer再调用hdfs的API写数据的工作量.

YARN

YARN是Hadoop 2.0中的资源管理系统,它的基本设计思想是将MRv1中的JobTracker拆分成了两个独立的服务:一个全局的资源调度器ResourceManager和每个应用程序特有的应用程序管理器ApplicationMaster,该调度器是一个 "纯调度器",不再参与任何与具体应用程序逻辑相关的工作,而仅根据各个应用程序的资源需求进行分配,资源分配的单位用一个资源抽象概念 "Container" 来表示,Container 封装了内存和 CPU。此外,调度器是一个可插拔的组件,大数据培训用户可根据自己的需求设计新的调度器,YARN 自身提供了 Fair Scheduler 和 Capacity Scheduler。

应用程序管理器负责管理整个系统中所有应用程序,包括应用程序的提交、与调度器协商资源以启动 ApplicationMaster、监控 ApplicationMaster 运行状态并在失败时重新启动等。

Ambari

Ambari是一个集群的安装和管理工具,云智慧之前用的是Apache的Hadoop,运维同学用源码包安装,一个个配置文件去改,再分发到各个节点,中间哪一步搞错了,整个集群就启动不起来。所以有几个厂商提供Hadoop的这种安装和管理平台,主要是CDH和HDP,国内的很多人都用CDH的,它是Cloudera公司的,如果用它的管理界面安装,集群节点超过一定数量就要收费了。

Ambari是Apache的顶级开源项目,可以免费使用,现在用的人也很多。Ambari使用Ganglia收集度量指标,用Nagios支持系统报警,当需要引起管理员的关注时(比如,节点停机或磁盘剩余空间不足等问题),系统将向其发送邮件。

ZooKeeper

随着计算节点的增多,集群成员需要彼此同步并了解去哪里访问服务和如何配置,ZooKeeper正是为此而生的。ZooKeeper 顾名思义就是动物园管理员,它是用来管大象(Hadoop) 、蜜蜂(Hive) 和 小猪(Pig) 的管理员, Apache Hbase和 Apache Solr 以及LinkedIn sensei等项目中都采用到了 Zookeeper。ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,以Fast Paxos算法为基础实现同步服务,配置维护和命名服务等分布式应用。

其他组件

以上介绍的都是Hadoop用来计算和查询的比较常用和主流的组件,上面那副生态图中的其他几个组件简单了解一下就好:

Pig是一种编程语言,它简化了Hadoop常见的工作任务,Pig为大型数据集处理提供了更高层次的抽象,与MapReduce相比,Pig提供了更丰富的数据结构,一般都是多值和嵌套的数据结构。

Mahout是Hadoop提供做机器学习用的,支持的算法也比较少,但是一些常用的 k-means 聚类、分类还是有的,他是用MapReduce做的,但是MapReduce不太擅长这个东西,所以Mahout的作者也转投spark ML阵营了。

Sqoop是数据库ETL工具,用于将关系型数据库的数据导入到 Hadoop 及其相关的系统中,如 Hive和HBase。Sqoop 的核心设计思想是利用 MapReduce 加快数据传输速度,也就是说 Sqoop 的导入和导出功能是通过 MapReduce 作业实现的,所以它是一种批处理方式进行数据传输,难以实现实时数据的导入和导出。比如云智慧监控宝以前的业务数据都存在MySQL,随着数据量越来越大,要把数据导到Hbase,就可以拿Sqoop直接操作。

本文所介绍的东西都是用于离线计算的,而之前发布的《面临大数据挑战 透视宝如何使用Druid实现数据聚合》则是关于实时计算的框架Druid的。大数据常用的流计算框架主要有Storm,Spark Streaming,Flink,Flink虽然是2014年加入Hadoop的,但至今在生产环境上用的人还不多,似乎大家都持观望态度。

说一下流计算(Druid,Spark Streaming)和批处理(MapReduce,Hive)有啥区别,比如电商网站的个性化广告投放,当我们访问了亚马逊搜索笔记本电脑之后,他就会给你推荐很多笔记本电脑链接,你的请求和兴趣爱好被亚马逊服务器实时接收,流计算分析之后当时就会推荐给你可能会购买的东西。如果这个东西拿批处理去做,服务端收集完了,过半个小时才算出你可能要买电脑,这时候再给你推荐电脑明显就不合适了,因为这时候你可能在搜索电炒锅……


 

最后再说一下大数据的工作流,比如有两个MapReduce的任务是有依赖的,必须第一个完成了才能执行第二个,这就需要一个调度工具来调度。MapReduce也提供调度的API,但是代码要写很多,上面的代码截图只是一部分,这个依赖我写了大概150行。所以这时候出现了工作流,用工作流来管理我们的各个job,我目前知道的有oozie和azkaban,oozie的配置比较灵活,推荐大家使用。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。