目录
大数据与Hadoop
Hadoop模块:
Hadoop Common:
Hadoop 分布式文件系统 (HDFS):
Hadoop YARN:
Hadoop MapReduce:
Hadoop生态圈组件:
Spark(分布式计算框架)
Flink(分布式计算框架)
Zookeeper(分布式协作服务)
Sqoop(数据同步工具)
Hive/Impala(基于Hadoop的数据仓库)
HBase(分布式列存储数据库)
Kafka(分布式消息队列)
Tez(数据流编程框架)
Hadoop的特点
提起Hadoop,大家想到的一定是大数据,现在的Hadoop和大数据已经密不可分了,那么究竟什么是大数据呢?大数据一般来说可以用五个字总结:大 多 值 快 信,因为他们的英文单词首字母都是V 因此也叫5V
一、Volume:大 数据的采集,计算,存储量都非常的庞大。
二、Variety:多 种类和来源多样化。种类有:结构化、半结构化和非结构化数据等,常见的来源有:网络日志、音频、视频、图片等等。
三、Value:值 数据价值密度相对较低,犹如浪里淘金,百炼成钢般才能获取到大量信息中的部分有价值的信息
四、Velocity:快 数据增长速度快,处理速度也快,获取数据的速度也要快。
五、Veracity:信 数据的准确性和可信赖度,即数据的质量。
Hadoop是一个框架,它允许使用简单的编程模型跨计算机集群分布式处理大型数据集。它可以从单个服务器扩展到数千台机器,每台机器都提供本地计算和存储。Hadoop本身不是依靠硬件来提供高可用性,而是设计用于检测和处理应用层的故障,因此在计算机集群之上提供高可用性服务,但实际每台计算机都可能容易出现故障。
官网地址:Apache Hadoop
支持其他 Hadoop 模块的通用实用程序。
一种分布式文件系统,可提供对应用程序数据的高吞吐量访问。源自于Google的GFS论文,发表于2003年10月,HDFS是GFS克隆版。HDFS是Hadoop体系中数据存储管理的基础。它是一个高度容错的系统,能检测和应对硬件故障,用于在低成本的通用硬件上运行。HDFS简化了文件的一致性模型,通过流式数据访问,提供高吞吐量应用程序数据访问功能,适合带有大型数据集的应用程序。它提供了一次写入多次读取的机制,数据以块的形式,同时分布在集群不同物理机器上。
作业调度和集群资源管理的框架。YARN是下一代MapReduce,即MRv2,是在第一代MapReduce基础上演变而来的,主要是为了解决原始Hadoop扩展性较差,不支持多计算框架而提出的。Yarn是下一代 Hadoop 计算平台,Yarn是一个通用的运行时框架,用户可以编写自己的计算框架,在该运行环境中运行。用于自己编写的框架作为客户端的一个lib,在运用提交作业时打包即可。
基于 YARN 的系统,用于并行处理大型数据集。源自于google的MapReduce论文,发表于2004年12月,Hadoop MapReduce是google MapReduce 克隆版。MapReduce是一种分布式计算模型,用以进行大数据量的计算。它屏蔽了分布式计算框架细节,将计算抽象成map和reduce两部分,其中Map对数据集上的独立元素进行指定的操作,生成键-值对形式中间结果。Reduce则对中间结果中相同“键”的所有“值”进行规约,以得到最终结果。MapReduce非常适合在大量计算机组成的分布式并行环境里进行数据处理。
因为Hadoop体系也是一个计算框架,在这个框架下,可以使用一种简单的编程模式,通过多台计算机构成的集群,分布式处理大数据集。Hadoop是可扩展的,它可以方便地从单一服务器扩展到数千台服务器,每台服务器进行本地计算和存储。除了依赖于硬件交付的高可用性,软件库本身也提供数据保护,并可以在应用层做失败处理,从而在计算机集群的顶层提供高可用服务。Hadoop核心生态圈组件如下图所示:
说句题外话:是的,很像是一个动物园,让程序员来起名字就是这个样子,所以果然还是术业有专攻,起名字这种事情,以后还是交给专业的人来吧,这些名字不代表他们的功能!
看一张架构图,这就是实际企业级大数据应用的架构:
Spark是一种基于内存的分布式并行计算框架,不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。
Cluster Manager:在standalone模式中即为Master主节点,控制整个集群,监控worker。在YARN模式中为资源管理器。
Spark将数据抽象为RDD(弹性分布式数据集),内部提供了大量的库,包括Spark Core、Spark SQL、Spark Streaming、MLlib、GraphX。 开发者可以在同一个应用程序中无缝组合使用这些库。
Spark Core:包含Spark的基本功能;尤其是定义RDD的API、操作以及这两者上的动作。其他Spark的库都是构建在RDD和Spark Core之上的
Spark SQL:提供通过Apache Hive的SQL变体Hive查询语言(HiveQL)与Spark进行交互的API。每个数据库表被当做一个RDD,Spark SQL查询被转换为Spark操作。
Spark Streaming:对实时数据流进行处理和控制。Spark Streaming允许程序能够像普通RDD一样处理实时数据,通过短时批处理实现的伪流处理。
GraphX:控制图、并行图操作和计算的一组算法和工具的集合。GraphX扩展了RDD API,包含控制图、创建子图、访问路径上所有顶点的操作
Flink是一个基于内存的分布式并行处理框架,类似于Spark,但在部分设计思想有较大出入。对 Flink 而言,其所要处理的主要场景就是流数据,批数据只是流数据的一个极限特例而已。
Flink VS Spark
Spark中,RDD在运行时是表现为Java Object,而Flink主要表现为logical plan。所以在Flink中使用的类Dataframe api是被作为第一优先级来优化的。但是相对来说在spark RDD中就没有了这块的优化了。
Spark中,对于批处理有RDD,对于流式有DStream,不过内部实际还是RDD抽象;在Flink中,对于批处理有DataSet,对于流式我们有DataStreams,但是是同一个公用的引擎之上两个独立的抽象,并且Spark是伪流处理,而Flink是真流处理。
解决分布式环境下的数据管理问题:统一命名,状态同步,集群管理,配置同步等。
Hadoop的许多组件依赖于Zookeeper,它运行在计算机集群上面,用于管理Hadoop操作。
Sqoop是SQL-to-Hadoop的缩写,主要用于传统数据库和Hadoop之前传输数据。数据的导入和导出本质上是Mapreduce程序,充分利用了MR的并行化和容错性。
Sqoop利用数据库技术描述数据架构,用于在关系数据库、数据仓库和Hadoop之间转移数据。
Hive定义了一种类似SQL的查询语言(HQL),将SQL转化为MapReduce任务在Hadoop上执行。通常用于离线分析。
HQL用于运行存储在Hadoop上的查询语句,Hive让不熟悉MapReduce开发人员也能编写数据查询语句,然后这些语句被翻译为Hadoop上面的MapReduce任务。
Impala是用于处理存储在Hadoop集群中的大量数据的MPP(大规模并行处理)SQL查询引擎。 它是一个用C ++和Java编写的开源软件。 与Apache Hive不同,Impala不基于MapReduce算法。 它实现了一个基于守护进程的分布式架构,它负责在同一台机器上运行的查询执行的所有方面。因此执行效率高于Apache Hive。
HBase是一个建立在HDFS之上,面向列的针对结构化数据的可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库。
HBase采用了BigTable的数据模型:增强的稀疏排序映射表(Key/Value),其中,键由行关键字、列关键字和时间戳构成。
HBase提供了对大规模数据的随机、实时读写访问,同时,HBase中保存的数据可以使用MapReduce来处理,它将数据存储和并行计算完美地结合在一起。
Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。实现了主题、分区及其队列模式以及生产者、消费者架构模式。
生产者组件和消费者组件均可以连接到KafKa集群,而KafKa被认为是组件通信之间所使用的一种消息中间件。KafKa内部氛围很多Topic(一种高度抽象的数据结构),每个Topic又被分为很多分区(partition),每个分区中的数据按队列模式进行编号存储。被编号的日志数据称为此日志数据块在队列中的偏移量(offest),偏移量越大的数据块越新,即越靠近当前时间。生产环境中的最佳实践架构是Flume+KafKa+Spark Streaming。
基于YARN建立,提供强大而灵活的引擎,可执行任意有向无环图(DAG)数据处理任务,既支持批处理又支持交互式的用户场景。Tez已经被Hive、Pig等Hadoop生态圈的组件所采用,用来替代 MapReduce作为底层执行引擎。
总的来说,基于Hadoop开发出来的大数据平台,通常具有以下特点。
1)扩容能力:能够可靠地存储和处理PB级的数据。Hadoop生态基本采用HDFS作为存储组件,吞吐量高、稳定可靠。
2)成本低:可以利用廉价、通用的机器组成的服务器群分发、处理数据。这些服务器群总计可达数千个节点。
3)高效率:通过分发数据,Hadoop可以在数据所在节点上并行处理,处理速度非常快。
4)可靠性:Hadoop能自动维护数据的多份备份,并且在任务失败后能自动重新部署计算任务。
Hadoop生态同时也存在不少缺点。
1)因为Hadoop采用文件存储系统,所以读写时效性较差,至今没有一款既支持快速更新又支持高效查询的组件。
2)Hadoop生态系统日趋复杂,组件之间的兼容性差,安装和维护比较困难。
3)Hadoop各个组件功能相对单一,优点很明显,缺点也很明显。
4)云生态对Hadoop的冲击十分明显,云厂商定制化组件导致版本分歧进一步扩大,无法形成合力。
5)整体生态基于Java开发,容错性较差,可用性不高,组件容易挂掉。