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

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

引用的包如下图:

1b2e6da9305cd97b4926f88758ba4ded.png

2a7f907ae9a1961c19b6e6cf7aac991f.png

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();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值