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