import java.net.URI;
import java.util.Iterator;
import java.util.Map.Entry;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.BlockLocation;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.LocatedFileStatus;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.RemoteIterator;
import org.junit.Before;
import org.junit.Test;
/**
*
* 客户端去操作hdfs时,是有一个用户身份的
* 默认情况下,hdfs客户端api会从jvm中获取一个参数来作为自己的用户身份:-DHADOOP_USER_NAME=hadoop
*
* 也可以在构造客户端fs对象时,通过参数传递进去
* @author
*
*/
public class HdfsClientDemo {
FileSystem fs = null;
Configuration conf = null;
@Before
public void init() throws Exception{

conf = new Configuration();
// conf.set("fs.defaultFS", "hdfs://mini1:9000");
conf.set("dfs.replication", "5");

//拿到一个文件系统操作的客户端实例对象
fs = FileSystem.get(conf);
//可以直接传入 uri和用户身份
fs = FileSystem.get(new URI("hdfs://mini1:9000"),conf,"hadoop");
}

/**
* 上传文件
* @throws Exception
*/
@Test
public void testUpload() throws Exception {

fs.copyFromLocalFile(new Path("c:/access.log"), new Path("/access.log.copy"));
fs.close();
}

/**
* 下载文件
* @throws Exception
*/
@Test
public void testDownload() throws Exception {

fs.copyToLocalFile(new Path("/access.log.copy"), new Path("d:/"));
}

/**
* 打印参数
*/
@Test
public void testConf(){

Iterator<Entry<String, String>> it = conf.iterator();
while(it.hasNext()){
Entry<String, String> ent = it.next();
System.out.println(ent.getKey() + " : " + ent.getValue());

}

}

@Test
public void testMkdir() throws Exception {
boolean mkdirs = fs.mkdirs(new Path("/testmkdir/aaa/bbb"));
System.out.println(mkdirs);

}

@Test
public void testDelete() throws Exception {

boolean flag = fs.delete(new Path("/testmkdir/aaa"), true);
System.out.println(flag);

}

/**
* 递归列出指定目录下所有子文件夹中的文件
* @throws Exception
*/
@Test
public void testLs() throws Exception {

RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/"), true);

while(listFiles.hasNext()){
LocatedFileStatus fileStatus = listFiles.next();
System.out.println("blocksize: " +fileStatus.getBlockSize());
System.out.println("owner: " +fileStatus.getOwner());
System.out.println("Replication: " +fileStatus.getReplication());
System.out.println("Permission: " +fileStatus.getPermission());
System.out.println("Name: " +fileStatus.getPath().getName());
System.out.println("------------------");
BlockLocation[] blockLocations = fileStatus.getBlockLocations();
for(BlockLocation b:blockLocations){
System.out.println("块起始偏移量: " +b.getOffset());
System.out.println("块长度:" + b.getLength());
//块所在的datanode节点
String[] datanodes = b.getHosts();
for(String dn:datanodes){
System.out.println("datanode:" + dn);
}
}

}

}

@Test
public void testLs2() throws Exception {

FileStatus[] listStatus = fs.listStatus(new Path("/"));
for(FileStatus file :listStatus){

System.out.println("name: " + file.getPath().getName());
System.out.println((file.isFile()?"file":"directory"));

}

}

public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://mini1:9000");
//拿到一个文件系统操作的客户端实例对象
FileSystem fs = FileSystem.get(conf);

fs.copyFromLocalFile(new Path("c:/access.log"), new Path("/access.log.copy"));
fs.close();
}

}

最新文章

  1. 使用struts通配符报错
  2. 每天一个linux命令(36):diff 命令
  3. (转载)ORA-14452:试图创建,更改或删除正在使用的临时表中的索引
  4. 电赛菜鸟营培训(二)&mdash;&mdash;STM32F103CB之中断控制
  5. linux后台开发排错常用工具
  6. VMware WorkStation安装时提示The MSI failed
  7. php 显示sqlserver二进制图片
  8. Java并发编程:Thread类的使用(转载)
  9. String formate的语法解析及简单用法
  10. model,map,MapAndVivew用于页面跳转时候使用的即跳转后才添加属性 这样再回调中无法使用 因为回调的前提是页面不调转;解决的方法是用responsewrite(普通的字符响应)
  11. ABP框架
  12. Luogu4652 CEOI2017 One-Way Streets 树上差分
  13. python实现tail -f 功能
  14. C#学习笔记(26)——委托计算器
  15. vue-router 2 跳转失败原因
  16. 蓝桥杯 算法训练 ALGO-116 最大的算式
  17. python中迭代问题
  18. linux-redhat-git源码安装
  19. 用CAShapeLayer写股市K线图动画效果
  20. Cocos2d—X游戏开发之CCToggle(菜单标签切换)CCControlSwitch(开关切换)

热门文章

  1. 对于WebAssembly编译出来的.wasm文件js如何调用
  2. 使用Redis作为高速缓存
  3. Python自动化测试框架——数据驱动(从代码中读取)
  4. Ubuntu中安装配置 JDK与apache
  5. Web框架之Django_10 重要组件(Auth模块)
  6. LeetCode(107) Binary Tree Level Order Traversal II
  7. &lt;题解&gt;洛谷P3385 【模板】负环
  8. 【0门槛】PR稿的自我修养
  9. Window Phone 8手电筒
  10. IIS中如何应用程序启用https协议