本人写的如何使用DFS API 合并为一个大的天气数据文件
2014-01-23 11:00
459 查看
本人写的如何使用DFS API 合并为一个大的天气数据文件: package com.zk.hadoop; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IOUtils; public class AirTemperatureDataTranslate { public static byte[] buffer = new byte[4096]; public AirTemperatureDataTranslate() { // TODO Auto-generated constructor stub } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String localPath = args[0]; String dfsPath = args[1]; File localDir = new File(localPath); FileInputStream input = null; FSDataOutputStream fsOutput = null; Configuration conf = new Configuration(); try { FileSystem fs = FileSystem.get(new URI(dfsPath), conf); fsOutput = fs.create(new Path(dfsPath)); if(localDir.isDirectory()){ System.out.println("处理目录:" + localDir.getName()); File[] fileArr = localDir.listFiles(); for(File tmp : fileArr){ oper(tmp, input, fsOutput, conf); } }else{ System.out.println("处理文件:" + localDir.getName()); input = new FileInputStream(localDir); write(input, fsOutput); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (URISyntaxException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ if(fsOutput != null) IOUtils.closeStream(fsOutput); if(input != null) IOUtils.closeStream(input); } } /** * 递归扫描处理文件 * @param file * @param input * @param output * @param conf * @throws IOException */ public static void oper(File file, FileInputStream input, FSDataOutputStream output, Configuration conf) throws IOException{ if(file.isDirectory()){ File[] fileArr = file.listFiles(); for(File tmp : fileArr){ oper(tmp, input, output, conf); } }else{ System.out.println("处理文件:" + file.getName()); input = new FileInputStream(file); write(input, output); } } /** * 写入DFS 输出流 * @param input * @param output * @throws IOException */ public static void write(FileInputStream input, FSDataOutputStream output) throws IOException{ int readSize = 0; while((readSize = input.read(buffer)) > 0){ output.write(buffer, 0, readSize); } } } 说明:运行指定天气数据本地目录和合并后的HDFS上的文件名称即可。
相关文章推荐
- APache PDFbox API使用(3)----如何得到一个带表单的PDF文件的表单结构
- 【Android进阶】如何使用文件来保存程序中的数据
- 如何有效合并两个文件:一个是1亿条的用户基本信息,另一个是用户每天看电影连续剧等的记录,5000万条。其中内存只有1G。
- 如何使用dbus glib-binding传递一个图片文件
- 如何快速生成数据文件(fsutil命令,使用CreateFile和SetEndOfFile API函数,fopen和fseek RTL函数)
- 如何使用VC++遍历某一个目录下的全部文件呢?
- 多分区合并成一个分区数据丢失了如何数据恢复?
- 详解如何使用Docker部署一个web项目并打包成镜像文件
- 【转】如何复制一个正在使用的文件?(VB6.0)
- 复制文件时,如何显示进度条(使用BlockRead函数读取数据,并插入application.ProcessMessages)
- 如何使用CubeMx制作一个基于SD卡的文件系统工程(2)
- 在mysql中如何使用一个表中的数据去更新另外一个表的数据
- 0120如何合并两个使用 System.Xml 使用 Visual C#.NET 的 XML 文档中的数据
- 如何使用java程序打开一个文件?
- 只有一个ibd文件如何恢复数据表
- 如何使用DBMS_LOB从文件中加载CLOB数据
- 如何将不同信息的数据对象合并显示到同一个页面上或者滚动窗口中
- C# 如何使用配置文件保存应用程序里的配置数据
- 如何把多个lib文件合并在一个lib文件中
- oracle中的sys用户(修改密码)/////Oracle删除表空间的同时删除数据文件 ///// Oracle中如何保证用户只有一个session登录