hadoop版本:
hadoop1.0, hadoop2.0
Hadoop 1.0由一个分布式文件系统HDFS和一个离线计算框架MapReduce组成。HDFS由一个NameNode和多个DataNode组成,MapReduce由一个JobTracker和多个TaskTracker组成。
Hadoop 2.0则包含一个支持NameNode横向扩展的HDFS,一个资源管理系统YARN和一个运行在YARN上的离线计算框架MapReduce。相比于Hadoop 1.0,Hadoop 2.0功能更加强大,且具有更好的扩展性、性能,并支持多种计算框架。
hadoop发行版:
Apache Hadoop、Cloudera Hadoop(CDH)、Hortonworks Hadoop(yahoo)、Inter Hadoop、IBM Hadoop、华为等
Apache Hadoop 开源免费、环境都得自己搭、没有技术支持
CDH商业【有试用版】、基础套件都包含,搭建更方便
hadoop生态关键词:
HDFS、MapReduce、HBase、Hive、Pig、Zookeeper、Ambari、Hcatalog、Mahout、Avro、Sqoop、Flume、Oozie、Thrift .....,Storm、Spark
hadoop的基础:
原生的hadoop1.0开始其主要组成部分由HDFS、MapReduce两部分组成。一个用来分布式的存储文件或目标内容;一个用来进行分布式计算的框架。其它相关生态产品都是基于这2个来进行的上层组织或工作。
HBase:
有了HDFS等于是我们有了一个好多硬盘组成的一个超大的文件磁盘,这个意思就是你有一个可扩展的、无限大的超级磁盘;它的存储和读取方式对使用者是透明的,对于上层用户来说可以把它是一个特别大的本地磁盘即可;你可以进行目录建立、文件存放、数据写入、数据读取等等操作。
既然是一个大磁盘,那么当然就可以在其上做一些应用开发了,因为其目前主要用于文件存储,那么第一个应用想当然的就是数据库产品了。所以HBase就出来了,它就是一个基于hadoop的分布式非关系型数据库应用。【由微软一个子公司依照google发表的bigTable论文进行开发的应用】,主观上你可以简单的理解为一个NoSQL数据库即可。
Hive:
同样也是基于hadoop的一个应用,主要用于批量处理存放在HDFS之上的大文件内容。其主要特点是提供一个类SQL的内容查询接口,用户可以很容易的掌握其基本使用;其次它在进行文件处理或查询时使用了MapReduce的计算功能【除了不需要使用的功能】。
简单来讲Hive就是用来一个处理文件内容并把符合要求的内容过滤出来的一个应用。其工作方式是每次请求操作都会遍历所有的文件内容来进行相关条件的筛选和处理,最后返回处理的结果。其主要应用场景是用作数据仓库,即存放了大量内容的一个固定文件;所以你不能对其进行随机查询【都是遍历操作】、内容修改等操作。
facebook贡献的项目
Pig:
其主要功能和Hive类似,只是在使用上有些许差别;它的驱动语言是一个批处理的脚本语言,即通常你需要多个操作步骤才能完成一个数据的分析和提取。它同样也会用到HDFS和MapReduce功能。
简单理解Pig就是没有进化好的Hive。
Hcatalog:
到现在为止能够在HDFS上进行计算和数据处理的方式有MapReduce、Hive、Pig,但是这3个方式处理后得到的输出内容的格式并不是互相兼容的。所以如何能把它们的内容处理上兼容和结合起来呢?
Hcatalog的出现就是为了解决这个问题的,所以它是对上述3种基础数据处理形式的一个上层的表级别的抽象,即让MapReduce、Hive、Pig的处理都是按照Hcatalog表的形式处理和输出,达到最终3种不同处理程序之间的数据结构兼容。
Hcatalog的基础数据存放是基于Hive的格式,此外将来还会对HBase进行兼容支持。
Mahout:
提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。包括聚类、分类、推荐过滤、频繁子项挖掘
Avro:
一个数据序列化的系统;设计用于支持大批量数据交换的应用。它的主要特点有:支持二进制序列化方式,可以便捷,快速地处理大量数据;HBase(Ref)和Hive(Ref)的Client端与服务端的数据传输也采用了这个工具。
Sqoop:
用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。sqoop可以理解为sql + hadoop的缩写
Flume:
一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。
Oozie:
一个工作流引擎服务器,用于配置、管理和运行Hadoop Map/Reduce和Pig 任务工作流。通过HPDL(一种通过XML自定义处理的语言,类似JBOSS JBPM的JPDL)来构造工作流内容。
Thrift:
一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务.
Storm:
一个分布式的、容错的实时计算系统;为分布式实时计算提供了一组通用原语,可被用于“流处理”之中,实时处理消息并更新数据库。
可被用于“连续计算”(continuous computation),对数据流做连续查询,在计算时就将结果以流的形式输出给用户。它还可被用于“分布式RPC”,以并行的方式运行昂贵的运算。
Spark:
一个基于内存计算的开源的集群计算系统,目的是让数据分析更加快速。Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。