Chpater03 Hadoop组件(二) 剖析MapReduce程序

采用maven来编写程序,功能为合并多个文件为一个文件
package hadoop;

import java.io.IOException;


import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class PutMerge {

	public static void main(String[] args) throws IOException {
			//保留键值对的配置类
			Configuration conf=new  Configuration();
			//Hadoop api的起点是FileSystem.使用工厂方法获取实例
			FileSystem hdfs=FileSystem.get(conf);
			//获取专用于本地文件系统的FileSystem对象
			FileSystem local=FileSystem.getLocal(conf);
			//使用Path独享编制文件和目录
			Path inputDir=new Path(args[0]);
			Path hdfsFile=new Path(args[1]);
			try{
				//FileStatus存储文件和目录的元数据,得到目录中的文件列表
				FileStatus[] inputFiles=local.listStatus(inputDir);
				//创建流对象
				FSDataOutputStream out=hdfs.create(hdfsFile);
				for (int i = 0; i < inputFiles.length; i++) {
					System.out.println(inputFiles[i].getPath().getName());
					FSDataInputStream in=local.open(inputFiles[i].getPath());
					byte[] buffer=new byte[256];
					int byteRead=0;
					while((byteRead=in.read(buffer))>0)
					{
						out.write(buffer, 0, byteRead);
					}
					in.close();
				}
				out.close();
			}
			catch(IOException e)
			{
				e.printStackTrace();
			}
		
	}

}

程序的大体流程为:1.根据用户定义的参数设置本地目录和HDFS目录;2.提取本地输入目录的每个文件信息;3.创建一个流写入HDFS文件;4.遍历目录下的每一个文件,打开一个流来读入文件,剩下就是标准的JAVA复制了。

Hadoop的数据类型

可序列化的键值对,数据类型实现了WriteableComaraple<T>,可以自定义类型,只要实现了该接口


maper和reducer均为MapReduceBase子类,均含有一下方法:


Mapper接口主要负责数据的处理,采用形式为Map<k1,v1,k2,v2>java泛型,由于键是排序,实现WriteableComparable,值是需要传递的,实现Writeable。Mapper只有一个接口方法即map,如下:


Reducer,实现Reducer接口,该接口也只有一个方法:


Partitioner:重定向Mapper输出


Combine:本地reduce


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值