hadoop、spark各大数据组件介绍

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_36632174/article/details/102461682

hadoop相关组件

hadoop体系结构,如图:

hadoop核心设计,如图

Hadoop Common

Hadoop体系最底层的一个模块,为Hadoop各子项目提供各种工具,如:配置文件和日志操作等。

HDFS

是Hadoop应用程序中主要的分布式存储系统, HDFS集群包含了一个NameNode(主节点),这个节点负责管理所有文件系统的元数据及存储了真实数据的DataNode(数据节点,可以有很多)。HDFS针对海量数据所设计,所以相比传统文件系统在大批量小文件上的优化,HDFS优化的则是对小批量大型文件的访问和存储。相比于Hadoop1.0,Hadoop 2.0中的HDFS增加了两个重大特性,HA和Federaion。HA即为High Availability(高可用),用于解决NameNode单点故障问题,该特性通过热备的方式为主NameNode提供一个备用者,一旦主NameNode出现故障,可以迅速切换至备NameNode,从而实现不间断对外提供服务。Federation即为“联邦”,该特性允许一个HDFS集群中存在多个NameNode同时对外提供服务,这些NameNode分管一部分目录(水平切分),彼此之间相互隔离,但共享底层的DataNode存储资源。

文件系统。可以创建、删除、移动或重命名文件,等等。但是 HDFS 的架构是基于一组特定的节点构建的,存储在 HDFS 中的文件被分成块,然后将这些块复制到多个计算机中(DataNode)。这与传统的RAID 架构大不相同。块的大小(通常为 64MB)和复制的数量在创建文件时由客户机决定。NameNode 可以控制所有文件操作。HDFS 内部的所有通信都基于标准的 TCP/IP 协议。

HDFS介绍-文件读流程,如图:

Client向NameNode发起文件读取的请求。NameNode返回文件存储的DataNode的信息。Client读取文件信息。

HDFS介绍-文件写流程,如图:

Client向NameNode发起文件写入的请求。NameNode根据文件大小和文件块配置情况,返回给Client它所管理部分DataNode的信息。Client将文件划分为多个Block,根据DataNode的地址信息,按顺序写入到每一个DataNode块中。

MapReduce:映射、化简编程模型

是一个软件框架,用以轻松编写处理海量(TB级)数据的并行应用程序,以可靠和容错的方式连接大型集群中上万个节点(商用硬件)

输入数据->Map分解任务->执行并返回结果->Reduce汇总结果->输出结果

JobTracker:协调作业的运行;TaskTracker:运行作业划分后的任务。

MapReduce工作流程

MapReduce模型主要包含Mapper类和Reducer类两个抽象类。Mapper类主要负责对数据的分析处理,最终转化为key-value数据对;Reduce类主要获取key-value数据对,然后处理统计,得到结果。MapReduce实现了存储的均衡,但没有实现计算的均衡。MapReduce主要包括JobClient、JobTracker、TaskTracker、HDFS4个独立部分。

①JobClient:配置参数Configuration,并打包成jar文件存储在HDFS上,将文件路径提交给JobTracker的Master服务,然后由Master创建每个task将他们分发到各个TaskTracker服务中去执行。

②JobTracker:这是一个Master服务,服务启动后,JobTracker负责资源监控和作业调度。JobTracker监控所有的TaskTracker和job的监控情况,一旦发生失败,即将之转移到其它节点上,同时JobTracker会跟踪任务的执行进度,资源使用量等信息,将这些信息高速任务调度器,而调度器会在资源出现空闲时,选择合适的任务使用这些资源。在hadoop中,任务调度器是一个可插拔的模块,用户可以根据自己的需要设计相应的调度器。

③TaskTracker是运行在多个节点上的slaver服务。TaskTracker主动与JobTracker通信,接受作业,并负责直接执行每个任务。TaskTracker会周期性地通过Hearbeat将本节点上的资源使用情况和任务的运行进度汇报给JobTracker,同时接收JobTracker发送过来的命令,并执行相应操作(启动新任务,杀死任务等)TaskTracker使用"slot"等量划分本节点上的资源量。"slot"代表计算资源(CPU、内存等)。一个Task获取到一个slot后才有机会运行,而hadoop调度器的作用就是将各个TaskTracker上的空闲slot分配给Task使用。TaskTracker通过slot数目(可配置参数)限定Task的并发度。Task分为Map Task和Reduce Task两种,均由TaskTracker启动。HDFS以block块存储数据,MapReduce处理的最小数据单位为split。split如何划分由用户自由设置。split和block的关系。

MapReduce执行步骤:

首先是Map处理:

1.读取HDFS中文件。每一行解析成一个<k,v>。每一个键值对调用一次map函数。

2.覆盖map(),接收第1步产生的按行分的<k,v>,进行处理,转换为新的<k,v>输出。例如:<hello,1>、<you,1>、<hello,1>、<me,1>

3.对上面1,2两步输出的<k,v>进行分区,默认为一个分区

4.对不同分区中的数据进行排序(按照k),分组。分组只相同key的value放到一个集合中。

排序后:<hello,1>、<hello,1>、<you,1>、<me,1>

分组后:<hello,{1,1}>、<you,{1}>、<me,{1}>

5.(可选)对分组后的数据进行归约(归约:尽可能保持数据原貌前提下,最大限度精简数据量)

然后Reduce处理:

1.多个map任务的输出,按照不同的分区,通过网络copy到不同reduce节点上(shuffle:洗牌)

2.对多个map的输出进行合并,排序。覆盖reduce函数,接收的是分组后的数据,实现自己的业务逻辑,<hello,2><you,1><me,1>产生新的<k,v>输出

3.对reduce输出的<k,v>写到hdfs中。

Hbase

基于Hadoop架构的数据库系统。不是关系型数据库,基于列的模式。是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。Hadoop HDFS为HBase提供了高可靠性的底层存储支持,Hadoop MapReduce为HBase提供了高性能的计算能力,Zookeeper为HBase提供了稳定服务和failover机制。此外,Pig和hive还为HBase提供了高层语言支持,使得在HBase上进行数据统计处理变的非常简单。 Sqoop则为HBase提供了方便的RDBMS数据导入功能,使得传统数据库数据向HBase中迁移变的非常方便。HBase作为面向列的数据库运行在HDFS之上,HDFS缺乏随即读写操作,HBase正是为此而出现。HBase以Google BigTable为蓝本,以键值对的形式存储。项目的目标就是快速在主机内数十亿行数据中定位所需的数据并访问它。HBase是一个数据库,一个NoSql的数据库,像其他数据库一样提供随即读写功能,Hadoop不能满足实时需要,HBase正可以满足。如果你需要实时访问一些数据,就把它存入HBase。可以用Hadoop作为静态数据仓库,HBase作为数据存储,放那些进行一些操作会改变的数据。

Client:使用HBase RPC机制与HMaster和HRegionServer进行通信
Zookeeper:协同服务管理,HMaster通过Zookeepe可以随时感知各个HRegionServer的健康状况
HMaster: 管理用户对表的增删改查操作
HRegionServer:HBase中最核心的模块,主要负责响应用户I/O请求,向HDFS文件系统中读写数据
HRegion:Hbase中分布式存储的最小单元,可以理解成一个Table
HStore:HBase存储的核心。由MemStore和StoreFile组成。
HLog:每次用户操作写入Memstore的同时,也会写一份数据到HLog文件

Yarn

(Yet Another Resource Negotiator,另一种资源协调者)是一种新的Hadoop资源管理器,做分布式集群的资源管理器。它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。YARN的基本思想是将JobTracker的两个主要功能(资源管理和作业调度/监控)分离,主要方法是创建一个全局的ResourceManager(RM)和若干个针对应用程序的ApplicationMaster(AM)。这里的应用程序是指传统的MapReduce作业或作业的DAG(有向无环图)

优点:大大减小了JobTracker(也就是现在的 ResourceManager)的资源消耗,并且让监测每一个Job子任务 (tasks) 状态的程序分布式化了,更安全、更优美。

sqoop(数据相互转移的工具)

是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。

Hive

基于Hbase的高层语言。类似于SQL --- 访问和处理关系型数据库的计算机语言。Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件(例如xml)映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

Pig(脚本shell)

一种操作hadoop的轻量级脚本语言,最初由雅虎公司推出,不过现在正在走下坡路了。当初雅虎自己慢慢退出pig的维护之后将它开源贡献到开源社区由所有爱好者来维护。不过现在还是有些公司在用,不过通常认为与其使用pig不如使用hive:Pig包含两个部分:Pig Interface,Pig Latin,它一种数据流语言,用来快速轻松的处理巨大的数据。Pig可以非常方便的处理HDFS和HBase的数据,和Hive一样,Pig可以非常高效的处理其需要做的,通过直接操作Pig查询可以节省大量的劳动和时间。当你想在你的数据上做一些转换,并且不想编写MapReduce jobs就可以用Pig。Pig可加载数据、表达转换数据以及存储最终结果。Pig内置的操作使得半结构化数据变得有意义(如日志文件)。同时Pig可扩展使用Java中添加的自定义数据类型并支持数据转换。Pig最大的作用就是对mapreduce算法(框架)实现了一套shell脚本 ,类似我们通常熟悉的SQL语句,在Pig中称之为Pig Latin,在这套脚本中我们可以对加载出来的数据进行排序、过滤、求和、分组(group by)、关联(Joining),Pig也可以由用户自定义一些函数对数据集进行操作,也就是传说中的UDF(user-defined functions)。

Pig VS Hive

Hive更适合于数据仓库的任务,Hive主要用于静态的结构以及需要经常分析的工作。Hive与SQL相似促使其成为Hadoop与其他BI工具结合的理想交集。Pig赋予开发人员在大数据集领域更多的灵活性,并允许开发简洁的脚本用于转换数据流以便嵌入到较大的应用程序。Pig相比Hive相对轻量,它主要的优势是相比于直接使用Hadoop Java APIs可大幅削减代码量。正因为如此,Pig仍然是吸引大量的软件开发人员。Hive和Pig都可以与HBase组合使用,Hive和Pig还为HBase提供了高层语言支持,使得在HBase上进行数据统计处理变的非常简单。

Hive VS HBase

Hive是建立在Hadoop之上为了减少MapReduce jobs编写工作的批处理系统,HBase是为了支持弥补Hadoop对实时操作的缺陷的项目。想象你在操作RMDB数据库,如果是全表扫描,就用Hive+Hadoop,如果是索引访问,就用HBase+Hadoop

Hive query就是MapReduce jobs可以从5分钟到数小时不止,HBase是非常高效的,肯定比Hive高效的多。Hive是支持SQL语句的,执行会调用mapreduce,所以延迟比较高;HBase是面向列的分布式数据库,使用集群环境的内存做处理,效率会比hive要高,但是不支持sql语句。Hadoop开发和运行处理大规模数据,需要用hbase做数据库,但由于hbase没有类sql查询方式,所以操作和计算数据非常不方便,于是整合hive,让hive支撑在hbase数据库层面的 hql查询,hive也即做数据仓库。

使用Nosql意义

一个高并发网站的DB进化史:

1、Mysql:1个DB搞定一切    
2、Mysql+Memcached解决数据库读压力    
3、Mysql(master+slave)+Memcached主从读写分离,解决读写性能和读库的可扩展性    
4、Mysql(master+slave)+Memcached+垂直分表分库,解决写压力(淘宝开源的TDDL,解决分库分表场景下的访问路由)
5、Nosql+水平分表分库,去掉关系型数据库的关系型特性(不支持事务,解决DB架构方面上的无限扩展能力,如Hbase)    
6、支持事务的分布式数据库:Goole Spanner,Taobao OceanBase

Mahout

Apache Mahout是个可扩展的机器学习和数据挖掘库,当前Mahout支持主要的4个用例:

①推荐挖掘:搜集用户动作并以此给用户推荐可能喜欢的事物。

②聚集:收集文件并进行相关文件分组。

③分类:从现有的分类文档中学习,寻找文档中的相似特征,并为无标签的文档进行正确的归类。

④频繁项集挖掘:将一组项分组,并识别哪些个别项会经常一起出现。
Chukwa(监控

Apache Chukwa是个开源的用于监控大型分布式系统的数据收集系统,用以监视大型分布系统。建立于HDFS和Map/Reduce框架之上,继承了Hadoop的可扩展性和稳定性。Chukwa同样包含了一个灵活和强大的工具包,用以显示、监视和分析结果,以保证数据的使用达到最佳效果。

Chukwa的整体架构如图,它的主要部件:

1.agents:负责采集最原始的数据,并发送给collectors。

2.adaptor:直接采集数据的接口和工具,一个agent可以管理多个adaptor的数据采集。

3.collectors 负责收集 agents 收送来的数据,并定时写入集群中。

4.map/reduce jobs 定时启动,负责把集群中的数据分类、排序、去重和合并。

5. HICC 负责数据的展示。

Avro

Avro是doug cutting主持的RPC项目,有点类似Google的protobuf和Facebook的thrift。avro用来做以后hadoop的RPC,使hadoop的RPC模块通信速度更快、数据结构更紧凑。

Cassandra

Apache Cassandra是一个高性能、可线性扩展、高有效性数据库,可以运行在商用硬件或云基础设施上打造完美的任务关键性数据平台。在横跨数据中心的复制中,Cassandra同类最佳,为用户提供更低的延时以及更可靠的灾难备份。通过log-structured update反规范化和物化视图的强支持以及强大的内置缓存,Cassandra的数据模型提供了方便的二级索引(column indexe)。

HCatalog

Apache HCatalog是Hadoop建立数据的映射表和存储管理服务,它包括:①提供一个共享模式和数据类型机制。

②提供一个抽象表,这样用户就不需要关注数据存储的方式和地址。为类似Pig、MapReduce及Hive这些数据处理工具提供互操作性。

shuffle

Shuffle过程是MapReduce的核心,也被称为奇迹发生的地方。Shuffle的本意是洗牌、混乱的意思。所谓Shuffle过程可以大致的理解成:怎样把map task的输出结果有效地传送到reduce输入端。也可以这样理解,Shuffle描述着数据从map task输出到reduce task输入的这段过程。

spark相关组件

RDD

Resilient Distributed Datasets:弹性分布式数据集,它具备像MapReduce等数据流模型的容错特性,并且允许开发人员在大型集群上执行基于内存的计算。现有的数据流系统对两种应用的处理并不高效:一是迭代式算法,这在图应用和机器学习领域很常见;二是交互式数据挖掘工具。这两种情况下,将数据保存在内存中能够极大地提高性能。为了有效地实现容错,RDD提供了一种高度受限的共享内存,即RDD是只读的,并且只能通过其他RDD上的批量操作来创建。尽管如此,RDD仍然足以表示很多类型的计算,包括MapReduce和专用的迭代编程模型(如Pregel)等。RDD是只读的、分区记录的集合:RDD只能基于在稳定物理存储中的数据集和其他已有的RDD上执行确定性操作来创建。这些确定性操作称之为转换,如map、filter、groupBy、join(转换不是程开发人员在RDD上执行的操作)。RDD不需要物化。RDD含有如何从其他RDD衍生(即计算)出本RDD的相关信息(即Lineage),据此可以从物理存储的数据计算出相应的RDD分区。RDD作为数据结构,本质上是一个只读的分区记录集合。一个RDD可以包含多个分区,每个分区就是一个dataset片段。RDD可以相互依赖。如果RDD的每个分区最多只能被一个Child RDD的一个分区使用,则称之为narrow dependency(狭窄依赖);若多个Child RDD分区都可以依赖,则称之为wide dependency。不同的操作依据其特性,可能会产生不同的依赖。例如map操作会产生narrow dependency,而join操作则产生wide dependency。

GraphX

GraphX是构建在Spark之上的图计算框架,它使用RDD来存储图数据,并提供了实用的图操作方法。由于RDD的与生俱来的特性,GraphX高效地实现了图的分布式存储和处理,可以应用于社交网络等大规模的图计算场景。GraphX在图顶点信息和边信息存储上做了优化,使得图计算框架性能相对于原生RDD实现得以较大提升,接近或到达GraphLab等专业图计算平台的性能。GraphX最大的贡献是,在Spark之上提供一栈式数据解决方案,可以方便且高效地完成图计算的一整套流水作业。

SparkSQL

Spark SQL is Apache Spark's module for working with structured(结构) data。SparkSQL的前身是Shark,给熟悉RDBMS但又不理解MapReduce的技术人员提供快速上手的工具,Hive应运而生,它是当时唯一运行在Hadoop上的SQL-on-Hadoop工具。但是MapReduce计算过程中大量的中间磁盘落地过程消耗了大量的I/O,降低的运行效率,为了提高SQL-on-Hadoop的效率,大量的SQL-on-Hadoop工具开始产生,其中表现较为突出的是:①MapR的Drill②Cloudera的Impala③Shark。其中Shark是伯克利实验室Spark生态环境的组件之一,它修改了内存管理、物理计划、执行三个模块,并使之能运行在Spark引擎上,从而使得SQL查询的速度得到10-100倍的提升。但是,随着Spark的发展,对于野心勃勃的Spark团队来说,Shark对于Hive的太多依赖(如采用Hive的语法解析器、查询优化器等等),制约了Spark的One Stack Rule Them All的既定方针,制约了Spark各个组件的相互集成,所以提出了SparkSQL项目。SparkSQL抛弃原有Shark的代码,汲取了Shark的一些优点,如内存列存储(In-Memory Columnar Storage)、Hive兼容性等,重新开发了SparkSQL代码;由于摆脱了对Hive的依赖性,SparkSQL无论在数据兼容、性能优化、组件扩展方面都得到了极大的方便,真可谓“退一步,海阔天空”。

SparkSQL特点:

1)数据兼容方面:不但兼容Hive,还可以从RDD、parquet文件、JSON文件中获取数据,未来版本甚至支持获取RDBMS数据以及cassandra等NOSQL数据;

2)性能优化方面:除了采取In-Memory Columnar Storage、byte-code generation等优化技术外、将会引进Cost Model对查询进行动态评估、获取最佳物理计划等等;

3)组件扩展方面:无论是SQL的语法解析器、分析器还是优化器都可以重新定义,进行扩展。

SparkStreaming

Spark Streaming 是Spark核心API的一个扩展,可以实现高吞吐量的、具备容错机制的实时流数据的处理。支持从多种数据源获取数据,包括Kafk、Flume、Twitter、ZeroMQ、Kinesis 以及TCP sockets,从数据源获取数据之后,可以使用诸如map、reduce、join和window等高级函数进行复杂算法的处理。最后还可以将处理结果存储到文件系统,数据库和现场仪表盘。在“One Stack rule them all”的基础上,还可以使用Spark的其他子框架,如集群学习、图计算等,对流数据进行处理。

Spark的各个子框架,都是基于核心Spark的,Spark Streaming在内部的处理机制是,接收实时流的数据,并根据一定的时间间隔拆分成一批批的数据,然后通过Spark Engine处理这些批数据,最终得到处理后的一批批结果数据。对应的批数据,在Spark内核对应一个RDD实例,因此,对应流数据的DStream可以看成是一组RDDs,即RDD的一个序列。通俗点理解的话,在流数据分成一批一批后,通过一个先进先出的队列,然后 Spark Engine从该队列中依次取出一个个批数据,把批数据封装成一个RDD,然后进行处理,这是一个典型的生产者消费者模型,对应的就有生产者消费者模型的问题,即如何协调生产速率和消费速率。

MLlib(数据处理和机器学习的算法库

构建在apache spark之上,一个专门针对大量数据处理的通用的、快速的引擎。是spark的可以扩展的机器学习库,由以下部分组成:通用的学习算法和工具类,包括分类,回归,聚类,协同过滤,降维,当然也包括调优的部分。

①Data types

②Basic statistics  (基本统计)

summary statistics 概括统计
correlations 相关性
stratified sampling 分层取样
hypothesis testing 假设检验
random data generation 随机数生成

③Classification and regression   (分类一般针对离散型数据而言的,回归是针对连续型数据的。本质上是一样的)

linear models (SVMs, logistic regression, linear regression) 线性模型(支持向量机,逻辑回归,线性回归)
naive Bayes 贝叶斯算法
decision trees  决策树
ensembles of trees (Random Forests and Gradient-Boosted Trees) 多种树(随机森林和梯度增强树)

④Collaborative filtering   协同过滤    
    alternating least squares (ALS)  (交替最小二乘法(ALS) )
⑤Clustering  聚类    
    k-means k均值算法
⑥Dimensionality reduction   (降维)    
    singular value decomposition (SVD)  奇异值分解
    principal component analysis (PCA) 主成分分析
⑦Feature extraction and transformation 特征提取和转化    
⑧Optimization (developer) 优化部分    
    stochastic gradient descent 随机梯度下降
    limited-memory BFGS (L-BFGS) 短时记忆的BFGS (拟牛顿法中的一种,解决非线性问题)

MLlib使用了线性代数包Breeze, 它依赖于netlib-java和jblas。netlib-java 和 jblas 需要依赖native Fortran routines。所以你需要安装安装方法在这个链接中:https://github.com/mikiobraun/jblas/wiki/Missing-Libraries,如果你的集群的节点中没有安装native Fortran routines。MLlib 会抛出一个link error,如果没有安装native Fortran routines。

DAG

有向无环图DAG,所谓有向无环图是指任意一条边有方向,且不存在环路的图。DAG是有向无环图,一般用来描述任务之间的先后关系,spark中的DAG就是rdd内部的转换关系,这些转换关系会被转换成依赖关系,进而被划分成不同阶段,从而描绘出任务的先后顺序。Hadoop用的是AG而不是DAG。一个DAG可以包含多个AG。DAG除了可以提升scheduler效率之外,它同时是Spark Fault tolerance机制-Lineage追溯的基础。

其它组件

Zookeeper

是Google的Chubby一个开源的实现。它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

Yarn和zookeeper的区别

1.Coordination、2.Resource Management

Zookeeper偏重解决的是前者(Coordination),Yarn偏重解决的是后者。比如说现在有个事要办,我们要找这个系统办这个事,就要通知yarn。打个比方,yarn的masternode看看这个系统里有很多node,看看谁有空,谁有能力(cpu、内存、等)来干这个事。然后把任务分配给合适的node来办这个事。YARN相当于政府,负责管理机器资源的分配,有困难找政府,政府安排人力物力来解决你的问题。这个才是你说的管理节点。Zookeeper相当于立法委员会,目标是提供权威的信息给这个国家所有的人。Zookeeper关注的主要是信息的一致性,管理一些需要在所有人心中保持一致的信息。它虽然常常用来管理哪个节点活着,哪个节点死了这种信息,或是哪个节点该负责什么事儿,但是它还是主要负责管理信息(档案,法律)的部门,不是民生部门。

Impala

Impala是Cloudera公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase中的PB级大数据。已有的Hive系统虽然也提供了SQL语义,但由于Hive底层执行使用的是MapReduce引擎,仍然是一个批处理过程,难以满足查询的交互性。相比之下,Impala的最大特点也是最大卖点就是它的快速。是对hive的一个补充,可以实现高效的SQL查询。

功能:

1.Impala可以根据Apache许可证作为开源免费提供。
2.Impala支持内存中数据处理,它访问/分析存储在Hadoop数据节点上的数据,而无需数据移动。
3.使用类SQL查询访问数据。
4.与其他SQL引擎相比,Impala为HDFS中的数据提供了更快的访问。
5.可以将数据存储在Impala存储系统中,如Apache HBase和Amazon s3。
6.Impala支持各种文件格式,如LZO,序列文件,Avro,RCFile和Parquet。
7.可以将Impala与业务智能工具(如Tableau,Pentaho,Micro策略和缩放数据)集成。
8.Impala使用Apache Hive的元数据,ODBC驱动程序和SQL语法。

优点:

1.Impala不需要把中间结果写入磁盘,省掉了大量的I/O开销。
2.省掉了MapReduce作业启动的开销。MapReduce启动task的速度很慢(默认每个心跳间隔是3秒钟),Impala直接通过相应的服务进程来进行作业调度,速度快了很多。
3.Impala完全抛弃了MapReduce这个不太适合做SQL查询的范式,而是像Dremel一样借鉴了MPP并行数据库的思想另起炉灶,因此可做更多的查询优化,从而省掉不必要的shuffle、sort等开销。
4.通过使用LLVM来统一编译运行时代码,避免了为支持通用编译而带来的不必要开销。
5.用C++实现,做了很多有针对性的硬件优化,例如使用SSE指令。
6.使用了支持Data locality的I/O调度机制,尽可能地将数据和计算分配在同一台机器上进行,减少了网络开销。
7.可以使用传统的SQL知识以极快的速度处理存储在HDFS中的数据。
8.由于在数据驻留(在Hadoop集群上)时执行数据处理,所以在使用Impala时,不需要对存储在Hadoop上的数据进行数据转换和数据移动。
9.您可以访问存储在HDFS,HBase和Amazon s3中的数据,而无需了解Java(MapReduce作业)。您可以使用SQL查询的基本概念访问它们。
10.为了在业务工具中写入查询,数据必须经历复杂的提取 - 变换负载(ETL)周期。但是,使用Impala,此过程缩短了。加载和重组的耗时阶段通过新技术克服,如探索性数据分析和数据发现,使过程更快。
11.Impala正在率先使用Parquet文件格式,这是一种针对数据仓库场景中典型的大规模查询进行优化的柱状存储布局。

缺点:

1.Impala不提供任何对序列化和反序列化的支持。
2.Impala只能读取文本文件,而不能读取自定义二进制文件。
3.每当新的记录/文件被添加到HDFS中的数据目录时,该表需要被刷新。

Nutch

Nutch是一个开源Java实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬虫。

Tez

Apache Tez是一个针对Hadoop数据处理应用程序的新分布式执行框架,是Apache开源的支持DAG作业的计算框架,它直接源于MapReduce框架,核心思想是将Map和Reduce两个操作进一步拆分,即Map被拆分成Input、Processor、Sort、Merge和Output,Reduce被拆分成Input、Shuffle、Sort、Merge、Processor和Output等,这样,这些分解后的元操作可以任意灵活组合,产生新的操作,这些操作经过一些控制程序组装后,可形成一个大的DAG作业。它可以将多个有依赖的作业转换为一个作业从而大幅提升DAG作业的性能。总结起来,Tez有以下特点:

1.Apache二级开源项目2.运行在YARN之上3.适用于DAG(有向图)应用(同Impala、Dremel和Drill一样,可用于替换Hive/Pig等)

Tez并不直接面向最终用户——事实上它允许开发者为最终用户构建性能更快、扩展性更好的应用程序。Hadoop传统上是一个大量数据批处理平台。但是,有很多用例需要近乎实时的查询处理性能。还有一些工作则不太适合MapReduce,例如机器学习。Tez的目的就是帮助Hadoop处理这些用例场景。

Apache Kylin

Apache Kylin™是一个开源的分布式分析引擎,提供Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBay Inc. 开发并贡献至开源社区。它能在亚秒内查询巨大的Hive表。

①可扩展超快OLAP引擎:

Kylin是为减少在Hadoop/Spark上百亿规模数据查询延迟而设计。

②Hadoop ANSI SQL 接口

Kylin为Hadoop提供标准SQL支持大部分查询功能。

③交互式查询能力

通过Kylin,用户可以与Hadoop数据进行亚秒级交互,在同样的数据集上提供比Hive更好的性能。

④多维立方体(MOLAP Cube)

用户能够在Kylin里为百亿以上数据集定义数据模型并构建立方体。

⑤与BI工具无缝整合

Kylin提供与BI工具的整合能力,如Tableau,PowerBI/Excel,MSTR,QlikSense,Hue和SuperSet

⑥其他特性

Job管理与监控、压缩与编码、增量更新、利用HBase Coprocessor、基于HyperLogLog的Dinstinc Count近似算法、友好的web界面以管理,监控和使用立方体、项目及表级别的访问控制安全、支持LDAP、SSO。(LDAP:轻量级目录访问协议)

Flume

Flume是Cloudera提供的日志收集系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。Flume采用了多Master的方式。为了保证配置数据的一致性,Flume引入了ZooKeeper,用于保存配置数据,ZooKeeper本身可保证配置数据的一致性和高可用,另外,在配置数据发生变化时,ZooKeeper可以通知Flume Master节点。Flume Master间使用gossip协议同步数据。Scribe:是Facebook开源日志收集系统,它为日志分布式收集,统一处理提供一个可扩展,高容错的解决方案。

Kafka

一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消费。

Kafka有如下特性:

通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒数百万的消息。支持通过Kafka服务器和消费机集群来分区消息。支持Hadoop并行数据加载。

Elasticsearch

基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

hue

Hue是cdh专门的一套web管理器,它包括3个部分hue ui,hue server,hue db。hue提供所有的cdh组件的shell界面的接口。你可以在hue编写mr,查看修改hdfs的文件,管理hive的元数据,运行Sqoop,编写Oozie工作流等大量工作。

OOZie

Oozie是一种Java Web应用程序,它运行在Java servlet容器——即Tomcat——中,并使用数据库来存储以下内容:

1)工作流定义

2)当前运行的工作流实例,包括实例的状态和变量

Oozie工作流是放置在控制依赖DAG(有向无环图 Direct Acyclic Graph)中的一组动作(例如,Hadoop的Map/Reduce作业、
Pig作业等),其中指定了动作执行的顺序。我们会使用hPDL(一种XML流程定义语言)来描述这个图。HPDL是一种很简洁的语言,只会使用少数流程控制和动作节点。控制节点会定义执行的流程,并包含工作流的起点和终点(start、end和fail节点)以及控制工作流执行路径的机制(decision、fork和join节点)。动作节点是一些机制,通过它们工作流会触发执行计算或者处理任务。Oozie为以下类型的动作提供支持:Hadoop map-reduce、HDFS、Pig、Java和Oozie的子工作流(SSH动作已经从Oozie schema 0.2之后的版本中移除了)在Hadoop中执行的任务有时候需要把多个Map/Reduce作业连接到一起,这样才能够达到目的。在Hadoop生态圈中,有一种相对比较新的组件叫做Oozie,它让我们可以把多个Map/Reduce作业组合到一个逻辑工作单元中,从而完成更大型的任务。

==========================================================================

典型大数据计算模式 典型系统
大数据查询分析计算 HBase、Hive、Cassandra、Impala、Shark、Hana等
批处理计算 Hadoop、MapReduce、Spark等
流式计算 Scribe、Flink、Flume、Storm、S4、Spark Streaming等
迭代计算 HaLoop、iMapReduce、Twister、Spark等
图计算 Pregel、Giraph、Trinity、PowerGraph、GraphX等
内容计算 Dremel、Hana、Spark等

猜你喜欢

转载自blog.csdn.net/qq_36632174/article/details/102461682
今日推荐