Hadoop框架透明地为应用提供可靠性和数据移动。它实现了名为MapReduce的编程范式:应用程序被分割成许多小部分,而每个部分都能在集群中的任意节点上执行或重新执行。此外,Hadoop还提供了分布式文件系统,用以存储所有计算节点的数据,这为整个集群带来了非常高的带宽。MapReduce和分布式文件系统的设计,使得整个框架能够自动处理节点故障。它使应用程序与成千上万的独立计算的电脑和PB级的数据
*hadoop架构*
Hadoop Common:在0.20及以前的版本中,包含HDFS、MapReduce和其他项目公共内容,从0.21开始HDFS和MapReduce被分离为独立的子项目,其余内容为Hadoop Common
HDFS:Hadoop分布式文件系统(Distributed File System)-HDFS(Hadoop Distributed File System)
MapReduce:并行计算框架,0.20前使用org.apache.hadoop.mapred旧接口,0.20版本开始引入org.apache.hadoop.mapreduce的新API
Apache HBase:分布式NoSQL列数据库,类似谷歌公司BigTable。
Apache Hive:构建于hadoop之上的数据仓库,通过一种类SQL语言HiveQL为用户提供数据的归纳、查询和分析等功能。Hive最初由Facebook贡献。
Hive适合用来对一段时间内的数据进行分析查询,例如,用来计算趋势或者网站的日志。Hive不应该用来进行实时的查询。因为它需要很长时间才可以返回结果。
Hbase非常适合用来进行大数据的实时查询。Facebook用Hbase进行消息和实时的分析。它也可以用来统计Facebook的连接数。
Apache Mahout:机器学习算法软件包。
Apache ZooKeeper:
ZooKeeper负责服务器节点和进程间的通信,是一个协调工具,因为Hadoop的几乎每个子项目都是用动物做logo,故这个协调软件叫动物园管理员。
Pig : 是一种探索大规模数据集的 脚本语言。MapReducer 的一个主要的 缺点 就是开发的 周期太长 了。我们要编写mapper和reducer,然后对代码进行编译打出 jar 包,提交到本地的 JVM 或者是 hadoop的集群 上,最后获取结果,这个周期是非常 耗时 的,即使使用 Streaming (它是hadoop的一个工具,用来创建和运行一类特殊的map/reduce作业。所谓的特殊的map/reduce作业可以是可执行文件或脚本本件(python、PHP、c等)。Streaming使用“标准输入”和“标准输出”与我们编写的Map和Reduce进行数据的交换。由此可知,任何能够使用“标准输入”和“标准输出”的编程语言都可以用来编写MapReduce程序)能在这个过程中除去代码的编译和打包的步骤,但是这一个过程还是很耗时, Pig的强大之处 就是他只要 几行Pig Latin代码就能处理TB级别的数据 。Pig提供了多个命令用于 检查和处理程序中的数据结构 ,因此它能很好的支持我们写 查询 。Pig的一个很有用的特性就是它支持在输入数据中有代表性的一个 小的数据集上试运行。 所以。我们在处理大的数据集前可以用那一个小的数据集 检查 我们的程序是不是有错误的。
Sqoop:是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
Flume: 是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,
Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力
*HDFS架构(分布式存储)*
HDFS采用master/slave架构。一个HDFS集群是有一个Namenode和一定数目的Datanode组成。Namenode是一个中心服务器,负责管理文件系统的namespace和客户端对文件的访问。Datanode在集群中一般是一个节点一个,负责管理节点上它们附带的存储。在内部,一个文件其实分成一个或多个block,这些block存储在Datanode集合里。Namenode执行文件系统的namespace操作,例如打开、关闭、重命名文件和目录,同时决定block到具体Datanode节点的映射。Datanode在Namenode的指挥下进行block的创建、删除和复制。Namenode和Datanode都是设计成可以跑在普通的廉价的运行linux的机器上。HDFS采用java语言开发,因此可以部署在很大范围的机器上。一个典型的部署场景是一台机器跑一个单独的Namenode节点,集群中的其他机器各跑一个Datanode实例。这个架构并不排除一台机器上跑多个Datanode,不过这比较少见。
单一节点的Namenode大大简化了系统的架构。Namenode负责保管和管理所有的HDFS元数据,因而用户数据就不需要通过Namenode(也就是说文件数据的读写是直接在Datanode上)
*MapReduce(分布式计算)*
HDFS:为海量数据提供了存储。
Map/Reduce:为海量数据提供了计算。
说明:HDFS与Map/Reduce两者的实现是完全分离的,并不是说没有HDFS就不能使用Map/Reduce进行计算。
键值对作为Map/Reduce操作的基础,成就了一个强大的编程模型,它的优点有:模型简单、运用性广泛、Hadoop并行处理和分而治之的思想可以得到很好的实现