合并本地文件到HDFS文件中

来源:互联网 发布:c语言0xff是什么意思 编辑:程序博客网 时间:2024/05/16 07:21

下面的MergeTest 程序,用于合并本地多个文件,并把合并后的新文件放入HDFS,这个程序在实际工作中会经常用到。

第一步:开发java程序

package com.hadoop.hdfs.test;

 

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 MergeTest {

 

/**

 * 功能:把第1个参数指定的目录下的所有文件都合并写到HDFS系统中指定的文件中。

 * 第1个参数为Linux本地的目录。

 * 第2个参数为HDFS系统中的文件。

 * @param args

 * @throws IOException

 */ 

public static void main(String[] args)  throws IOException{

// TODO 自动生成的方法存根

Configuration conf = new Configuration();

//获得HDFS文件系统的对象

FileSystem hdfsFileSystem = FileSystem.get(conf);  

//获得本地文件系统的对象

FileSystem localFileSystem = FileSystem.getLocal(conf);

//设定输入目录

Path inputDir = new Path(args[0]);

//设定输出目录

Path hdfsFile = new Path(args[1]);

try {

//FileStatus的listStatus()方法获得一个目录中的文件列表

FileStatus[] inputFiles = localFileSystem.listStatus(inputDir);

//生成HDFS输出流

FSDataOutputStream out = hdfsFileSystem.create(hdfsFile);

for (int i=0; i<inputFiles.length; i++) {

 System.out.println(inputFiles[i].getPath().getName());

 //打开本地输入流

 FSDataInputStream in = localFileSystem.open(inputFiles[i].getPath());

 byte[] buffer = new byte[256];

 int bytesRead = 0;

 while ((bytesRead = in.read(buffer))>0) {

     //通过一个循环来写入

     out.write(buffer, 0, bytesRead);

 }

    in.close();

}

   out.close();

        }

catch (IOException e) {

 e.printStackTrace();

}

}

}

 

第二步:把编译后class文件打成jar

jar    cvf  MergeTest.jar   com

注意:1、此处命令在dos命令下执行

      2、执行此命令需要到com目录下,comcalss文件目录

      3、打包需要把整个com文件夹打包

第三步:上传jar

上传 MergeTest.jar /HADOOP_HOME/目录下。

注意:如果 MergeTest.jar已经存在/HADOOP_HOME/目录下,则要先删除此文件,再上传。 

第四步:运行程序

/HADOOP_HOME/目录下执行如下命令:

hadoop   jar  MergeTest.jar    com.hadoop.hdfs.test.MergeTest    /tmp/test/    /root/hadoop/tmp    /myfile.txt

备注:此命令的功能是把本地(linux/tmp/test/目录下的所有文件内容合并写到HDFS 文件系统中的/root/hadoop/tmp /myfile.txt文件里。

然后查看myfile.txt 文件内容是否合并成功。

 

希望能够对大家有所帮助,也欢迎大家一起探讨大数据相关的各种疑难杂症问题。

个人 QQ1053848752 Q群:422643911


更多hadoop相关问题:http://blog.csdn.net/xiaoyu_BD/article/category/6377428

1 0
原创粉丝点击