加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

从HDFS和MapReduce两方面了解Hadoop

发布时间:2019-03-21 23:52:20 所属栏目:教程 来源:佚名
导读:简介 Hadoop 是一个能够对大量数据进行分布式处理的软件框架,框架最核心的设计就是:HDFS 和 MapReduce。HDFS 为海量的数据提供了存储,而 MapReduce 则为海量的数据提供了计算。这篇文章就主要从 HDFS 和 MapReuce 两个大的方面展开对 Hadoop 讲解,当然

不出意外的话,你可以在控制台看到你指定文件的内容。在这一步我遇到一个问题,就是无法直接在 windows 下操作 HDFS,具体的解决方法可以参照这篇文章。FSDataInputStream.seek()方法还可以实现从文件输入流的任意一个绝对位置读取文件内容,比如我们可以在上面代码中添加如下的内容来实现在控制台重复打印文件内容。

  • 清单 6. JavaApi 任意位置读取文件内容
  1. in.seek(0); 
  2. tils.copyBytes(in, System.out, 4096, false); 

创建目录。

  • 清单 7. JavaApi 创建目录
  1. @Test 
  2. public void mkdir() throws IOException { 
  3. fs.mkdirs(new Path("/test/api")); 

查询文件目录。

  • 清单 8. JavaApi 查询文件目录
  1. @Test 
  2. public void ls() throws IOException { 
  3. FileStatus[] fileStatuses = fs.listStatus(new Path("/")); 
  4. if (null == fileStatuses || fileStatuses.length == 0) { 
  5. return; 
  6. for (FileStatus fileStatus : fileStatuses) { 
  7. System.out.println(fileStatus.getPath() + "   " + fileStatus.getPermission()); 

这里引入一个类 FileStatus,这个类封装了 HDFS 中文件和目录的元数据,包括文件长度、块大小、复本、修改时间、所有者以及权限信息。FileSystem 里面提供的 listStatus 方法可以获取一个目录下的所有目录或者文件的 FileStatus,但是它不会递归获取下级目录的内容,这里可以开发你的想象自己实现一下(Tips:fileStatus.isDirectory()可以判断这个 fileStatus 是否是一个文件夹)。

删除文件或目录。

  • 清单 9. JavaApi 删除文件或目录
  1. @Test 
  2. public void delete() throws IOException { 
  3.   fs.delete(new Path("/test/api"), false); 
  4. @Test 
  5. public void deleteNonEmptyDir() throws IOException { 
  6.   fs.delete(new Path("/test"), true); 

我们可以看到 fs.delete()这个方法有两个参数,第一个参数很好理解,就是我们要删除的目录或者文件的地址。那么第二个 Boolean 类型的参数呢,如果删除的是文件或者空目录这个参数实际上是会被忽略的,如果删除的是非空目录,只有在这个参数值为 true 的时候才会成功删除。

创建文件和文件写入。

我们通过 FileSystem.create()方法来创建一个文件,这个方法会顺带着创建不存在的父级目录,如果不需要这个的话,最好是在创建之前调用 exists()方法来判断一下,如果父级目录不存在直接报错即可。

  • 清单 10. JavaApi 创建文件和文件写入
  1. @Test 
  2. public void create() throws IOException { 
  3. FSDataOutputStream out = null; 
  4. try { 
  5. out = fs.create(new Path("/test/api/test.txt")); 
  6. out.writeChars("hello hdfs."); 
  7. } finally { 
  8. IOUtils.closeStream(out); 

文件创建好后,可以通过 append()方法在文件末尾添加内容。

  • 清单 11. JavaApi 追加文件内容
  1. @Test 
  2. public void append() throws IOException { 
  3. FSDataOutputStream out = null; 
  4. try { 
  5. out = fs.append(new Path("/test/api/test.txt")); 
  6. out.writeChars("hello hdfs."); 
  7. } finally { 
  8. out.close(); 

从本地上传文件到 HDFS。

  • 清单 12. JavaApi 上传文件至 HDFS
  1. @Test 
  2. public void copyFromLocal() throws IOException { 
  3. fs.copyFromLocalFile(new Path("d:/local.txt"), new Path("/test/api")); 

从 HDFS 上下载文件。

  • 清单 13. JavaApi 从 HDFS 下载文件
  1. @Test 
  2. public void copyToLocal() throws IOException { 
  3.   fs.copyToLocalFile(new Path("/test/api/local.txt"), new Path("E:/")); 

MapReduce 实战

什么是 MapReduce

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读