本文由本人学习过程中总结,难免有纰漏,欢迎交流学习
云计算使计算机系统资源,特别是存储和计算能力,在不需要用户直接主动管理的情况下随需应变。这个术语通常用于描述Internet上许多用户可用的数据中心。
同时使用多种计算资源解决计算问题的过程
将需要巨大计算能力的问题分成许多小部分进行处理,最后综合结果
在动态、多机构参与的虚拟组织中协同共享资源和求解问题
混合云公有云私有云
IaaS基础设施层基础设施即服务PaaS平台层平台即服务SaaS应用层软件即服务
物联网(IoT)是关于设备的网络(例如车辆和家用电子设备等),其中包含电子产品、软件、传感器、执行器,以及提供设备连接、交互和交换数据的网络连接。
Volume:体量大Variety:样式多Velocity:速度快Valueless:价值密度低
人工智能:系统能够正确地解释外部数据,从这些数据中学习,并通过灵活的适应利用这些学习来实现特定的目标和任务。
发展阶段计算智能感知智能认知智能
云计算为大数据提供了技术基础
大数据为云计算提供用武之地
大数据技术为物联网数据分析提供支撑
云计算为物联网提供海量数据存储能力
物联网为云计算技术提供了广阔的应用空间
简单总结:通过物联网产生、收集海量的数据存储于云平台,再通过大数据分析,甚至更高形式的人工智能为人类的生产活动,生活所需提供更好的服务。
大数据平台构建的前提条件过程集成管理基础分析智能分析功能模块设计数据可视化子系统数据分析与服务子系统数据存储与管理子系统数据交互子系统技术架构设计架构图数据交互技术架构数据存储技术架构数据计算技术架构主要问题不同场景下的技术框架选型
Hadoop集群的节点类型
Hadoop框架中最核心的设计是为海量数据提供存储的HDFS和对数据进行计算的MapReduce
MapReduce的作业主要包括:(1)从磁盘或从网络读取数据,即IO密集工作;(2)计算数据,即CPU密集工作
Hadoop集群的整体性能取决于CPU、内存、网络以及存储之间的性能平衡。因此运营团队在选择机器配置时要针对不同的工作节点选择合适硬件类型
基本的Hadoop集群中的节点主要有
NameNode:负责协调集群中的数据存储DataNode:存储被拆分的数据块JobTracker:协调数据计算任务TaskTracker:负责执行由JobTracker指派的任务SecondaryNameNode:帮助NameNode收集文件系统运行的状态信息
Hadoop是一个能够让用户轻松架构和使用的分布式计算平台。用户可以轻松地在Hadoop上开发和运行处理海量数据的应用程序。它主要有以下几个优点:
⒈高可靠性。Hadoop按位存储和处理数据的能力值得人们信赖。
⒉高扩展性。Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。
⒊高效性。Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。
⒋高容错性。Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。
Hadoop带有用Java语言编写的框架,因此运行在Linux生产平台上是非常理想的。Hadoop上的应用程序也可以使用其他语言编写,比如C++。
ApplicationMaster
为应用程序申请资源,并分配给内部任务
任务调度、监控与容错
ResourceManagerSchedulerApplicationsManager
NodeManager资源管理单元Container工作流程Zookeeper集群管理的基本作用架构ZNodeKafka功能组件ProducerBrokerTopicConsumerGroupConsumer
MapReduce1.0的缺陷
(1)存在单点故障
(2)JobTracker“大包大揽”导致任务过重(任务多时内存开销大,上限4000节点)
(3)容易出现内存溢出(分配资源只考虑MapReduce任务数,不考虑CPU、内存)
(4)资源划分不合理(强制划分为slot,包括Mapslot和Reduceslot)
纯粹的资源管理调度框架
被剥离了资源管理调度功能的MapReduce框架就变成了MapReduce2.0,它是运行在YARN之上的一个纯粹的计算框架,不再自己负责资源调度管理服务,而是由YARN为其提供资源管理调度服务
YARN的优势:
大大减少了承担中心服务功能的ResourceManager的资源消耗
YARN中的资源管理比MapReduce1.0更加高效
YARN为这些计算框架提供统一的资源调度管理服务,并且能够根据各种计算框架的负载需求调整各自占用的资源,实现集群资源共享和资源弹性收缩;可以实现一个集群上的不同应用负载混搭,有效提高了集群的利用率;不同计算框架可以共享底层存储,避免了数据集跨集群移动
安装方式安装流程与主要命令分布式模式单机模式伪分布式模式core-site.xml配置hdfs-site.xml配置
HDFS是一种典型的主从式的分布式文件系统
分布式文件系统概述
在获取了海量的数据之后,采用何种方式进行高效存储是进行大数据分析的基础
基于分布式硬件集群,并采用特定的分布式文件系统对海量数据(尤其是原生数据)进行存储
分布式文件系统把文件分布存储到多个计算机节点上,成千上万的计算机节点构成计算机集群
①支持大规模文件存储:一个大规模文件可被分拆成若干个文件块,不同的文件块可以被分发到不同的节点上。因此,一个文件的大小不会受到单个节点的存储容量的限制。②简化系统设计:元数据无需和文件块一起存储。③适合数据备份:每个文件块都可冗余存储到多个节点上,大大提高了系统的容错性和可用性。
NameNode负责管理分布式文件系统的命名空间(Namespace),保存了两个核心的数据结构,即FsImage和EditLog
在名称节点启动时,它会将FsImage文件中的内容加载到内存中,之后再执行EditLog文件中的各项操作,使得内存中的元数据和实际的同步,存在内存中的元数据支持客户端的读操作。
一旦在内存中成功建立文件系统元数据的映射,则创建一个新的FsImage文件和一个空的EditLog文件
名称节点启动之后,HDFS中的更新操作会重新写到EditLog文件中,因为FsImage文件一般都很大(GB级别的很常见),如果所有的更新操作都往FsImage文件中添加,这样会导致系统运行的十分缓慢,但是,如果往EditLog文件里面写就不会这样,因为EditLog要小很多。每次执行写操作之后,且在向客户端发送成功代码之前,edits文件都需要同步更新
EditlogFsImage
存储元数据
元数据保存在内存中
保存文件,block,datanode这间的映射关系
HDFSBlock64MB128MB
功能:存储文件内容文件内容保存在磁盘维护了blockid到datanode本地文件的映射关系特性:支持大规模文件存储简化系统设计适合数据备份
克服:
数据存储
第一个副本:放置在上传文件的数据节点;如果是集群外提交,则随机挑选一台磁盘不太满、CPU不太忙的节点
第二个副本:放置在与第一个副本不同的机架的节点上第三个副本:与第一个副本相同机架的其他节点上
更多副本:随机节点
被存放在数据节点A和B上。这种多副本方式具有以下几个优点:
(1)加快数据传输速度(2)容易检查数据错误(3)保证数据可靠性
数据读取
HDFS提供了一个API可以确定一个数据节点所属的机架ID,客户端也可以调用API获取自己所属的机架ID
当客户端读取数据时,从名称节点获得数据块不同副本的存放位置列表,列表中包含了副本所在的数据节点,可以调用API来确定客户端和这些数据节点所属的机架ID,当发现某个数据块副本对应的机架ID和客户端对应的机架ID相同时,就优先选择该副本读取数据,如果没有发现,就随机选择一个副本读取数据
优点支持流数据读写支持廉价设备支持大数据集文件模型简单跨平台支持局限性不适合低延迟数据访问无法高效存储小文件不支持多用户写入及任意文件修改命名空间限制数据隔离问题性能瓶颈集群的可用性单点故障
键值数据库、列族数据库、文档数据库、图形数据库
CAP、BASE和最终一致性
存储、索引并管理面向文档的数据或者类似的半结构化数据比如,用于后台具有大量读写操作的网站、使用JSON数据结构的应用、使用嵌套结构等非规范化数据的应用程序
优点
性能好(高并发),灵活性高,复杂性低,数据结构灵活提供嵌入式文档功能,将经常查询的数据存储在同一个文档中既可以根据键来构建索引,也可以根据内容构建索引
缺点
缺乏统一的查询语法
MongoDBCouchDB...
专门用于处理具有高度相互关联关系的数据,比较适合于社交网络、模式识别、依赖分析、推荐系统以及路径寻找等问题
灵活性高,支持复杂的图算法,可用于构建复杂的关系图谱
复杂性高,只能支持一定的数据规模
Neo4jInfiniteGraph
典型应用
分布式数据存储与管理数据在地理上分布于多个数据中心的应用程序可以容忍副本中存在短期不一致情况的应用程序拥有动态字段的应用程序拥有潜在大量数据的应用程序,大到几百TB的数据
查找速度快,可扩展性强,容易进行分布式扩展,复杂性低
功能较少,大都不支持强事务一致性
BigTableHBaseCassandra...
键是一个字符串对象值可以是任意类型的数据,比如整型、字符型、数组、列表、集合等
涉及频繁读写、拥有简单数据模型的应用
内容缓存,比如会话、配置文件、参数、购物车等
存储配置和用户数据信息的移动应用
扩展性好,灵活性好,大量写操作时性能高
无法存储结构化信息,条件查询效率较低
RedisMemcached...
关系数据库的优劣势
优势:以完善的关系代数理论作为基础,有严格的标准,支持事务ACID四性,借助索引机制可以实现高效的查询,技术成熟,有专业公司的技术支持
劣势:可扩展性较差,无法较好支持海量数据存储,数据模过于死板、无法较好支持Web2.0应用,事务机制影响了系统的整体性能等
NoSQL数据库的优劣势
优势:可以支持超大规模数据存储,灵活的数据模型可以很好地支持Web2.0应用,具有强大的横向扩展能力等
劣势:缺乏数学理论基础,复杂查询性能不高,大都不能实现事务强一致性,很难实现数据完整性,技术尚不成熟,缺乏专业团队的技术支持,维护较困难等
关系数据库和NoSQL数据库各有优缺点,彼此无法取代关系数据库应用场景:电信、银行等领域的关键业务系统,需要保证强事务一致性NoSQL数据库应用场景:互联网企业、传统企业的非关键业务(比如数据分析)关系数据库和NoSQL数据库各有优缺点,彼此无法取代关系数据库应用场景:电信、银行等领域的关键业务系统,需要保证强事务一致性NoSQL数据库应用场景:互联网企业、传统企业的非关键业务(比如数据分析)
(1)客户端:包含访问HBase的接口,同时在缓存中维护着已访问过的Region位置信息,以加快后续数据访问过程。(2)Zookeeper服务器①Zookeeper是一个很好的集群管理工具,被大量用于分布式计算,提供配置维护、域名服务、分布式同步、组服务等。②Zookeeper可以帮助选举出一个Master作为集群的总管,并保证在任何时刻总有唯一一个Master在运行,这就避免了Master的“单点失效”问题。③Master通过Zookeeper随时感知各个Region服务器的工作状态。④每个Region服务器都需要到Zookeeper中进行注册,Zookeeper实时监控每个Region服务器的状态并通知给Master。⑤Zookeeper保存了-ROOT-表的地址;客户端通过访问Zookeeper获得-ROOT-表的地址,通过“三级寻址”找到所需要的数据。(3)主服务器Master主要负责表和Region的管理工作(4)Region服务器是Hbase中最核心的模块,负责维护分配给自己的Region,并响应用户的读写请求。
①Region服务器内部管理了一系列Region对象和一个HLog文件(存储在磁盘上,记录所有的更新操作)②每个Region对象由多个Store组成③每个Store对应表中的一个列族的存储④每个Store又包含一个MemStore和多个StoreFile⑤MemStore是内存中的缓存,保存最近更新的数据⑥StoreFile是磁盘文件,B树结构,方便快速读取⑦StoreFile在底层的实现方式是HDFS文件系统的HFile(HFile数据块采用压缩方式存储)
集群部署与启动创建表create全表数据查询scan表单元数据查询get已创建表信息查询list数据添加put删除表enable/disabledrop
Ganglia是UCBerkeley发起的一个开源集群监视项目,用于监控系统性能
OpenTSDB可以从大规模的集群(包括集群中的网络设备、操作系统、应用程序)中获取相应的metrics并进行存储、索引以及服务,从而使得这些数据更容易让人理解,如web化,图形化等
Ambari的作用就是创建、管理、监视Hadoop的集群
为什么需要MapReduce:
计算问题简单,但求解困难
待处理数据量巨大(TB/PB级),只有分布在分布式集群节
传统并行计算框架
共享式(共享内存/共享存储),容错性差
刀片服务器、高速网、SAN,价格贵,扩展性差
实时、细粒度计算、计算密集型
MapReduce
非共享式,容错性好
普通PC机,便宜,扩展性好
简单
批处理、非实时、数据密
集型
MapReduce设计的一个理念就是“计算向数据靠拢”,而
不是“数据向计算靠拢”
MapReduce采用“分而治之”策略,一个存储在分布式文件系统中的大规模数据集,会被切分成许多独立的分片(split),这些分片可以被多个Map任务并行处理
开发者需编写两个主要函数
Map:(in_key,in_value)→{(keyj,valuej)|j=1...k}
Reduce:(key,[value1,...,valuem])→(key,final_value)
Map输入参数:in_key和in_value,它指明了Map需要处理的原始数据
Map输出结果:一组
Reduce输入参数:(key,[value1,...,valuem])
Reduce工作:对这些对应相同key的value值进行归并处理
Reduce输出结果:(key,final_value),所有Reduce的结果并在一起就是最终结果
JobTrackerTaskTrackerClientTask
input---->map-----reduce------output
input:
会文件按行分割形成
这一步由Mapreduce框架自动完成,其中key是偏移量,包含了回车所占的字符数,value是这一行的数据
map:
将分割好的
得到map方法输出的
reduce:
Reducer先对从Mapper接受的
然后再交给用户自定义的reduce方法进行合并处理,再得到新的
最后将这个
(1)第1个MapReducemap找出每个用户都是谁的好友,例如:读一行A:B,C,D,F,E,O(A的好友有这些,反过来拆开,这些人中的每一个都是A的好友)输出
Shuffle是指对Map输出结果进行分区、排序、合并等处理并交给Reduce的过程,因此,Shuffle过程又分为Map端的操作和Reduce端的操作(1)Map端的Shuffle过程①输入数据可以是文档,也可以是二进制格式的。Map任务接受
Reduce任务从Map端的不同Map机器领回属于自己处理的那部分数据,然后对数据进行归并(Merge)后交给Reduce处理①“领取”数据②归并数据③把数据输入给Reduce任务
b.MapReduce执行过程包括哪些(1)MapReduce框架使用InputFormat模块做Map前的预处理,比如验证输入的格式是否符合输入定义;然后,将输入文件切分为逻辑上的多个InputSplit(逻辑概念,并没有实际切割)(2)RecorderReader(RR)处理InputSplit中的具体记录,加载数据并转换为合适的键值对,输入给Map任务(3)Map任务根据用户自定义映射规则,输出一系列的
运行速度快:使用DAG执行引擎以支持循环数据流与内存计算
容易使用:支持使用Scala、Java、Python和R语言进行编程,可以通过SparkShell进行交互式编程
通用性:Spark提供了完整而强大的技术栈,包括SQL查询、流式计算、机器学习和图算法组件
运行模式多样:可运行于独立的集群模式中,可运行于Hadoop中,也可运行于AmazonEC2等云环境中,并且可以访问HDFS、Cassandra、HBase、Hive等多种数据源
RDD:是ResillientDistributedDataset(弹性分布式数据集)的简称,是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型
RDD中的依赖关系分为窄依赖与宽依赖。
RDD操作的惰性机制即在RDD的执行过程中,真正的计算发生在RDD的“行动”操作,对于“行动”之前的所有“转换”操作,Spark只是记录下“转换”操作应用的一些基础数据集以及RDD生成的轨迹,即相互之间的依赖关系,而不会触发真正的计算
ShuffleMapStage:不是最终的Stage,在它之后还有其他Stage,所以,它的输出一定需要经过Shuffle过程,并作为后续Stage的输入;这种Stage是以Shuffle为输出边界,其输入边界可以是从外部获取数据,也可以是另一个ShuffleMapStage的输出,其输出可以是另一个Stage的开始;在一个Job里可能有该类型的Stage,也可能没有该类型Stage;
ResultStage:最终的Stage,没有输出,而是直接产生结果或存储。这种Stage是直接输出结果,其输入边界可以是从外部获取数据,也可以是另一个ShuffleMapStage的输出。在一个Job里必定有该类型Stage。因此,一个Job含有一个或多个Stage,其中至少含有一个ResultStage。
类似于MapReduce1.0,slot为资源分配单位
和Spark有血缘关系,更好支持Mesos
SparkSQLSparkStreamingMllib(machinelearning)Graphx
Spark
YARN
HDFS
HadoopMapReduce存在如下一些缺点
表达能力有限仅存在Map和Reduce两个算子,难以描述复杂计算过程
磁盘IO开销大每次作业均需要从磁盘读取数据,中间结果同样写入磁盘
延迟高MapReduce各个任务间涉及IO开销,
存在延迟前一个任务完成前,其它任务无法开展
相比于HadoopMapReduce,Spark主要具有如下优点:Spark的计算模式也属于MapReduce,但不局限于Map和Reduce操作,还提供了多种数据集操作类型,编程模型比HadoopMapReduce更灵活Spark提供了内存计算,可将中间结果放到内存中,对于迭代运算效率更高Spark基于DAG的任务调度执行机制,要优于HadoopMapReduce的迭代执行机制
Spark的算子的分类
(1)Transformation变换/转换算子:这种变换并不触发提交作业,完成作业中间过程处理。
Transformation操作是延迟计算的,也就是说从一个RDD转换生成另一个RDD的转换操作不是马上执行,需要等到有Action操作的时候才会真正触发运算。
reduceByKey,filter,groupByKey,map,flatmap
(2)Action行动算子:这类算子会触发SparkContext提交Job作业。
Action算子会触发Spark提交作业(Job),并将数据输出Spark系统。
reduce,collect,take,
(1)Value数据类型的Transformation算子,这种变换并不触发提交作业,针对处理的数据项是Value型的数据。(2)Key-Value数据类型的Transfromation算子,这种变换并不触发提交作业,针对处理的数据项是Key-Value型的数据对。
(3)Action算子,这类算子会触发SparkContext提交Job作业。
智能交通个性化推荐系统信贷风险监控与金融反欺诈
实时分析、在线机器学习、不停顿的计算、分布式RPC
1、Flume用于收集日志信息;2、结合数据传输功能可以把收集到的日志信息实时传输到kafka集群,或保存到Hadoophdfs中保存。这里之所以选择kafka集群是因为kafka集群具备缓冲功能,可以防止数据采集速度和数据处理速度不匹配导致数据丢失,这样做可以提高可靠性。3、使用storm实时处理数据;4、保存storm处理的结果数据,当数据量不是特别巨大时,可以使用MySQL存储;当数据量特别巨大时,可以选择hdfs存储。
5、用于实时展示处理结果。
(1)用于告知Topology如何在两个组件间(如Spout和Bolt之间,或者不同的Bolt之间)进行Tuple的传送。(2)每一个Spout和Bolt都可有多个分布式任务,一个任务在什么时候、以什么方式发送Tuple是由StormGroupings来决定的。
目前主要有以下六种方式:ShuffleGrouping:随机分组FieldsGrouping:按照字段分组AllGrouping:广播发送GlobalGrouping:全局分组NonGrouping:不分组DirectGrouping:直接分组
整合性:Storm可方便地与队列系统和数据库系统进行整合简易的API:Storm的API在使用上即简单又方便可扩展性:Storm的并行特性使其可以运行在分布式集群中容错性:Storm自动进行故障节点的重启、任务的重新分配可靠的消息处理:Storm保证每个消息都能完整处理支持各种编程语言:Storm支持使用各种编程语言定义任务快速部署:Storm可以快速进行部署和使用免费、开源:Storm是一款开源框架,可以免费使用
Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。Kafka的目的是通过并行加载机制来统一线上和离线的消息处理,也是为了通过集群机来提供实时的消费
主要应用场景是:日志收集系统和消息系统。
流式数据计算的特点及典型应用场景流式数据计算主要阶段数据实时采集数据实时计算数据实时查询流式数据计算、交互式计算、批处理计算的异同Storm作业运行封装TopologyStorm数据封装模型TupleStorm计算模型架构ZookeeperNimbusSupervisorWorker组件SpoutBolt
大数据分析主要依靠机器学习和大规模计算。机器学习包括监督学习、非监督学习、强化学习等,而监督学习又包括分类学习、回归学习、排序学习、匹配学习等。
分类是最常见的机器学习应用问题,比如垃圾邮件过滤、人脸检测、用户画像、文本情感分析、网页归类等,本质上都是分类问题。分类学习也是机器学习领域,研究最彻底、使用最广泛的一个分支。
编程工具JupyterNotebookPycharm机器学习算法包NumpyMatplotlibPandasSklearnPytorchTensorflow
大数据处理的第二个步骤就是数据分析。数据分析是大数据处理流程的核心步骤,通过数据抽取和集成环节,我们已经从异构的数据源中获得了用于大数据处理的原始数据,用户可以根据自己的需求对这些数据进行分析处理,比如数据挖掘、机器学习、数据统计等,数据分析可以用于决策支持、商业智能、推荐系统、预测系统等。通过数据分析我们能够掌握数据中的信息。
大数据处理的第三个步骤就是数据解释。大数据处理流程中用户最关心的是数据处理的结果,正确的数据处理结果只有通过合适的展示方式才能被终端用户正确理解,因此数据处理结果的展示非常重要,可视化和人机交互是数据解释的主要技术。这个步骤能够让我们知道我们分析数据的结果。
解决方案:
1)数据平台复制数据需要支持异构数据库、大数据量、实时性、模块化。
可以考虑初始化数据全量同步到hdfs,增量数据同步到kafka。
2)复制数据放在备份库上。一定要减轻生产库的压力。
3)为了节约网络资源,需要和备份数据库放在同一个机房。、
4)需要建立数据控制流,方便数据校验。暂定校验数据条数、数据数量合计。
目的是支持后续业务进行数据操作回查,实现数据校验。特别是财务数据,可能需要下钻
抽取凭证级的数据。
5)需要配置多个同步通道。可以快速将数据同步到数据库,并支持增量同步的方式。
需要选取复制效率最高的产品。如可以支持多线程、多并发、特定数据格式、数据压缩技术,
以及快速数据抽取和装载技术。
MapReduce并行计算框架是一个并行化程序执行系统。它提供了一个包含Map和Reduce两阶段的并行处理模型和过程,提供一个并行化编程模型和接口,让程序员可以方便快速地编写出大数据并行处理程序。MapReduce以键值对数据输入方式来处理数据,并能自动完成数据的划分和调度管理。在程序执行时,MapReduce并行计算框架将负责调度和分配计算资源,划分和输入输出数据,调度程序的执行,监控程序的执行状态,并负责程序执行时各计算节点的同步以及中间结果的收集整理。MapReduce框架提供了一组完整的供程序员开发MapReduce应用程序的编程接口。
HDFS(HadoopDistributedFileSystem)是一个类似于GoogleGFS的开源的分布式文件系统。它提供了一个可扩展、高可靠、高可用的大规模数据分布式存储管理系统,基于物理上分布在各个数据存储节点的本地Linux系统的文件系统,为上层应用程序提供了一个逻辑上成为整体的大规模数据存储文件系统。与GFS类似,HDFS采用多副本(默认为3个副本)数据冗余存储机制,并提供了有效的数据出错检测和数据恢复机制,大大提高了数据存储的可靠性。
Common是一套为整个Hadoop系统提供底层支撑服务和常用工具的类库和API编程接口,这些底层服务包括Hadoop抽象文件系统FileSystem、远程过程调用RPC、系统配置工具Configuration以及序列化机制。在0.20及以前的版本中,Common包含HDFS、MapReduce和其他公共的项目内容;从0.21版本开始,HDFS和MapReduce被分离为独立的子项目,其余部分内容构成HadoopCommon。
Avro是一个数据序列化系统,用于将数据结构或数据对象转换成便于数据存储和网络传输的格式。Avro提供了丰富的数据结构类型,快速可压缩的二进制数据格式,存储持久性数据的文件集,远程调用RPC和简单动态语言集成等功能。
Zookeeper是一个分布式协调服务框架,主要用于解决分布式环境中的一致性问题。Zookeeper主要用于提供分布式应用中经常需要的系统可靠性维护、数据状态同步、统一命名服务、分布式应用配置项管理等功能。Zookeeper可用来在分布式环境下维护系统运行管理中的一些数据量不大的重要状态数据,并提供监测数据状态变化的机制,以此配合其他Hadoop子系统(如HBase、Hama等)或者用户开发的应用系统,解决分布式环境下系统可靠性管理和数据状态维护等问题。
Hive是一个建立在Hadoop之上的数据仓库,用于管理存储于HDFS或HBase中的结构化/半结构化数据。它最早由Facebook开发并用于处理并分析大量的用户及日志数据,2008年Facebook将其贡献给Apache成为Hadoop开源项目。为了便于熟悉SQL的传统数据库使用者使用Hadoop系统进行数据查询分析,Hive允许直接用类似SQL的HiveQL查询语言作为编程接口编写数据查询分析程序,并提供数据仓库所需要的数据抽取转换、存储管理和查询分析功能,而HiveQL语句在底层实现时被转换为相应的MapReduce程序加以执行。
Pig是一个用来处理大规模数据集的平台,由Yahoo!贡献给Apache成为开源项目。它简化了使用Hadoop进行数据分析处理的难度,提供一个面向领域的高层抽象语言PigLatin,通过该语言,程序员可以将复杂的数据分析任务实现为Pig操作上的数据流脚本,这些脚本最终执行时将被系统自动转换为MapReduce任务链,在Hadoop上加以执行。Yahoo!有大量的MapReduce作业是通过Pig实现的。
Chukwa是一个由Yahoo!贡献的开源的数据收集系统,主要用于日志的收集和数据的监控,并与MapReduce协同处理数据。Chukwa是一个基于Hadoop的大规模集群监控系统,继承了Hadoop系统的可靠性,具有良好的适应性和扩展性。它使用HDFS来存储数据,使用MapReduce来处理数据,同时还提供灵活强大的辅助工具用以分析、显示、监视数据结果。
Hama是一个基于BSP并行计算模型(BulkSynchronousParallel,大同步并行模型)的计算框架,主要提供一套支撑框架和工具,支持大规模科学计算或者具有复杂数据关联性的图计算。Hama类似Google公司开发的Pregel,Google利用Pregel来实现图遍历(BFS)、最短路径(SSSP)、PageRank等计算。Hama可以与Hadoop的HDSF进行完美的整合,利用HDFS对需要运行的任务和数据进行持久化存储。由于BSP在并行化计算模型上的灵活性,Hama框架可在大规模科学计算和图计算方面得到较多应用,完成矩阵计算、排序计算、PageRank、BFS等不同的大数据计算和处理任务。
Sqoop是SQL-to-Hadoop的缩写,是一个在关系数据库与Hadoop平台间进行快速批量数据交换的工具。它可以将一个关系数据库中的数据批量导入Hadoop的HDFS、HBase、Hive中,也可以反过来将Hadoop平台中的数据导入关系数据库中。Sqoop充分利用了HadoopMapReduce的并行化优点,整个数据交换过程基于MapReduce实现并行化的快速处理。
Flume是由Cloudera开发维护的一个分布式、高可靠、高可用、适合复杂环境下大规模日志数据采集的系统。它将数据从产生、传输、处理、输出的过程抽象为数据流,并允许在数据源中定义数据发送方,从而支持收集基于各种不同传输协议的数据,并提供对日志数据进行简单的数据过滤、格式转换等处理能力。输出时,Flume可支持将日志数据写往用户定制的输出目标。