大数据之路(一)

大数据之路()hadoop

所谓的hadoop,是Apache公司引入的一个分布式系统框架,它实现了一个分布式文件系统(HDFS),可以以流的形式访问系统数据,hadoop的有点有很多,比如可靠性、高效性、可伸缩性、高容错性和提供开源代码。

hadoop基本架构

由两部分组成分布式文件系统HDFS和分布式系统框架MapReduce

HDFS组件:

Client:提供文件系统接口,与NamenodeDataNode交互访问HDFS中的文件

 

NameNode:整个集群中只有一个,管理目录树元数据并以“fsimage(元数据镜像文件)editlog(HDFS文件改动日志)的形式存放在本地磁盘,此外,它还监控DataNode健康状态

 

SecondaryNameNode:定期合并fsimageedits并存储

 

DataNode每个slave节点有一个,存储实际数据,并定期汇报给NameNode,以默认64M大小的block为单位组织文件

 

 

MapReduce组件:

Client提交MR程序到JobTracker端,可供用户产看作业运行状态

 

JobTracker负责资源监控和作业调度

 

TaskTracker将本节点的资源使用情况和任务运行情况汇报给JobTracker,执行JobTracker发来的命令

 

Task分为Map TaskReduce Task以“split”为单位进行处理,Map Taskslip迭代解析成一个个key/value对,交由map()进行处理,最终临时数据被分成若干partition交由Reduce Task处理,Reduce Task处理再对读取数据,对key/value进行排序,读取<key,value list>,调用reduce()函数处理,并将结果存储在HDFS

hadoop平台搭建

要想使用hadoop,先要搭建平台,前人给我们留下了宝贵博客

http://weixiaolu.iteye.com/blog/1401931,里面有详尽的搭建过程,

安装过程中注意配置好hadoop/conf目录下的hadoop-env.shcore-site.xmlmapred-site.xmlhdfs-site.xml文件,再在masters和slaves文件中填写localhost(因为是单机版)。搭建好之后在单机上运行过程如下:cd /usr/local/hadoop

bin/hadoop namenode -format  (格式化hdfs文件系统)

bin/start-all.sh

最后用jps检测是否启动成功 启动成功应该有下面几个进程

NameNode SecondaryNameNode TaskTracker DataNode JobTracker Jps

hadoop命令

hadoop fs对HDFS进行操作的命令

ls 列出目录及文件信息

lsr 循环列出目录、子目录及文件信息 

put 复制文件

cat 查看文件内容

rm 删除文件

rmr 删除目录以及子目录

copyFromLocal 从本地系统复制文件到HDFS系统

copyToLocal 从HDFS复制文件到本地

chmod 修改权限

du 显示该目录中每个文件或目录的大小 

text 显示文件内容,当文件为压缩文件时会先解压缩

MR接口体系

MapReduce接口体系结构包括InputFormat、Mapper、Partitioner、Reducer和OutputFormat

Mapper/Reducer解析

Mapper/Reducer中封装了应用程序的数据处理逻辑。为了简化接口,MapReduce要求所有存储在底层分布式文件系统上的数据要解析成key/value的形式,并交给map reduce函数处理,产生另外的key/value,Mapper的类图如下:



 

 

包括初始化、Map操作清理三部分

 

初始化:Mapper继承JobConfigurable接口。该接口中的configure方法通过JobConf参数对Mapper进行初始化

 

Map操作:MapReduce框架通过InputFormatRecordReaderInputSplit获取一个个key/value对,并交给下面的map()函数处理

void map(K1 key, V1 value, OutPutCollector<K2, V2> output, Reporter reporter) throws IOException;

OutPutCollectorReporter两个类型的参数用来输出结果和修改Counter值。 

清理:Mapper通过继承Closeable接口获得close方法,用户通过实现该方法对Mapper进行清理。

 

 

Hadoop MapReduce自带的Mapepr/Reducer实现的类层次图

 

 

ChainMapper:支持链式作业

IdentityMapper/Reducer:直接将输入的key/value输出

InvertMapper:交换keyvalue的位置

RegexMapper:正则表达式字符串匹配

TokenMapper:将字符串分割成若干个token

LongSumReduce:以key为组,对long类型的value求累加和

新版API改动:

1.Mapper由接口变为抽象类,不继承JobConfigurableCloseable两个接口,添加setupcleanup两个方法进行初始化和清理工作。

2.参数封装到Context对象中

3.添加run方法,方便用户定制map()函数调用方法

4.Reducer遍历value的迭代器类型变为java.lang.Iterable,使用户能采用“foreach”形式遍历所有value

猜你喜欢

转载自357236417.iteye.com/blog/2084150
今日推荐