使用java操作HDFS

使用java操作HDFS

一.准备jar包

$HADOOP_HOME/share/hadoop下的jar添加至开发环境,test包和example以及source 包可忽略

1.common

2.hdfs

3.mapreduce

4.yarn

二.解决环境冲突问题

解决Could not locate executable null\bin\winutils.exe in the Hadoop binaries

1.在windouws下添加HADOOP_HOME系统环境变量

2.将winutils.exe拷贝到HADOOP_HOME的bin目录下

3.如果winutils.exe无法正常运行需要首先修复系统环境

4.重启Eclipse

三.初始化设置

1.win下添加地址映射

C:\Windows\System32\drivers\etc\hosts

2.加载配置

private static Configuration conf = new Configuration();

3.指定操作地址

private static final String HADOOP_URL="hdfs://etc01:8020";

4.初始化操作对象

 private static FileSystem fs; 

static {   
try { 
FileSystem.setDefaultUri(conf, HADOOP_URL);   
fs = FileSystem.get(conf);   
} catch (Exception e) {   
e.printStackTrace(); 
}   
} 

5.查看默认存储块大小

 fs.getDefaultBlockSize(); 

四.核心功能

1. 相对路径

 fs.getHomeDirectory() 

2.创建文件夹

 fs.mkdirs(new Path("xxx/xxx")); 

3.上传文件

fs.copyFromLocalFile(src, dst); 

4.下载文件

fs.copyToLocalFile(src, dst); 

5.删除文件

fs.copyToLocalFile(src, dst); 

6.使用流向HDFS写入内容

try { 
Path path = new Path("xxx/xxx");   
FSDataOutputStream os = fs.create(path, true);   
Writer out = new OutputStreamWriter(os, "utf-8"); 
out.write("你好");   
out.close();   
os.close();   
} catch (Exception e) {   
e.printStackTrace();   
} 

7.使用流从HDFS读取内容

try { 
Path path = new Path("xxx/xxx");   
FSDataInputStream dataInputStream = fs.open(path);   
InputStreamReader inputStreamReader = new InputStreamReader(dataInp utStream, "utf-8");   
BufferedReader bufferedReader = new BufferedReader(inputStreamReade r);   
String str = "";   
while ((str = bufferedReader.readLine()) !=null) {   
System.out.println(str);   
}   
bufferedReader.close();   
inputStreamReader.close();   
dataInputStream.close();   
} catch (Exception e) {   
e.printStackTrace();   
} 

8.使用Process进行命令调用

Runtime runtime = Runtime.getRuntime(); 
try { 
/* 使用Process可接收返回结果 */ 
Process process = runtime.exec("hdfs dfs -ls /"); 
InputStream is = process.getInputStream(); 
BufferedReader reader = new BufferedReader(new InputStreamReader(i s)); 
String line; 
while((line = reader.readLine())!= null){ 
System.out.println(line); 
} 
process.waitFor(); 
is.close(); 
reader.close(); 
process.destroy(); 
} catch (Exception e) { 
e.printStackTrace(); 17.    } 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值