场景

合并小文件,存放到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)的更多相关文章

  1. ASP.NET访问网络映射盘&实现文件上传读取功能

    最近在改Web的时候,遇到一个问题,要跨机器访问共享文件夹,以实现文件正常上传下载功能. 要实现该功能,可以采用HTTP的方式,也可以使用网络映射磁盘的方式,今天主要给大家分享一下使用网络映射磁盘的方 ...

  2. SpringMVC+SwfUpload进行多文件同时上传

    由于最近项目需要做一个多文件同时上传的功能,所以好好的看了一下各种上传工具,感觉uploadify和SwfUpload的功能都比较强大,并且使用起来也很方便.SWFUpload是一个flash和js相 ...

  3. js实现大文件分片上传的方法

    借助js的Blob对象FormData对象可以实现大文件分片上传的功能,关于Blob和FormData的具体使用方法可以到如下地址去查看FormData 对象的使用Blob 对象的使用以下是实现代码, ...

  4. webkitdirectory 实现文件夹上传

    文件夹上传这个功能在web端可能有需求,这里就简单介绍下用法. 目前只有谷歌浏览器还有Microsoft Edge支持按照文件夹进行上传,具体可以看下百度云盘的网页版的上传按钮,在火狐下就支持按照文件 ...

  5. 在React中使用WebUploader实现大文件分片上传的踩坑日记!

    前段时间公司项目有个大文件分片上传的需求,项目是用React写的,大文件分片上传这个功能使用了WebUploader这个组件. 具体交互是: 1. 点击上传文件button后出现弹窗,弹窗内有选择文件 ...

  6. JavaWeb实现文件上传下载功能实例解析

    转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能 ...

  7. plupload 大文件分片上传与PHP分片合并探索

    最近老大分给我了做一个电影cms系统,其中涉及到一个功能,使用七牛云的文件上传功能.七牛javascript skd,使用起来很方便,屏蔽了许多的技术细节.如果只满足与调用sdk,那么可能工作中也就没 ...

  8. JavaWeb实现文件上传下载功能实例解析 (好用)

    转: JavaWeb实现文件上传下载功能实例解析 转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web ...

  9. asp.net 如何实现大文件断点上传功能?

    之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...

随机推荐

  1. [Android]生成heap dump文件(.hprof)

    Android生成heap dump文件(.hprof) 一个heap dump就是一个程序heap的快照,能够获知程序的哪些部分正在使用大部分的内存. 它保存为一种叫做HPROF的二进制格式.对于A ...

  2. 盘点20款主流应用FPS,最Skr帧率测试方法都在这里!

    ​​​无论是手机端还是PC端,画面的流畅度一直被用户视为衡量应用视觉体验的重要标准.用户往往通过主观感觉把视觉体验分为两种状态: 流畅视觉:行云流水,一气呵成: 非流畅视觉:“卡顿”.“抖动”.“迟钝 ...

  3. 大数据(5) - HDFS中的常用API操作

    一.安装java 二.IntelliJ IDEA(2018)安装和破解与初期配置 参考链接 1.进入官网下载IntelliJ IDEA https://www.jetbrains.com/idea/d ...

  4. Vsphere日记02.ESXi5.5.configuration

    2.Vsphere ESXi 5.5 configuration 步骤1:启动 ESXI 服务器 步骤2:按 F2 进入用户登录界面 输入用户名及密码,进入参数设置界面.密码为我安装时候设置的&quo ...

  5. eclipse 打开的时候弹出 'Building workspace' has encountered a problem. Errors occurred during

    Eclipse 里面project->Build Automatically上的对勾去掉

  6. Oracle数据迁移expdp/impdp

    Oracle数据迁移expdp/impdp目的:指导项目侧自行进行简单的数据泵迁移工作. 本文实验环境:Oracle 11.2.0.4,利用数据库自带的scott示例用户进行试验测试. 1.首先需要创 ...

  7. python 自动化之路 day 19 Django基础[二]

    Django - 路由系统 url.py - 视图函数 views.py - 数据库操作 models.py - 模板引擎渲染 - HttpReponse(字符串) - render(request, ...

  8. linux oracle error解决记录

    1.sqlplus / as sysdba后使用select instance_name,status from v$instance后出错: ERROR:ORA-01034: ORACLE not ...

  9. Struts2上传文件(1)

    使用Struts框架后, Struts2框架不会处理multipart/form-data的请求,它需要调用其他的上传文件框架来解析二进制数据.但是Struts在原有的上传解析器基础上做了很多的封装, ...

  10. ios -解决view遮挡按钮问题

    #pragma mark -解决view遮挡按钮问题 //分享按钮赋予 self 最顶部 / web按钮赋予 self 最顶部 / showBtn显示按钮 self 最顶部 / scrollviews ...