简书 深入浅出的Hadoop基础原理

一般我们所说的Hadoop 其实是指 Hadoop 体系,它包括 Hadoop MapReduce、HDFS、HBase,还有其他更多的技术

工作原理

先用一种有助于理解的方式描述 MapReduce 和 HDFS 是如何工作的。假如有1000G 的多个文本文件,内容是英文网页,需要统计词频,也就是哪些单词出现过,各出现过多少次,有 1000 台计算机可供使用,要求速度越快越好。

最直接的想法是,把 1000G 的文件分成 1000 份,每台机器处理 1G 数据。处理完之后,其他 999 台机器将处理结果发送到一台固定的机器上,由这台机器进行合并然后输出结果。

Hadoop 将这个过程进行自动化的处理。首先看如何存储这1000G 的文本文件。HDFS在这1000台机器上创建分布式文件系统,将 1000G 的文件切分成若干个固定大小的文件块,每个块一般是 64M 大小,分散存储在这 1000 台机器上。这么多机器,在运行的时候难免会出现有几台突然死机或者挂掉的情况,这导致上面存储的文件块丢失,会导致计算出错。为避免这种情况,HDFS 对每个文件块都做复制,复制成 3~5 个相同的块,放到不同的机器上,这样死机的文件块在其他机器上仍然可以找得到,不影响计算。

MapReduce 其实是两部分,先是 Map 过程,然后是 Reduce 过程。从词频计算来说,假设某个文件块里的一行文”字是“ This is a small cat. That is a small dog.”,那么,Map 过程会对这一行进行处理,将每个单词从句子解析出来,依次生成形如<“this”, 1>, <”is”, 1>, <”a”, 1>, <”small”, 1>, <”cat”, 1>, <”that”, 1>, <”is”, 1>, <”a”, 1>, <”small”, 1>,<”dog”, 1>的键值对,<”this”, 1> “ 表示 this”这个单词出现了 1次,在每个键值对里,单词出现的次数都是 1 次,允许有相同的键值对多次出现,比如<”is”,1>这个键值对出现了 2 次。Reduce 过程就是合并同类项,将上述产生的相同的键值对合并起来,将这些单词出现的次数累加起来,计算结果就是<“this”, 1>, <”is”, 2>, <”a”, 2>, <”small”, 2>,<”cat”, 1>, <”that”, 1>, <”dog”, 1>。

这种方式很简洁,并且可以进行多种形式的优化。比如说,在一个机器上,对本地存储的 1G 的文件块先 Map,然后再 Reduce,那么就得到了这 1G 的词频统计结果,然后再将这个结果传送到远程机器,跟其他 999 台机器的统计结果再次进行 Reduce,就得到 1000G 文件的全部词频统计结果。如果文件没有那么大,只有三四个G,就不需要在本地进行Reduce 了,每次 Map 之后直接将结果传送到远程机器做 Reduce。

具体地,如果用Hadoop 来做词频统计,流程是这样的:

1) 先用HDFS的命令行工具,将1000G 的文件复制到 HDFS 上;

2) 用Java 写MapReduce 代码,写完后调试编译,然后打包成 Jar 包;

扫描二维码关注公众号,回复: 4110949 查看本文章

3) 执行Hadoop 命令,用这个 Jar 包在 Hadoop 集群上处理 1000G 的文件,然后将结果文件存放到指定的目录。

4) 用HDFS的命令行工具查看处理结果文件。

HDFS文件系统

Hadoop分布式文件系统,全称Hadoop Distributed File System,也就是HDFS。

Hadoop 借鉴了VFS,也引入了虚拟文件系统机制。HDFS 是 Hadoop 虚拟文件系统的一个具体实现。除了HDFS 文件系统之外,Hadoop 还实现很多其他文件系统,诸如本地文件系统,支持 HTTP 的 HFTP 文件系统,支持 Amazon的 S3 文件系统等等。

HDFS 从设计上来说,主要考虑以下的特征:超大文件,最大能支持 PB 级别的数据;流式数据访问,一次写入,多次读取;在不可靠的文件,故障率高的商用硬件上能运行。Hadoop 的不利之处,是不适应低时间延迟的数据访问,不适应大量的小文件,也不适应多用户写入任意修改文件的情况。

假设有一个 HDFS 集群,那么这个集群有且仅有一台计算机做名字节点 NameNode,有且仅有一台计算机做第二名 字 节 点 SecondaryNameNode , 其 他 机 器 都 是 数 据 节 点 DataNode 。 在 伪 分 布 式 的 运 行 方 式 下 ,NameNode,SecodaryNameNode,DataNode 都由同一台机器担任。

NameNode 是 HDFS 的管理者。SecondaryNameNode 是 NameNode 的辅助者,帮助 NameNode 处理一些合并事宜,注意,它不是 NameNode 的热备份,它的功能跟 NameNode 是不同的。DataNode 以数据块的方式分散存储 HDFS 的文件。HDFS 将大文件分割成数据块,每个数据块是 64M,也可以设置成 128M或者 256M,然后将这些数据块以普通文件的形式存放到数据节点上,为了防止 DataNode 意外失效,HDFS 会将每个数据块复制若干份放到不同的数据节点。

执行“ hadoop fs -help”可以看到 HDFS的命令行工具和用法。

HDFS 提供了 HttpFS 服务,用以通过 HTTP 方式访问 HDFS 服务的功能。默认的,你可以通过 http://[master namenode host]:50070/ 访问这个功能。

总的来说,HDFS 主要包含了 6 个服务,它们主要的功能如下:

NameNode:负责管理文件系统的 namespace 以及客户端对文件的访问;

DataNode:用于管理它所在节点上的存储;

FailoverController:故障切换控制器,负责监控与切换 Namenode 服务;

JournalNode:用于存储 EditLog;

Balancer:用于平衡集群之间各节点的磁盘利用率;

HttpFS:提供 HTTP 方式访问 HDFS 的功能。

通常而言,在关注 HDFS 架构时,总是关注 Namenode 和 Datanode 的架构,因为它们是 HDFS 的核心,也是客户端操作数据需要依赖的两个服务
作者:Kemr
链接:https://www.jianshu.com/p/dac675062536
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

猜你喜欢

转载自blog.csdn.net/zhousenshan/article/details/83959352