您的位置:首页 > 编程语言 > Java开发

win7环境Eclipse中运行JAVA项目读取HDFS(hadoop-2.7.2)中的文件实例(2)

2016-10-12 00:00 471 查看
摘要: java读取HDFS中的文件的相应代码

前文点击这里

1、新建java项目,添加相应jar包。可在hadoop的安装目录下找到。(可以只添加hadoop-common-2.7.2.jar,已经包含了需要调用的class,但是在调试过程中会相继报错提示缺少的jar包,逐步完善即可)

引用的包如下图:





JAVA操作HDFS中的文件的代码实例:

批量读取HDFS指定目录下的文件并保存为本地log代码实例:

/**
* @author xinyuan.wei
* 2016年8月19日
* 以流的形式读取HDFS指定文件目录下的所有文件,并存为本地log文件
*/
public class HDFSReadAllTest {
public static void main(String[] args) {
System.setProperty("hadoop.home.dir",
"C:\\Users\\Administrator\\Desktop\\hadoop-common-2.7.1-bin-master");
// 添加windows环境下需要的运行库。此处直接引用了本地文件
String uri = "hdfs://192.168.0.130:9000/user/hadoop/flume/*";
// 需要遍历的HDFS的文件目录地址
Configuration conf = new Configuration();
try {
Path dfs = new Path(uri);
FileSystem fs = dfs.getFileSystem(conf);
FileStatus[] status = fs.globStatus(dfs);// 获取文件目录下的内容转为filestatus
Path[] listedPaths = FileUtil.stat2Paths(status);// 将filestatus转为path
for (Path p : listedPaths) {
// 遍历path并输出为本地文件
System.out.println(p);
Configuration conf2 = new Configuration();
FileSystem fs2 = FileSystem
.get(URI.create(p.toString()), conf2);
Path path2 = new Path(p.toString());
FSDataInputStream ins = fs2.open(path2);
String logFileName=p.toString().substring(p.toString().lastIndexOf("/")).substring(1);
FileOutputStream fos = new FileOutputStream(new File(
"C:\\Users\\Administrator\\Desktop\\FlumeData\\"
+ logFileName + ".log"));
//拼出本地路径
IOUtils.copyBytes(ins, fos, 4096, true);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

JAVA下载HDFS指定目录文件夹实例:

/**
* @author xinyuan.wei
* 2016年8月19日
* 将HDFS中的文件夹下载到本地,会将后缀为.crc的校验文件也下载下来
*/
public class HDFSDownloadTest {
public static void main(String[] args) {
System.setProperty("hadoop.home.dir",
"C:\\Users\\Administrator\\Desktop\\hadoop-common-2.7.1-bin-master");
// 添加windows环境下需要的运行库。
String remote= "hdfs://192.168.0.130:9000/user/hadoop/flume";
String local="C:\\Users\\Administrator\\Desktop\\";
// 需要遍历的HDFS的文件目录地址
Configuration conf = new Configuration();
Path path = new Path(remote);
FileSystem fs;
try {
fs = FileSystem.get(URI.create(remote), conf);
fs.copyToLocalFile(path, new Path(local));
//将HDFS中的flume文件夹下载到本地路径
System.out.println("download: from" + remote + " to " + local);
fs.close();
} catch (IOException e) {
e.printStackTrace();
}

}
}

JAVA读取指定HDFS目录中的log文件实例:

/**
* @author xinyuan.wei
* 2016年8月19日
* 读取HDFS目录下指定log文件的内容
*/
public class HDFSReadTest {
public static void main(String[] args){

System.setProperty("hadoop.home.dir",
"C:\\Users\\Administrator\\Desktop\\hadoop-common-2.7.1-bin-master");
// 添加windows环境下需要的运行库。
String uri="hdfs://192.168.0.130:9000/user/hadoop/flume/FlumeData.1471489138770";
Configuration conf = new Configuration();
try {
FileSystem fs = FileSystem.get(URI.create(uri),conf);
Path path = new Path(uri);
FSDataInputStream in = fs.open(path);
ByteArrayOutputStream  fos = new ByteArrayOutputStream();
//输出流
IOUtils.copyBytes(in, fos, 4096, true);
String str = fos.toString();//将输出流转换为字符串。
System.out.println("log文件内容\n:"+str);

} catch (IOException e) {
e.printStackTrace();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐