Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户能够在不了解分布式底层细节的状况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。具备可靠、高效、可伸缩的特色。java
Hadoop的核心是YARN,HDFS和Mapreduce。node
优势:web
缺点算法
优势数据库
缺点tomcat
源自于Google的GFS论文,发表于2003年10月,HDFS是GFS克隆版。安全
HDFS是Hadoop体系中存储管理的基础。他是高度容错的系统,能检测和应对硬件故障,用于在低成本的通用硬件上运行。服务器
HDFS简化了文件的一致性模型,经过流式数据访问,提升吞吐量应用程序数据访问功能,适合带有大型数据集的应用程序。架构
它提供了一次写入屡次读取的机制,数据以块的形式,同时分布式在集群不一样物理机上。框架
CS架构:分为两部分,NameNode(服务端)和DataNode(客户端)
Client是第三方程序。
访问数据:Client请求访问NameNode,NameNode返回相应的元数据(告知client数据在哪一个DataNode上),client找对应的DataNode读取数据。
NameNode负责数据存储到哪一个节点上。
容错机制(数据备份): NameNode将数据存储到某个节点的同时,会根据配置建立对应副本到其余(物理)节点上(能够感知数据在哪一个物理节点上)。
源自于Google的MapReduce论文,发表于2004年12月,Hadoop MapReduce是Google MapReduce的克隆版。
MapReduce是一种分布式计算模型,泳衣进行大数据量的计算。他屏蔽了分布式计算框架细节,将计算抽象成map和reduce两部分。
map对数据集上的独立元素进行指定的操做,生成键-值对形式中间结果。reduce则对中间结果中相同“键”的全部“值”进行规约,以获得最终结果。
MapReduce很是适合大量计算机组成的分布式并行环境里进行数据处理。
源自于Google的bigtable论文,发表于2006年11月,HBase是Google bigtable的克隆版。
HBase是一个开源的非关系型分布式数据库(NoSQL)。
HBase是一个创建在HDFS之上, 面向列的稀疏排序映射表(Key/value),其中,键由行关键字、列关键字和时间戳构成。
在HBase中,列簇至关于关系型数据库的表。而key-value这样的键值对,至关于数据库里面的一行。
HBase提供了对大规模数据的随机、实时读写访问;同时,HBase中保存的数据可使用MapReduce来处理,它将数据和并行计算完美结合在一块儿。
HBase具备高可靠性、高性能、面向列、可伸缩的特色
源自于Google的chubby论文,发表于2006年11月,zookeeper是chubby的克隆版。
zookeeper是一个分布式应用程序协调服务。
它解决了分布式环境下数据管理问题:统一命名,状态同步,集群管理,配置同步等。
Hadoop的许多组件依赖于zookeeper,它运行在计算集群上面,用于管理Hadoop操做。
zookeeper名字空间的每一个节点都是以这样一个路径来标识的。这样的节点统一称为znode。
分为如下几类(如下能够组成)
由Facebook开源,最初用于解决海量结构化的日志数据统计问题。
Hive定义了一种相似SQL的查询语言(HQL),将SQL转化为MapReduce任务在Hadoop上执行。一般用于离线分析。
HQL用于运行存储在Hadoop上的查询语句,Hive让部署MapReduce开发人员也能编写数据查询语句,而后这些语句被翻译为Hadoop上面的MapReduce任务。
Hadoop和MapReduce是hive架构的根基。
分为两大类:服务端组件和客户端组件
有Yahoo开源,设计动机是提供一种基于MapReduce的ad-hoc(计算在query时发生)数据分析工具。
pig定义了一种数据流语言——pig latin,它是MapReduce变成的复杂性的抽象,pig平台包括运行环境和用于Hadoop数据集的脚本语言(pig latin)。
实现:pig 编译器将pig latin翻译成MapReduce程序序列,将脚本转换成MapReduce任务在Hadoop上执行,一般用于离线分析。(如今几乎让hive去掉)
sqoop是SQL-to-Hadoop的缩写,主要用于传统数据库和Hadoop之间传输数据。数据的导入和导出本质是MapReduce程序,充分利用MR的并行化和容错性。
sqoop利用数据库计算描述数据架构,用在关系数据库、数据仓库和Hadoop之间转移数据。
flume是cloudera开源的日志收集系统,具备分布式、高可靠、高容错、易于定制和扩展的特色。
它将数据从产生、传输、处理并最终写入目标路径的过程抽象为数据流,在具体的数据流中,数据源支持在flume中定制数据发送方,从而支持收集各类不一样协议数据。(能够直接写到Hadoop中,传输到另一台服务器中,或本地指定路径)
flume数据流提供对日志数据进行简单处理的能力,如过滤、格式转换等。此外flume还具备可以将日志写到各类数据目标(可定制)的能力。
总的来讲,flume是一个可扩展、适合复杂环境的海量日志收集系统,也能够用于收集其余类型数据。
Oozie是一个基于工做流引擎的服务器,能够在上面运行Hadoop的MapReduce和pig任务。它实际上是一个运行在Java Servlet容器(好比tomcat)中的java web应用。
对于Oozie来讲,工做流就是一系列的操做(好比Hadoop的MR,以及pig的任务),这些操做经过有向无环图的机制控制。这种控制依赖是,一个操做的输入依赖于前一个任务的输出,只有前一个操做全完完成后,才能开始第二个。
Oozie工做流经过hPDL(hPDL是一种xml的流程定义语言)。工做流操做经过远程系统启动任务,当任务完成后,远程系统会进行回调来通知任务已经结束,而后
再开始下一个操做。
控制流节点定义了工做流的开始和借宿(start、end以及fail的节点),宁控制工做流执行路径(decision,fork,join节点)。操做节是工做流触发计算/处理任务的执行,Oozie支持不一样的任务类型Hadoop MapReduce,hdfs,pig,ssh,email,Oozie子工做流等等。Oozie能够自动以扩展任务类型。
Oozie工做流能够参数化的方式执行(使用变量${inputDir}定义)。当提交工做流任务时,就须要同时提供参数。若参数合适的话(使用不一样的目录)就能够定义并行的工做流任务。
YARN是一代MapReduce,即MRv2。是在第一代MapReduce基础上演变而来的,主要是为了解决原始Hadoop扩展性查,不支持多计算框架而提出的。
YARN是下一代Hadoop计算平台,是一个通用的运行框架,用户能够编写本身计算框架,在该运行环境中运行。
用于本身编写的框架做为客户端的一个lib,在运行提交做业时打包便可。
spark是一个Apache项目,它被标榜为“快如闪电的集群计算”。它拥有了一个繁荣的开源社区,而且是目前最活跃的Apache项目。
spark是分布式批处理系统和分析挖掘引擎。
最先spark是UC berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架。
快,内存计算;资源分配灵活,可基于Yarn或Mesos
spark提供了一个更快的、更通用的数据处理平台。和Hadoop相比,spark可让你的程序在内训中运行时速度提高100倍,或者在磁盘时速度提升10倍。
kafka是LinkedIn与2010年12月开源的消息队列系统,他主要用于处理活跃的流式数据。
活跃的流式数据在web网站应用中很是常见,这些数据包括:网站的PV,用户访问了什么内容,搜索了什么内容等等。这些动做一般以日志的形式记录下来,而后每一个一段时间进行一次统计处理。
storm是一个开源、分布式、高容错的实时计算系统,弥补了Hadoop批处理所不能知足的实时要求,常常用于在实时分析、在线机器学习、持续计算、分布式远程调用和EIL等领域。
https://blog.csdn.net/hxyerui/article/details/51179488
Hue(Hadoop user experience)是一个开源的Apache Hadoop UI系统,由Cloudera Desktop演化而来,它是基于Python Web框架Django实现的。
在streamsets推出前,flume,scribe等少数开源工具是流式采集日志仅有的解决方案,flume的应用案例最多。streamsets是flume的良好替代品
streamsets的源和目标的支持特别丰富,还能够对数据进行不落地处理,所以还能够替代传统ETL软件的一部分功能
资源占用率比flume略高,可是由于和flume同样能够分布式部署,问题不大