加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 运营中心 > 网站设计 > 教程 > 正文

从HDFS和MapReduce两方面了解Hadoop

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

简介

Hadoop 是一个能够对大量数据进行分布式处理的软件框架,框架最核心的设计就是:HDFS 和 MapReduce。HDFS 为海量的数据提供了存储,而 MapReduce 则为海量的数据提供了计算。这篇文章就主要从 HDFS 和 MapReuce 两个大的方面展开对 Hadoop 讲解,当然为了直观的测试 HDFS 提供的丰富的 API 以及我们编写的 MapReduce 程序,在阅读下面的内容之前,你需要准备一台安装了 Hadoop 的机器(也可以是虚拟机),如果你还没有安装的话,可以参考《在 Ubuntu 上安装 Hadoop》。

初识 Hadoop

HDFS

HDFS 概念

在说 HDFS 之前我们先来解释一下什么是 DFS,DFS 的全称是 Distributed File System,翻译过来就是分布式文件系统,而 HDFS 就是 Hadoop 自带的分布式文件系统。

相关名词

为了后面大家更容易理解文章,这里使用一定的篇幅来简单的介绍一下与 HDFS 相关的一些组件或者名词的概念。

  1. NameNode,管理节点,管理系统的命名空间,维护着整个文件系统的结构和目录信息,通常情况下一个 Hadoop 集群只会有一个工作的 NameNode。
  2. DataNode,工作节点,文件系统的工作节点,主要是根据需要进行存储或者检索数据块,并且定期向 NameNode 报告它们所存储的数据块列表。
  3. 数据块,同我们常使用的磁盘上的文件系统一样,HDFS 也有数据块的概念,默认的大小为 128M。
  4. 块缓存,一般情况下,我们通过 HDFS 从 DataNode 中检索数据时,DataNode 都是从磁盘中读取,但是对于访问很频繁的文件,它所对于的数据块可能会被缓存到 DataNode 的内存中,以加快读取速度,这就是所谓的块缓存。
  5. 联邦 HDFS,其实这个就是为了解决 Hadoop 不适合存储数量庞大的文件的问题,同时由多个 NameNode 来维护整个文件系统的系统树以及文件和目录,每个 NameNode 负责管理文件系统命名空间中的一部分。

特性

下面我们就一起来看下 HDFS 有哪些特性:

  1. 存储超大文件,由于 HDFS 是分布式的文件系统,所以不受单台机器的存储大小的限制,可以存储超大文件,目前已经达到了 PB 级了。
  2. 流式访问数据。
  3. HDFS 对硬件的要求并不是很高,可以运行在廉价的商用硬件上。
  4. 不适合低延迟的数据访问,由于 Hadoop 的流式数据访问,访问数据会有写延迟,所以不太适合低时间延迟的数据访问,一般情况下这种需求我们会使用关系型数据库来实现。
  5. 不适合大量的小文件存储,原因是 NameNode 将文件系统的元数据存储在内存中,每存储一个文件都需要在 NameNode 中存储该文件的目录、存储在哪个 DataNode 中等等的数据。所以如果文件的数量达到数十亿的话 NameNode 的内存很可能不够用了。
  6. 不支持多用户写入,以及任意的修改文件,只可以在文件末尾添加内容。

HDFS 的命令行操作

命令行接口是 HDFS 所有类型的接口中最简单的,也是每个开发者都必须要掌握的。下面我们就列举几个简单的命令行操作,但是在操作前你必须按照第一章的内容安装好了 Hadoop,并且启动了 HDFS。

创建目录。

  • 清单 1. 创建目录命令
  1. hadoop fs -mkdir /test 

查看目录。

  • 清单 2. 创建目录命令
  1. hadoop fs -ls / 

上传文件,紧跟-put 后面的 test.txt 是要推送到 HDFS 中的文件,/test 是指定要推送到 HDFS 上哪个目录下面。

  • 清单 3. 上传文件
  1. hadoop fs -put test.txt /test 

删除文件。

  • 清单 4. 上传文件
  1. hadoop fs -rm /test/test.txt 

其实通过上面例举的几个命令我们可以看出 HDFS 的文件操作命令几乎和 Linux 上的命令一致,这样我们使用起来会很容易上手。

HDFS 的 JavaAPI

在 Java 项目中使用 HDFS 提供的 API 我们需要依赖 hadoop-common 和 hadoop-hdfs 两个包,,为了方便测试,我们这里还引入了 junit,篇幅原因这里就不对项目本身做太多的讲解,这里附上项目源码地址供大家参考。

读取 HDFS 中文件的内容。

  • 清单 5. JavaApi 读取文件内容
  1.         @Test 
  2. public void read() throws IOException { 
  3.   // 文件地址。 
  4.   URI uri = URI.create("/test/test.txt"); 
  5.   // 用于接收读取的数据流。 
  6.   FSDataInputStream in = null; 
  7.   try { 
  8.       in = fs.open(new Path(uri)); 
  9.       // 最后的一个 boolean 类型的参数是指是否在调用结束后关闭流,我们这里选择在 finally 里面手动关闭。 
  10.       IOUtils.copyBytes(in, System.out, 4096, false); 
  11.   } finally { 
  12.       IOUtils.closeStream(in); 
  13.   } 

(编辑:辽源站长网)

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

推荐文章
    热点阅读