hadoop 应用(1)-cat大量文件并上传至HDFS
2014-04-30 12:00
417 查看
//函数功能:将本地的大量文件cat到一起并上传至HDFS上
1.mkdir ./src
2.代码 ./src/PutMerge.java
package com.sdn.hadoop;
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 PutMerge{
public static void main(String[] args) throws IOException{
Configuration conf = new Configuration();
//get FileSystem object of HDFS
FileSystem hdfs = FileSystem.get(conf);
//get FileSystem object of local file system
FileSystem local = FileSystem.getLocal(conf);
Path inputDir = new Path(args[0]);
Path hdfsFile = new Path(args[1]);
try{
// get file list of inputDir
FileStatus[] inputFiles = local.listStatus(inputDir);
FSDataOutputStream out = hdfs.create(hdfsFile);
for(int i=0;i<inputFiles.length;i++){
System.out.println(inputFiles[i].getPath().getName());
FSDataInputStream in = local.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();
}
}
}
3.在./data 目录下准备输入数据,并放入待cat到一起的文件
4.编译java
javac -classpath /usr/local/hadoop-0.20.203.0/hadoop-core-0.20.203.0.jar:/usr/local/hadoop-0.20.203.0/lib/commons-cli-1.2.jar -d classes src/PutMerge.java
-classpath 是指定源代码中使用的各种类的库文件路径,中间以:分隔,-d 指定生成的class文件的放置路径
由于指定了package,因此其class文件是位于./classes/com/sdn/hadoop目录下的
5.打包
jar -cvf PutMerge.jar -C classes/ .
-C 表示在执行jar的时候要切换至classes目录,该目录下有编译好的class文件
6.执行
hadoop jar PutMerge.jar com.sdn.hadoop.PutMerge ./data /dw_ext/recmd/putmerge.data
输入路径:./data
输出文件:/dw_ext/recmd/putmerge.data
7.查看结果
hadoop fs -cat /dw_ext/recmd/putmerge.data
该文件就是将data目录下的所有文件cat到一起后生成的新文件
PS:
源代码中未加入package com.sdn.hadoop 时,直接执行hadoop jar PutMerge.jar ./data /dw_ext/recmd/putmerge.data时,报错如下:
Exception in thread "main" java.lang.ClassNotFoundException...
只需改成如下命令即可正常执行:
hadoop jar PutMerge.jar PutMerge
./data /dw_ext/recmd/putmerge.data
1.mkdir ./src
2.代码 ./src/PutMerge.java
package com.sdn.hadoop;
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 PutMerge{
public static void main(String[] args) throws IOException{
Configuration conf = new Configuration();
//get FileSystem object of HDFS
FileSystem hdfs = FileSystem.get(conf);
//get FileSystem object of local file system
FileSystem local = FileSystem.getLocal(conf);
Path inputDir = new Path(args[0]);
Path hdfsFile = new Path(args[1]);
try{
// get file list of inputDir
FileStatus[] inputFiles = local.listStatus(inputDir);
FSDataOutputStream out = hdfs.create(hdfsFile);
for(int i=0;i<inputFiles.length;i++){
System.out.println(inputFiles[i].getPath().getName());
FSDataInputStream in = local.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();
}
}
}
3.在./data 目录下准备输入数据,并放入待cat到一起的文件
4.编译java
javac -classpath /usr/local/hadoop-0.20.203.0/hadoop-core-0.20.203.0.jar:/usr/local/hadoop-0.20.203.0/lib/commons-cli-1.2.jar -d classes src/PutMerge.java
-classpath 是指定源代码中使用的各种类的库文件路径,中间以:分隔,-d 指定生成的class文件的放置路径
由于指定了package,因此其class文件是位于./classes/com/sdn/hadoop目录下的
5.打包
jar -cvf PutMerge.jar -C classes/ .
-C 表示在执行jar的时候要切换至classes目录,该目录下有编译好的class文件
6.执行
hadoop jar PutMerge.jar com.sdn.hadoop.PutMerge ./data /dw_ext/recmd/putmerge.data
输入路径:./data
输出文件:/dw_ext/recmd/putmerge.data
7.查看结果
hadoop fs -cat /dw_ext/recmd/putmerge.data
该文件就是将data目录下的所有文件cat到一起后生成的新文件
PS:
源代码中未加入package com.sdn.hadoop 时,直接执行hadoop jar PutMerge.jar ./data /dw_ext/recmd/putmerge.data时,报错如下:
Exception in thread "main" java.lang.ClassNotFoundException...
只需改成如下命令即可正常执行:
hadoop jar PutMerge.jar PutMerge
./data /dw_ext/recmd/putmerge.data
相关文章推荐
- Hadoop 上传文件到hdfs出现:java.io.FileNotFoundException: /test.txt (Permission denied)异常
- hadoop生态系统学习之路(三)java实现上传文件(本地或ftp)至hdfs
- Hadoop上传文件到HDFS失败
- 异常:hadoop 上传文件报错 WARN hdfs.DFSClient: DataStreamer Exception,hadoop datanode 启动不起来
- hadoop之hdfs文件上传
- 数据採集之Web端上传文件到Hadoop HDFS
- 向HDFS上传文件时报错16/07/23 01:13:30 WARN hdfs.DFSClient: DataStreamer Exception: org.apache.hadoop.ipc.Rem
- Hadoop学习笔记一(通过Java API 操作HDFS,文件上传、下载)
- Hadoop好友推荐系统-HDFS的文件上传和下载
- Hadoop——上传本地文件到hdfs
- Hadoop之HDFS原理及文件上传下载源码分析(上)
- springMVC + hadoop + httpclient 文件上传请求直接写入hdfs
- [Hadoop]Hadoop上传本地文件到HDFS
- hadoop开发:HDFS上传文件失败原因
- 013_HDFS文件合并上传putmarge功能(类似于hadoop fs -getmerge)
- 数据采集之Web端上传文件到Hadoop HDFS
- Hadoop HDFS文件系统通过java FileSystem 实现上传下载等
- 利用 hadoop 的 FileSystem copyFromLocalFile 方法实现文件上传HDFS中 Hadoop 版本 2.7.0
- java 实现hadoop的hdfs文件的上传下载删除创建