将 HDFS 搬上数人云:轻松实现集群的扩展收缩

HDFS 是 Hadoop Distributed File System 的简称,作为 Apache Hadoop Core 项目的一部分,提供了一个高度容错性的分布式文件系统,适合部署在廉价的机器上。HDFS 可以提供高吞吐量的数据访问,非常适合大规模数据集上的应用,很多大数据框架都已 HDFS 作为其存储方案,如 Hadoop、Spark、HBase 等。

作为分布式文件系统,HDFS 需要集群化部署,并会随着业务量的增加而不断扩展。但 HDFS 集群化部署并非易事,很多组织和项目都在尝试简化部署方法,网络上也存在着大量参差不齐的教程。这里介绍一种方式,通过数人云快速部署 HDFS 集群,并轻松实现集群的扩展和收缩,一起来体验一下吧!

第一步 镜像制作

数人云可以发布各种 Docker 应用,并进行统一管理和监控,因此,第一步是将 HDFS 集群的组件 Docker 化。

HDFS 集群有两种节点,以“管理者-工作者”的模式运行,一个 Namenode(管理者)和多个 Datanode(工作者)。Namenode 作为管理者,管理文件系统的命名空间,维护文件系统树及树内所有的文件和索引目录。Datanode 作为文件系统的工作者,存储并提供定位块的服务,并且定时向 Namenode 发送它们存储的块列表。用户通过 HDFS 客户端可以进行文件的读写操作,大致方式是通过 Namenode 获得Datanode 和存数块的信息,对 Datanode 进行数据写入或读取。其架构如下图所示。

1.png

如上图所示,一个 HDFS 集群至少需要两种 Docker 应用,Namenode 和 Datanode。

首先,Namenode 和 Datanode 都使用相同的 Hadoop 安装包,因此,先做一个安装了 Hadoop 基础环境依赖及 Hadoop 的基础镜像,具体内容见这里

有了基础镜像,就可以制作 Namenode 和 Datanode 的镜像了。这里主要是加入不同的配置文件和启动脚本。

1 Namenode 制作

先说 Namenode,需要配置以下配置项:

  1. fs.defaultFS:设置缺省的访问地址,需在 core-site.xml 中设置。这里设置为 hdfs://0.0.0.0:8020,表示本机的8020端口。
  2. dfs.permissions:权限检查开关,需要在 hdfs-site.xml 中设置。如果没有权限控制要求,则设置为 false。
  3. dfs.name.dir:Namenode 的数据存储路径,需要在 hdfs-site.xml 中设置。
  4. dfs.namenode.datanode.registration.ip-hostname-check:Datanode 的主机名解析检查,需要在 hdfs-site.xml 中设置。如果没有特殊的安全性考虑,设置为 false。

启动 Namenode 时,需要判断是否是首次部署,若首次部署,则需要进行格式化。

if [ ! -f ${HDFS_NAMENODE_ROOT_DIR}/current/VERSION ]; then
    echo Formatting namenode root fs in ${HDFS_NN_ROOT_DIR}

    bin/hdfs namenode -format
fi

最后,就可以启动 Namenode 了。

具体的 Dockerfile 和相关文件见这里

2 Datanode 制作

再说 Datanode,需要配置一下配置项:

  1. dfs.permissions:同 Namenode。
  2. dfs.data.dir:Datanode 的数据存储路径,需要在 hdfs-site.xml 中设置。

启动 Datanode 时,需要指定 Namenode,这里通过HDFS_NAMENODE_RPC_HOSTHDFS_NAMENODE_RPC_PORT两个环境变量来设置 Namenode 地址,并写入 core-site.xml 配置文件,脚本如下:

sed "s/HDFS_NAMENODE_RPC_HOST/$HDFS_NAMENODE_RPC_HOST/;s/HDFS_NAMENODE_RPC_PORT/$HDFS_NAMENODE_RPC_PORT/" ${HADOOP_INSTALL_DIR}/etc/hadoop/core-site.xml.template > ${HADOOP_INSTALL_DIR}/etc/hadoop/core-site.xml

最后,就可以启动 Datanode 了。

具体的 Dockerfile 和相关文件见这里

注:以上只是描述了 HDFS 最少的必要配置,其他配置项请根据自己的实际使用需求进行添加。

第二步 部署

数人云作为云时代的操作系统,统一管理和调度集群的计算资源,并以 Docker 的形式发布和管理应用。我们先将自己的计算资源(云主机、虚拟机或是物理机)创建一个数人云集群,就可以在该集群上部署 HDFS 集群了。具体的创建集群方法见创建/删除集群

1 新建应用hdfs-namenode:

以下镜像由数人云提供,仅用于测试。若生产环境使用,请构建自己的镜像仓库和 Docker 镜像。

  • 应用名称: hdfs-namenode
  • 选择集群: (选择你的集群)
  • 镜像地址: index.shurenyun.com/dataman/hdfs-namenode
  • 镜像版本: 2.7.1
  • 网络模式: HOST
  • 选择主机: 标签不选; 主机: (选择一台主机)
  • 挂载点:
    • 数据路径: /home/data/hdfs-namenode, 容器路径: /var/hdfs/namenode
  • 容器规格
    • CPU: 0.5
    • 内存: 1024MB
  • 容器个数: 1,不勾选1容器:1主机
  • 高级设置
    • 应用地址
    • 环境变量

注:挂载点的“容器路径”就是dfs.name.dir的取值。

2 新建应用hdfs-datanode:

  • 应用名称: hdfs-datanode
  • 选择集群: (选择你的集群)
  • 镜像地址: index.shurenyun.com/dataman/hdfs-datanode
  • 镜像版本: 2.7.1
  • 网络模式: HOST
  • 选择主机: 标签不选; 主机:(选择你要部署的主机)
  • 挂载点:
    • 数据路径: /home/data/hdfs-datanode, 容器路径: /var/hdfs/datanode
  • 容器规格
    • CPU: 0.5
    • 内存: 1024MB
  • 容器个数: 3(需要启动的节点数),勾选1容器:1主机
  • 高级设置
    • 应用地址
    • 环境变量
      • KEY: HDFS_NAMENODE_RPC_HOST, VALUE: (Namenode 所在节点的 IP)
      • KEY: HDFS_NAMENODE_RPC_PORT, VALUE: (Namenode 的访问端口,与fs.defaultFS取值一致,默认为8020)

注:挂载点的“容器路径”就是dfs.data.dir的取值。

创建应用后,进入应用详情页的事件标签页,查看部署的操作状态,显示

应用名称:hdfs-namenode 事件类型:应用扩展操作 事件结果:部署操作成功

应用名称:hdfs-datanode 事件类型:应用扩展操作 事件结果:部署操作成功```

同时,应用状态显示为

应用状态:运行中


则应用部署已经成功。

访问namenode地址,http://HDFS_NAMENODE_RPC_HOST:50070。

## 结束语

有以下几点说明:

1. 集群扩展:HDFS 的 Datanode 可以通过数人云的应用扩展功能轻松实现扩展。但需要注意,如果在“选择主机”处选择了固定数量的主机,则 Datanode 数量不能超过选定的主机数。
2. 资源分配:通过数人云管理界面发布应用时,目前最大容器规格限定在1CPU、4G 内存,这对于一些大数据环境是不够的,你可能需要给这些应用分配更多的资源。这一点可以通过数人云 API 实现,不受限制地分配资源给任一容器。
3. 单点问题:本文中部署的 HDFS 集群只有一个 Namenode,存在单点问题。HDFS 提供了解决单点问题的方法,需要 Journalnode 和 Zookeeper。作为一种高可用的、用于生产环境的 HDFS 集群部署方法,数人云同样可以做到快速部署,将在稍后介绍。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335

推荐阅读更多精彩内容