Hadoop:Google云计算的开源实现

Hadoop是Apache开源组织的一个分布式计算机框架,可以在大量廉价的硬件设备组成的集群上运行应用程序,为应用程序提供一组稳定可靠的接口,旨在构建一个具有高可靠性和良好扩展性的分布式系统。

Hadoop的核心是HDFS,MapReduce和HBase,它们分别对应Google的云计算GFS,MapReduce和Bigtable。

Hadoop主要由以下几个子项目组成:

1)Hadoop Common:原来的Hadoop Core,这是整个Hadoop项目的核心

2)Avro:Hadoop的RPC方案

3)Vhukwa:一个用来管理大型分布式系统的数据采集系统

4)HBase:支持结构化数据存储的分布式数据库,是Bigtable的开源实现

5)HDFS:提供高呑吐量的分布式文件系统,是GFS的开源实现

6)Hive:提供数据摘要和查询功能键的数据仓库

7)MapReduce:大型数据的分布式处理模型

8)Pig:是在MapReduce上构建的一种高级的数据流语言

9)ZooKeeper:用于解决分布式系统中的一致性问题,是Chubby的开源实现

除了开源以外,hadoop还有很多优点:

1)可扩展

2)经济

3)可靠

4)高效

分布式文件系统HDFS

设计前提和目标:

1)处理硬件错误并快速自动恢复

2)流式的数据访问,应用程序以流式读为主,做批量处理,更注重数据访问的高吞吐量

3)超大规模数据集,支持大文件存储,一个单一的HDFS实例能够支撑数以千万计的文件,并且能在一个集群里扩展到数百个节点

4)简单一致性模型,应用程序一般对文件实行一次性写,多次读的访问模式

5)移动计算比移动数据更简单

6)异构软硬件平台间的可移植性

体系结构:

HDFS是一个主从结构的体系,HDFS集群有一个NameNode和很多个DataNode组成的。

NameNode管理文件系统的元数据,DataNode存储实际的数据。客户端联系NameNode以获取文件的元数据,而真正的文件I/O操作是直接和DataNode进行交互的。

HDFS的数据都是一次写入多次读取,典型的块大小是64MB

客户端从NameNode获得组成文件的数据块的位置列表,也就是知道数据块被存储在哪些DataNode上,然后客户端直接从DataNode上读取文件,NameNode不参与文件的传输

NameNode使用事件日志记录HDFS元数据的变化,使用映像文件存储文件系统的命名空间

保障可靠性措施:

1)冗余备份

2)副本存放

3)心跳检测,每个DataNode定期接受心跳包和块报告,收到心跳包说明该DataNode工作正常

4)安全模式,在系统启动时会进入一个安全模式,此时不会出现数据块的写操作

5)数据完整性检测,在HDFS文件创建时,计算每个数据块和校验和,并将校验和作为一个单独的隐藏文件保存在命名空间下。客户端获取文件时会做对应的校验检查,如果不同则客户端认为数据块有损坏,将从其它的DataNode获取数据块的副本

6)空间回收,当文件被删除时,会先被移到/trash目录里,只要还在这个目录里就可以很快恢复,目录的清空时间是可配置的

7)元数据磁盘失效,映像文件和事务日志是HDFS的核心数据结构

8)快照,快照支持某个时间的数据复制,当HDFS数据损坏时,可以回滚到过去一个已知正确的时间点。

提升性能的措施:

1)副本选择

2)负载均衡

3)客户端缓存

4)流水线复制

访问接口:

可以通过Java API,也可以使用C语言封装的API

1)org.apache.hadoop.conf:定义了系统参数的配置文件处理API

2)org.apache.hadoop.dfs:Hadoop分布式文件系统(HDFS)模块的实现

3)org.apache.hadoop.fs:定义了抽象的文件系统API

4)org.apache.hadoop.io:定义了通用的I/O API,用于针对网络,数据库,文件等数据对象做读/写操作

5)org.apache.hadoop.ipc:用于网络服务端和客户端的工具,封装了网络异步I/O的基础模块

6)org.apache.hadoop.mapred:Hadoop分布式计算系统(MapReduce)模块的实现

7)org.apache.hadoop.metrics:定义了用于性能统计信息的API,主要用于mapred和dfs模块

8)org.apache.hadoop.record:定义了针对记录的I/O API类及一个记录描述语言的翻译器

9)org.apache.hadoop.tools:定义了一些通用的工具

10)org.apache.hadoop.util:定义了一些公用的API

分布式数据处理MapReduce

MapReduce是一种分布式的计算机模型,也是Hadoop的核心

逻辑模型:

将运行在大规模集群上的并行计算过程抽象为两个函数:Map和Reduce,也就是映射和化简

简单说MapReduce就是任务的分解与结果的汇总,Map把任务分解为多个任务,Reduce把分解后的结果汇总起来,得到最终结果

实现机制:

1,分布式并行计算,MapReduce框架由JobTracker和TaskTracker这两类服务调度的。JobTracker是主控服务,只有一个,负责调度和管理TaskTracker

2,本地计算

3,任务粒度,有利于数据的本地性,一个小数据集启动一个Map服务,M个Map任务可以在N台计算机上并行运行,用户可以指定Reduce任务的数量

4,Combine

5,分区,经过连接后可以把产生的中间结果按key的范围划分为R份

6,读取中间结果

7,任务管道

分布式数据化数据表HBase

HBase数据库是基于hadoop的项目,是针对Google的Bigtable的开源实现,它与Google的Bigtable相似

逻辑模型:

用户在表格里存储一系列的数据行,每行包含一个可排序的关键字,一个可选的时间戳及一些可能有数据的列

Hadoop的安装

可以使用虚拟机进行模拟,如果机器上没有安装SSH,安装SSH

配置安装JDK,详细步骤网上很多不一一操作了

到apache的hadoop网站上下载hadoop-0.20.2.tar.gz

使用ftp传到相应的服务器上,如果是虚拟机可以到共享文件夹下选择

复制到linux下的usr目录

tar -zxvf hadoop-0.20.2.tar.gz

解压后使用vi找到conf/hadoop-env.sh文件

打开

# The java implementation to use.  Required.
# export JAVA_HOME=/usr/lib/j2sdk1.5-sun
export JAVA_HOME=/opt/jdk1.6.0_27

# Extra Java CLASSPATH elements. Optional.
# export HADOOP_CLASSPATH=


安装步骤:

hadoop有三种运行模式:单机模式,伪分布式模式和完全分布式模式。

在调试阶段使用单机模式

查看并且运行示例

bin/hadoop jar hadoop-0.20.2-examples.jar wordcount input output

cat output/*


查看到的结果如下:

[root@LinuxServer hadoop-0.20.2]# cat output/*
hadoop 1
hello 2
world 1

作者:​​张锋​

更多精彩文章可以观注

微信公众号

云计算读书笔记(五)_hadoop