合并本地文件到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目录下,com为calss文件目录
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 文件内容是否合并成功。
希望能够对大家有所帮助,也欢迎大家一起探讨大数据相关的各种疑难杂症问题。
个人 QQ:1053848752 Q群:422643911
更多hadoop相关问题:http://blog.csdn.net/xiaoyu_BD/article/category/6377428
- 合并本地文件到HDFS文件中
- Hadoop入口FileSystem HDFS操作 本地文件合并到HDFS和HDFS文件合并
- 合并本地文件并上传到hdfs
- 将本地文件拷到HDFS中
- 合并HDFS和本地文件系统中的小文件
- 上传本地文件到HDFS
- Flume:本地文件到HDFS
- 上传本地文件到HDFS
- 上传本地文件到hdfs
- 在HDFS中合并文件
- talend 将本地文件或者mysql文件上传到hadoop/hdfs
- hadoop创建文件夹及将本地文件移动到hdfs中
- HDFS之上传文件到hdfs中
- python spark中parquet文件写到hdfs,同时避免太多的小文件(block小文件合并)
- 多个Flume合并一个channel上传文件到Hdfs
- 本地多级文件 合并上传到hdfs(递归上传)
- HDFS文件的合并
- 合并 hdfs 文件
- CSS常见问题解决001——子div的margin-top影响父div的位置
- StringTokenizer与split()分割单词区别
- Invalid bean definition with name 'mailSender' defined in class path resource [office.mail.xml
- CSS常用效果实现001——将正方形图显示为圆形
- WebStorm 2016.2.2最新版-破解+汉化教程
- 合并本地文件到HDFS文件中
- 用Ant工具管理你的Web应用程序
- 内连接与外连接区别
- windows 7 64位 安装redis2.8.12 版本
- IOS开发工具——网络封包分析工具Charles
- 【数据结构】B树和B+树讲解
- spring,hiberante之*** is not valid without active transaction
- Go语言之环境搭建
- java线程同步volatile与synchronized