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 进行数据写入或读取。其架构如下图所示。
如上图所示,一个 HDFS 集群至少需要两种 Docker 应用,Namenode 和 Datanode。
首先,Namenode 和 Datanode 都使用相同的 Hadoop 安装包,因此,先做一个安装了 Hadoop 基础环境依赖及 Hadoop 的基础镜像,具体内容见 这里 。
有了基础镜像,就可以制作 Namenode 和 Datanode 的镜像了。这里主要是加入不同的配置文件和启动脚本。
先说 Namenode,需要配置以下配置项:
启动 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 和相关文件见 这里 。
再说 Datanode,需要配置一下配置项:
启动 Datanode 时,需要指定 Namenode,这里通过 HDFS_NAMENODE_RPC_HOST
和 HDFS_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 集群了。具体的创建集群方法见 创建/删除集群 。
>以下镜像由数人云提供,仅用于测试。若生产环境使用,请构建自己的镜像仓库和 Docker 镜像。
注:挂载点的“容器路径”就是 dfs.name.dir
的取值。
注:挂载点的“容器路径”就是 dfs.data.dir
的取值。
创建应用后,进入应用详情页的事件标签页,查看部署的操作状态,显示
应用名称:hdfs-namenode 事件类型:应用扩展操作 事件结果:部署操作成功
应用名称:hdfs-datanode 事件类型:应用扩展操作 事件结果:部署操作成功
同时,应用状态显示为
应用状态:运行中
则应用部署已经成功。
访问namenode地址, http://HDFS_NAMENODE_RPC_HOST:50070 。
有以下几点说明: