hadoop笔记3--hdfs操作

这篇文章先记录一下在java代码中对hdfs的基本操作。

打开eclipse,新建一个Map/Reduce工程。后台运行起hadoop。可以看到我的目录结构如下:

eclipse中的目录

我新建了一个HdfsTest.java的类,我们就在这个类里面来实现对hdfs的基本操作。

1.hdfs上创建新文件

首先来看看利用hadoop的API如何创建新文件,主要代码如下:

public static void createFile(String dst,byte[] contents) throws IOException{
  Configuration conf = new Configuration();
  conf.set("fs.defaultFS","hdfs://localhost:9000");
  FileSystem fs = FileSystem.get(conf);
  Path dstPath = new Path(dst);

  // 打开一个输出流
  FSDataOutputStream outputStream = fs.create(dstPath);
  outputStream.write(contents); 
  outputStream.close();
  
  fs.close();
  System.out.println("创建文件成功");
}

来看看那些对应的类是什么意思?(仅仅是简单描述,具体的可看官网API)

Configuration:配置类,生成配置对象。
FileSystem:文件系统的抽象类。
Path:看名字也就看得出来代表的是路径。
FSDataOutputStream:hadoop提供的输出流。

这里用到的主要的就是上面几个类,其实整个过程就是获取到hdfs上的路径,然后通过输出流的方式将数据给写入到hdfs中。除了类略有不同外,和java操作IO流时基本一样。

2.上传文件到hdfs

接下来是上传文件,同样先看看代码:

public static void uploadFile(String src,String dis) throws IOException{
  Configuration conf = new Configuration();
  conf.set("fs.defaultFS","hdfs://localhost:9000");
  FileSystem fs = FileSystem.get(conf);

  //原路径
  Path srcPath = new Path(src);

  //目标路径
  Path disPath = new Path(dis);

  fs.copyFromLocalFile(srcPath,disPath);
  fs.copyFromLocalFile(true,srcPath,disPath);
  
  //打印文件路径
  System.out.println("上传的路径"+conf.get(fs.defaultFS));
  
  //获取目录信息
  FileStatus[] fileStatus = fs.listStatus(disPath);
  
  for(FileStatus file:fileStatus){
    System.out.println(file.getPath());
  }
}

这代码和创建新文件的代码看上去差不多,其实也差不多。还是那么几个类,甚至还少了输出流,利用FileSystem对象的方法就能实现上传文件到hdfs。多出来的类如下:

FileStatus:该对象封装了文件系统中文件和目录的元数据,包括文件的长度、块大小、备份数、修改时间、所有者以及权限等信息。

3.hdfs上文件的删除

文件的删除操作如下:

public static void deleteFile(String filepath) throws IOException{
  Configuration conf = new Configuration();
  conf.set("fs.defaultFS","hdfs://localhost:9000");
  FileSystem fs = FileSystem.get(conf);

  Path  path = new Path(filepath);
  
  //当文件系统关闭时才真正删除此文件。
  //boolean isok = fs.deleteOnExit(path);
  //删除文件或目录,后面的boolean值是true,如果path是目录,则会递归删除下面的所有文件;如果path是文件,则false或true无所谓
  boolean isok = fs.delete(path,true);


  if(isok){
    System.out.println("文件删除成功");
  }else{
    System.out.println("文件删除失败");
  }

  fs.close();
}

4.hdfs上目录的创建

代码如下:

public static void mkdir(String path) throws IOException{
  Configuration conf = new Configuration();
  conf.set("fs.defaultFS","hdfs://localhost:9000");
  FileSystem fs = FileSystem.get(conf);

  Path = path = new Path(path);

  boolean isok = fs.mkdirs(path);

  if(isok){
    System.out.println("创建文件夹成功");
  }else{
    System.out.println("创建文件夹失败");
  }

  fs.close();
}

5.hdfs文件的读取

代码如下:

public static void readfile(String path) throws IOException{
  Configuration conf = new Configuration();
  conf.set("fs.defaultFS","hdfs://localhost:9000");
  FileSystem fs = FileSystem.get(conf);

  Path = path = new Path(path);

  InputStream in = null;

  try{
    in = fs.open(path);
  
    //读取到标准输出
    IOUtils.copyBytes(in,System.out,4096,false);
  }catch(IOException e){
    e.printStackTrace();
  }finally{
    IOUtils.closeStream(in);
  }

  fs.close();
}

以上仅仅是写了些可能会常用的操作来熟悉用java操作hdfs文件系统。

下一篇记录一下关于hadoop中的mapreduce框架

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容

  • 当数据量增大到超出了单个物理计算机存储容量时,有必要把它分开存储在多个不同的计算机中。那些管理存储在多个网络互连的...
    单行线的旋律阅读 1,914评论 0 7
  • 先思考问题 我们处在一个大数据的时代已经是不争的事实,这主要表现在数据源多且大,如互联网数据,人们也认识到数据里往...
    墙角儿的花阅读 7,355评论 0 9
  • 之前的有点忘记了,这里在云笔记拿出来再玩玩.看不懂的可以留言 大家可以尝试下Ambari来配置Hadoop的相关环...
    HT_Jonson阅读 2,949评论 0 50
  • 南方天气凉了,北方天气冷了,名正言顺吃火锅的季节已然来临。但如果吃炭火火锅的话,记得要保持室内通风,要是CO中毒,...
    丘岸阅读 204评论 0 1
  • 最近有个日志收集监控的项目采用的技术栈是ELK+JAVA+Spring,客户端语言使用的是Java,以后有机会的话...
    三劫散仙阅读 4,767评论 1 1