关于Hadoop的HDFS集群
HDFS 集群是建立在 Hadoop 集群之上的,由于 HDFS 是 Hadoop 最主要的守护进程,所以 HDFS 集群的配置过程是 Hadoop 集群配置过程的代表。
使用 Docker 可以更加方便地、高效地构建出一个集群环境。
每台计算机中的配置
Hadoop 如何配置集群、不同的计算机里又应该有怎样的配置,这些问题是在学习中产生的。本章的配置中将会提供一个典型的示例,但 Hadoop 复杂多样的配置项远超于此。
HDFS 命名节点对数据节点的远程控制是通过 SSH 来实现的,因此关键的配置项应该在命名节点被配置,非关键的节点配置要在各个数据节点配置。也就是说,数据节点与命名节点的配置可以不同,不同数据节点之间的配置也可以有所不同。
但是本章为了方便建立集群,将使用相同的配置文件通过 Docker 镜像的形式同步到所有的集群节点,特做解释。
具体步骤
总体思路是这样的,我们先用一个包含 Hadoop 的镜像进行配置,配置成集群中所有节点都可以共用的样子,然后再以它为原型生成若干个容器,构成一个集群。
配置原型
首先,我们将使用之前准备的 hadoop_proto 镜像启动为容器:
docker run -d --name=hadoop_temp --privileged hadoop_proto /usr/sbin/init
进入 Hadoop 的配置文件目录:
cd $HADOOP_HOME/etc/hadoop
现在对这里的文件的作用做简单的描述:
文件 | 作用 |
workers | 记录所有的数据节点的主机名或 IP 地址 |
core-site.xml | Hadoop 核心配置 |
hdfs-site.xml | HDFS 配置项 |
mapred-site.xml | MapReduce 配置项 |
yarn-site.xml | YARN 配置项 |
注:YARN 的作用是为 MapReduce 提供资源管理服务,此处暂时用不着。
我们现在设计这样一个简单的集群:
- 1 个命名节点 nn
- 2 个数据节点 dn1, dn2
首先编辑 workers ,更改文件内容为:
dn1 dn2
然后编辑 core-site.xml,在 中添加以下配置项:
<!-- 配置 HDFS 主机地址与端口号 --> <property> <name>fs.defaultFS</name> <value>hdfs://nn:9000</value> </property> <!-- 配置 Hadoop 的临时文件目录 --> <property> <name>hadoop.tmp.dir</name> <value>file:///home/hadoop/tmp</value> </property>
配置 hdfs-site.xml,在 中添加以下配置项:
<!-- 每个数据块复制 2 份存储 --> <property> <name>dfs.replication</name> <value>2</value> </property> <!-- 设置储存命名信息的目录 --> <property> <name>dfs.namenode.name.dir</name> <value>file:///home/hadoop/hdfs/name</value> </property>
最后需要配置一下 SSH :
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsassh-copy-id -i ~/.ssh/id_rsa hadoop@localhost
到此为止,集群的原型就配置完毕了,可以退出容器并上传容器到新镜像 cluster_proto :
docker stop hadoop_tempdocker commit hadoop_temp cluster_proto
此处如果有必要可以删除临时镜像 hadoop_temp 。
部署集群
接下来部署集群。
首先,要为 Hadoop 集群建立专用网络 hnet :
docker network create --subnet=172.20.0.0/16 hnet
接下来创建集群容器:
docker run -d --name=nn --hostname=nn --network=hnet --ip=172.20.1.0 --add-host=dn1:172.20.1.1 --add-host=dn2:172.20.1.2 --privileged cluster_proto /usr/sbin/init docker run -d --name=dn1 --hostname=dn1 --network=hnet --ip=172.20.1.1 --add-host=nn:172.20.1.0 --add-host=dn2:172.20.1.2 --privileged cluster_proto /usr/sbin/init docker run -d --name=dn2 --hostname=dn2 --network=hnet --ip=172.20.1.2 --add-host=nn:172.20.1.0 --add-host=dn1:172.20.1.1 --privileged cluster_proto /usr/sbin/init
进入命名节点:
docker exec -it nn su hadoop
格式化 HDFS:
hdfs namenode -format
如果没有出错,那么下一步就可以启动 HDFS:
start-dfs.sh
成功启动之后,jps 命令应该能查到 NameNode 和 SecondaryNameNode 的存在。命名节点不存在 DataNode 进程,因为这个进程在 dn1 和 dn2 中运行。
至此,你可以检测 HDFS 的运行,使用 HDFS 的方式也没有差别(命名节点代表整个集群)。
到此这篇关于关于Hadoop的HDFS集群的文章就介绍到这了,更多相关HDFS集群内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
一小时迅速入门Mybatis之bind与多数据源支持 Java API
这篇文章主要介绍了一小时迅速入门Mybatis之bind与多数据源支持 Java API,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-09-09解决@JsonInclude(JsonInclude.Include.NON_NULL)不起作用问题
这篇文章主要介绍了解决@JsonInclude(JsonInclude.Include.NON_NULL)不起作用问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-06-06Java中StringBuffer和StringBuilder区别
这篇文章主要介绍了Java中StringBuffer和StringBuilder区别,本文只介绍了它们之间的核心区别,需要的朋友可以参考下2015-06-06使用Spring源码报错java:找不到类 InstrumentationSavingAgent的问题
这篇文章主要介绍了使用Spring源码报错java:找不到类 InstrumentationSavingAgent的问题,本文给大家分享解决方法,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-10-10
最新评论