阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

深入浅出Hadoop之HDFS

468次阅读
没有评论

共计 4296 个字符,预计需要花费 11 分钟才能阅读完成。

Hadoop 生态系统一直是大数据领域的热点,其中包括今天要聊的 HDFS,和计划以后想聊的 yarn, mapreduce, spark, hive, hbase, 已经聊过的 zookeeper,等等。

深入浅出 Hadoop 之 HDFS

今天主聊 HDFS,hadoop distributed file system, 起源于 Google 的 GFS,只不过 GFS 是用 c ++ 写的,Hadoop 是 Doug Cutting 在 yahoo 用 Java 写的。2008 年 Hadoop 成为 Apache top-level project。

应用

HDFS 适用于什么场景呢?非常大的文件存储,比如以 G 或 T 为单位,因为 HDFS 内部的 block 的基本单位已经是 128MB。注意这里有一个小文件问题,误区是说怕 1K 的小文件也能占用 128MB 的硬盘,其实不是的,它还是占用 1K 硬盘,但是小文件问题的 bottle neck 是在 name node 里,因为 name node 要存储文件和 block 的相关信息在内存里,文件数量一多,name node 的内存就不够了(比如,百万小文件要占用 300MB 内存),当然 hdfs federation 能够通过 sharding 的方式解决 name node 内存不够用的问题,接下来会细说。HDFS 还适用于“write once,read-many”的场景,而且它的写是 append only,所以想改也没法改。如果是多次写的话,应该考虑一下 cassandra(参见我的上一篇文章)。同时 HDFS 的文件通常只能允许 single writer 写入(是通过 lease 的方式来保证只有一个 writer 能够当前写某个文件)。HDFS 因为只需要普通的 commodity hardware 而不需要昂贵的高可用硬件而被企业欢迎。HDFS 不适用于需要 low latency 的数据访问方式,因为 HDFS 是拿延迟交换高 throughput。

概念

Blocks

HDFS 里,文件是被分割成 block 大小的 chunk,每个 block 是 128MB,有人会问了,为什么非要搞这么大,主要是要缩短寻道时间在总硬盘读写时间中的比例,比如寻道时间需要 5 ms,而寻到时间只能占总时间 0.5% 的比例,那么硬盘读写时间差不多在 1s 左右,1s 中能穿多少文件呢,如果硬盘的读写为 128MB/s,那么就能传 128MB,所以 block 大小就定义为 128MB,这样可以保证硬盘操作的时间有效的应用在读写上而不是花费在寻道上。当然太大了也不行,mapreduce 的 map 通常是以 block 为单位,如果 block 太少,mapreduce 的效率会比较低。

hdfs fsck $path -files -blocks -locations

上面的命令可以用来提供文件的 block 信息,比如 block 在哪台机器,名字是什么,方便你进一步查询 block 的具体信息。

Namenodes and datanodes

深入浅出 Hadoop 之 HDFS

namenode 管理 namespace,管理文件系统树状结构和文件/目录的 metadata,这些信息以如下方式持久化在硬盘里:namespace image 和 edit log。同时 block 的 metadata 也存放在 namd node,存放于内存中。前面提到过百万小文件,会占用 300MB 内存的例子。block 信息为什么不持久化呢,因为它会变动,系统重启的时候会从 datanode 那里重新构建。

name node 的备份有几种方式,一种是把持久化存放于硬盘的信息既写到本地硬盘也同时写到远程 NFS mount。另一种方式是运行 secondary namenode,它其实并没有扮演 namenode 的角色,而是周期性的 merge namesapce image 以及 edit log 来防止 edit log 过大。它会保存一份 merged namespace image,一旦 primary fail 了,就把 NFS 上的 metadata copy 到 secondary namenode 上,这样 secondary 就成为了新的 primary。

具体过程如下图所示,edit log 和 fsimage 都是在硬盘中,edit log 就是 WAL(cassandra 写操作也用到了 WAL 的手段,WAL 很流行,可以单拉出来讲一次),fsimage 是 check point of the filesystem metadata。写的时候先写 edit log,然后 update in-memory representation of filesystem metadata(用来 serve 读请求),图中没有画出这部分操作。

深入浅出 Hadoop 之 HDFS

 

有没有更好的方法呢?上述方法没能提供 HA,namenode 仍然是 single point of failure。新的 primary 需要(1)load namespace image into memory(2)replay edit log(3)从 datanode 那边接收足够的 block reports(前文提到 block 信息是在内存中的)。这个过程有可能会话费 30 分钟或更久。client 等不了啊~~

Hadoop 2 提供了 HA 的 support。namenode 采用 active-standby 的配置方式:

  • namenodes 使用高可用共享存储来存 edit log。active 每次写入都会被 standby 读出并 synchronize 到自己的内存中。
  • datanodes 在发送 block reports 时会同时发给所有的 name nodes,记住 block mapping 是在内存中。
  • 客户端需要配置来 handle namenode failover,其实就是 watch zookeeper 的 leader election(参见我之前讲的 zookeeper)
  • 这样就不需要 secondary namenode 啦,standby 取代了它的作用会周期性的产生 check points

上面提到的共享存储主要指的是 QJM(quorum journal manager),通常配置 3 个(当然我也见过 50 个 node 配 5 个 journal nodes),写的时候需要满足 quorum。

这样当 active namenode fail 时,standby 可以马上扛住,因为 latest edit log 和 up-to-date block mapping 都在内存中。

HDFS write

深入浅出 Hadoop 之 HDFS

HDFS read

深入浅出 Hadoop 之 HDFS

CLI Example

touch test.txt
hdfs dfs -mkdir /user/qingge/testdir
hdfs dfs -copyFromLocal ./test.txt /user/qingge/testdir/
hdfs dfs -ls /user/qingge/testdir/test.txt
hdfs dfs -chmod o-r /user/qingge/testdir/test.txt hdfs dfs -cat /user/qingge/testdir/test.txt | head -10
hdfs dfs -mv /user/qingge/testdir/test.txt /user/qingge/testdir/test2.txt

hdfs fsck /data/lalala -files -blocks -locations
hdfs fsck -blockId blk_10101010

HTTP 访问

(1) direct access: HDFS daemons server HTTP requests, embedded web servers in the name node and datanodes act as WebHDFS endpoionts.

深入浅出 Hadoop 之 HDFS

(2) proxy access: 中间有多个 HDFS proxy,for strictr firewall and bandwidth-limiting policies, proxy 和 node 之间使用 RPC request 和 block request。

深入浅出 Hadoop 之 HDFS

HDFS Federation

相当于 namenode sharding 了,如果不想用 HA,然后 namenode 内存又要爆了怎么办,答分区呀,每个 namenode 从根目录下划走几个子目录,无线分区无线扩充,每个 namenode 之间井水不犯河水,一个爆了或废了丝毫不影响另一个。

思考题:

如果 HDFS 有 1PB 容量,每个 block 大小是 64MB,平均的 metadata 大小是每个 block300B,replication factor 是 3,那么 namenode 最小的内存是多少呢?

答:差不多需要 1.56G,1024*1024*1024 MB/(64MB*3)*300B/(1024 * 1024 * 1024) = 1.56 GB

好,今天差不多就到这了~~ happy HDFS!

Hadoop2.3-HA 高可用集群环境搭建  http://www.linuxidc.com/Linux/2017-03/142155.htm

Hadoop 项目之基于 CentOS7 的 Cloudera 5.10.1(CDH)的安装部署  http://www.linuxidc.com/Linux/2017-04/143095.htm

Hadoop2.7.2 集群搭建详解(高可用)http://www.linuxidc.com/Linux/2017-03/142052.htm

使用 Ambari 来部署 Hadoop 集群(搭建内网 HDP 源)http://www.linuxidc.com/Linux/2017-03/142136.htm

Ubuntu 14.04 下 Hadoop 集群安装  http://www.linuxidc.com/Linux/2017-02/140783.htm

CentOS 6.7 安装 Hadoop 2.7.2  http://www.linuxidc.com/Linux/2017-08/146232.htm

Ubuntu 16.04 上构建分布式 Hadoop-2.7.3 集群  http://www.linuxidc.com/Linux/2017-07/145503.htm

CentOS 7 下 Hadoop 2.6.4 分布式集群环境搭建  http://www.linuxidc.com/Linux/2017-06/144932.htm

Hadoop2.7.3+Spark2.1.0 完全分布式集群搭建过程  http://www.linuxidc.com/Linux/2017-06/144926.htm

更多 Hadoop 相关信息见 Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2018-02/150811.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计4296字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7977177
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...
【1024程序员】我劝你赶紧去免费领一个AWS、华为云等的主机

【1024程序员】我劝你赶紧去免费领一个AWS、华为云等的主机

【1024 程序员】我劝你赶紧去免费领一个 AWS、华为云等的主机 每年 10 月 24 日,程序员们都会迎来...
告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

  告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...
星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛 NAS-2:飞牛配置 RAID 磁盘阵列 前言 大家好,我是星哥之前星哥写了《星哥带你玩飞牛 ...
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个 AI 智能体 — 跟创业大佬对话 前言 智能体(Agent)已经成为创业者和技术人绕...
星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛 NAS-11:咪咕视频订阅部署全攻略 前言 在家庭影音系统里,NAS 不仅是存储中心,更是内容...
星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...
开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

  开源 MoneyPrinterTurbo 利用 AI 大模型,一键生成高清短视频! 在短视频内容...
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...