Kubernetes学习之 Hadoop cluster in Kubernetes

本文介绍了如何在 Kubernetes (k8s) 中搭建并运行 Hadoop 集群,解决了传统方式下节点动态扩展和 IP 解析的问题。通过在 node 容器中启动脚本主动注册服务,并利用监听服务更新 hosts 文件,实现了解决方案。最终测试通过 wordcount 示例验证了集群的正常运行。
摘要由CSDN通过智能技术生成

  花了一个周末完成了hadoop cluster in k8s应用,经过测试能正常跑通wordcount例子。在构建过程中虽然攻克了一个问题又遇一个问题,但是整个过程还是很享受,特别是最后跑通测试用例。

hadoop cluster 启动过程

  hadoop 集群是怎么启动的呢,通过实验我发现:hadoop集群的启动是由master根据slaves文件里配置的node hostname通过ssh启动node上的NodeManager和DataNode服务来向master进行注册的。

  通过jps命令可以查看
  这里写图片描述

hadoop传统启动:
  1. 启动前需要将所有node hostname写master的slaves文件
  2. 启动前需要将所有node的hostname和ip 写入master的hosts,以便能够解析hostname

问题:
  1.由于node是被动启动,slaves在master启动前需要确定,故集群不能动态扩展。
  2.由于node的ip是无法获取到的,所以需要为每个node创建一个server,这样是不妥的。

思考:
  创建node容器时如果能主动启动NodeManager和DataNode服务来向master进行注册,并向master的hosts文件中注册hostname和ip,这样就可以解决上面两个问题了。

解决思路:
  1.在node容器写一个脚本,用来启动NodeManager和DataNode服务主动向master注册。
  2.在master和node容器里各写一个监听服务,用来注册hostname和ip到hosts文件中,这样就不用为node创建server。

build hadoop Docker image

  • hadoop 配置文件
    构建hadoop镜像需要配置4个核心配置文件和一个环境脚本:

    1. hdfs-site.xml
<configuration>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:///root/hdfs/namenode</value>
        <description>NameNode directory for namespace and transaction logs storage.</description>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:///root/hdfs/datanode</value>
        <description>DataNode directory</description>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
   <property>
        #关闭hostname验证,不然可能无法注册到master,因为node的hostname可能还没有注册到master的hosts文件中
        <name>dfs.namenode.datanode.registration.ip-hostname-check</name>                   
        <value>false</value>
    </property>
</
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值