013_HDFS文件合并上传putmarge功能(类似于hadoop fs -getmerge)
场景
合并小文件,存放到HDFS上。例如,当需要分析来自许多服务器的Apache日志时,各个日志文件可能比较小,然而Hadoop更合适处理大文件,效率会更高,此时就需要合并分散的文件。如果先将所有文件合并,在复制上传到HDFS上的话,需要占用本地计算机的大量磁盘空间。采取在向HDFS复制上传文件的过程中将小文件进行合并,效果会更好。
开发一个PutMerge程序,用于将合并文件后放入HDFS。
命令getmerge用于将一组HDFS文件在复制到本地计算机一起进行合并。
分析
文件的上传和下载就是字节字符流的读写操作
读文件:输入流-->read
写文件:输出流-->write
1、每个本地文件代开输入流,进行读取内容
2、HDFS文件打开输出流,进行内容写入。
3、循环操作(就是进行把小文件用流读出,在流状态下汇总到一定规模,然后写入到hdfs)
4、关闭流

实现代码
package org.dragon.hadoop.hdfs; 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; /**
* 功能:在向HDFS上传文件的过程中,进行合并文件
* @author ZhuXY
* @time 2016-3-7 上午9:24:13
*/
public class PutMerge { /**
* 复制上传文件,并将文件合并
* @param localDir:本地上传的文件目录
* @param hdfsFile:HDFS上传文件的名称,包括路径
*/
public static void putMerge(String localDir,String hdfsFile) {
//1)获取配置信息
Configuration conf=new Configuration(); //2)路径
Path localPath=new Path(localDir);
Path hdfsPath=new Path(hdfsFile); try {
//获取本地文件系统
FileSystem localFs=FileSystem.getLocal(conf); //获取HDFS文件系统
FileSystem hdfs=FileSystem.get(conf); FileStatus[] fileStatus=localFs.listStatus(localPath); //打开HDFS文件的输出流
FSDataOutputStream outputStream=hdfs.create(hdfsPath); //循环遍历本地文件
for (FileStatus fiStatus:fileStatus) {
//获取文件
Path path=fiStatus.getPath(); System.out.println("文件为"+path.getName()); //打开文件的输入流
FSDataInputStream inputStream=localFs.open(path); //进行流的读写操作
byte[] buffer =new byte[1024]; int len=0;
while ((len=inputStream.read(buffer))>0) {
outputStream.write(buffer,0,len); }
inputStream.close();
}
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
} } public static void main(String[] args) {
String localDir="D:/logs";
String hdfsFile="hdfs://hadoop-master.dragon.org:9000/wc/test/logs.data"; putMerge(localDir, hdfsFile);
}
}
有可能出现的问题

其实前面几个博客已经提到,这个需要在jdk1.7环境下编译和运行,jre1.7才行,具体原因不太知道。切换后就好了。

013_HDFS文件合并上传putmarge功能(类似于hadoop fs -getmerge)的更多相关文章
- ASP.NET访问网络映射盘&实现文件上传读取功能
最近在改Web的时候,遇到一个问题,要跨机器访问共享文件夹,以实现文件正常上传下载功能. 要实现该功能,可以采用HTTP的方式,也可以使用网络映射磁盘的方式,今天主要给大家分享一下使用网络映射磁盘的方 ...
- SpringMVC+SwfUpload进行多文件同时上传
由于最近项目需要做一个多文件同时上传的功能,所以好好的看了一下各种上传工具,感觉uploadify和SwfUpload的功能都比较强大,并且使用起来也很方便.SWFUpload是一个flash和js相 ...
- js实现大文件分片上传的方法
借助js的Blob对象FormData对象可以实现大文件分片上传的功能,关于Blob和FormData的具体使用方法可以到如下地址去查看FormData 对象的使用Blob 对象的使用以下是实现代码, ...
- webkitdirectory 实现文件夹上传
文件夹上传这个功能在web端可能有需求,这里就简单介绍下用法. 目前只有谷歌浏览器还有Microsoft Edge支持按照文件夹进行上传,具体可以看下百度云盘的网页版的上传按钮,在火狐下就支持按照文件 ...
- 在React中使用WebUploader实现大文件分片上传的踩坑日记!
前段时间公司项目有个大文件分片上传的需求,项目是用React写的,大文件分片上传这个功能使用了WebUploader这个组件. 具体交互是: 1. 点击上传文件button后出现弹窗,弹窗内有选择文件 ...
- JavaWeb实现文件上传下载功能实例解析
转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能 ...
- plupload 大文件分片上传与PHP分片合并探索
最近老大分给我了做一个电影cms系统,其中涉及到一个功能,使用七牛云的文件上传功能.七牛javascript skd,使用起来很方便,屏蔽了许多的技术细节.如果只满足与调用sdk,那么可能工作中也就没 ...
- JavaWeb实现文件上传下载功能实例解析 (好用)
转: JavaWeb实现文件上传下载功能实例解析 转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web ...
- asp.net 如何实现大文件断点上传功能?
之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...
随机推荐
- 基于docker的webrtc开发环境
在root目录下先放好自定义的constants.py文件再docker run 同时记得修改PUBLIC_IP 可以跨wifi通信 docker pull piasy/apprtc-server d ...
- java 调用cmd命令
public class Port{ public static void main(String[] args) { Runtime runtime=Runtime.getRuntime(); tr ...
- 慢慢理解RESTful架构
<理解本真的REST架构风格> 作者:李锟 链接:http://www.infoq.com/cn/articles/understanding-restful-style/ <理解R ...
- Redis 3 在CentOS 6.5上安装笔记,含启动脚本
Redis的强大就不多说了,直接上菜. 第1步:下载.编译.安装 cd /opt wget http://download.redis.io/releases/redis-3.0.5.tar.gz . ...
- cobbler 更换dns和dhcp服务器为dnsmasq
1) 需要配置/etc/cobbler/module.conf, 把manage_dns和manage_dhcp改为manage_dnsmasq 2) 重启cobbler和dnsmasq服务,dnsm ...
- 使用 Composer 的时候提示输入Token (hidden):
出现了Could not fetch https://api.github.com/ ...please create a GitHub OAuth token to go over the API ...
- SAP FI 中4个特殊期间
标准SAP ERP里面有个13-16的4个特殊的会计期间,这4个特殊的会计期间如何使用?作用是什么? SAP记帐期间变式,会计年度与特殊期间. 记帐期间变式是较难理解的一个内容.不过要表达的内容很简单 ...
- cocos2d-x 游戏优化方案
优化的方案: 引擎底层优化.纹理优化.渲染优化.资源缓存.内存优化. 纹理优化: cocos2d-x 底层是OPenGL ES实现的. 对于图案片载入的内存是2的幂次方. 使用的图片是100*128 ...
- Codeforces Round #324 (Div. 2) (快速判断素数模板)
蛋疼的比赛,当天忘了做了,做的模拟,太久没怎么做题了,然后C题这么简单的思路却一直卡到死,期间看了下D然后随便猜了下,暴力了下就过了. A.找一个能被t整除的n位数,那么除了<=10以外,其他都 ...
- poj1676(转换为二进制求解)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=13175 题目关键:将0~9十个数转换为二进制数进行枚举比较 int ...