写点什么

基于 OpenPAI 细化部署 Hadoop 集群

用户头像
Damon
关注
发布于: 2021 年 05 月 08 日

作者:Damon

博客:http://www.damon8.cn

程序猿 Damon | 微服务 | 容器化 | 自动化

前提

  1. https://github.com/microsoft/pai/tree/v0.14.0

  2. Hadoop 2.9.0

  3. k8s 1.9.4 (高版本未测)


本次讲解的主要是基于 Microsoft 开源的 OpenPAI,向大家通俗易懂的讲解 OpenPAI 是如何快速部署 Hadoop 集群的。便于大家快速部署Hadoop集群。


环境:

ubuntu 16.04docker 18.06k8s 1.9.4Hadoop 2.9.0
复制代码

1. 准备

分析

以上系统环境准备好,首先克隆 Microsoft 开源的 OpenPAI 的代码: https://github.com/microsoft/pai,切换到分支 v0.14.0。

由于我的目录在 /home/damon 下,所以直接:

cd /home/damon/paill
复制代码

可以看到有如下目录:

其中,src 目录下都是一些代码目录以及脚本:


我们再看看与 src 同一级的 deployment 目录:

看着很多,其实我们只要看 quick-start 下的几个文件:

sudo vi deployment/quick-start/quick-start-example.yaml #配置master节点信息sudo vi deployment/quick-start/kubernetes-configuration.yaml.template  #不作大改sudo vi deployment/quick-start/layout.yaml.template  #增加机器相关信息sudo vi deployment/quick-start/services-configuration.yaml.template #配置docker相关信息
复制代码


第一个配置文件主要是关于 master 节点。第二个配置主要是配置 k8s 的基本信息,因为 OpenPAI 不仅可以部署 Hadoop,还可以基于 Docker、python 来部署 k8s。第三个配置主要是增加机器的信息,我们需要修改的是配置 master 节点的信息,至于 node 节点,我们可以通过打标签的方式来。第四个配置主要是配置 docker 信息,存储 image 的各种 tag 形式。


根据配置模板生成配置文件
sudo python paictl.py config generate -i deployment/quick-start/quick-start-example.yaml -o ~/damon/pai-config -f
复制代码


把生成的本地配置文件推送到远程 k8s 集群
sudo python paictl.py config push -p ~/damon/pai-config/
复制代码

执行上面的命令时,会出现输入命令,意思是让你输入一个 cluster-id,这是 OpenPAI 为集群设置的一个 id。输入后回车即可把配置推送到远程了。


获取 cluster-id

如果生成过,执行

damon@master:~/damon/pai$ sudo python paictl.py config get-id2020-07-16 19:56:48,066 [INFO] - deployment.confStorage.get_cluster_id : Cluster-id is: ustc
复制代码

即可获取。


重点

以上配置都结束后,上面说过了,配置中只有 master 节点信息,需要手动给 node 节点打标签:

kubectl label node nodeName hdfsrole=master
复制代码

同样的标签还有类似:

master labels:
hdfsrole=master,jobhistory=true,launcher=true,node-exporter=true,pai-master=true,yarnrole=master,zookeeper=true
复制代码


node labels:gpu-check=true,hdfsrole=worker,node-exporter=true,pai-worker=true,yarnrole=worker
复制代码

打完标签后,即可开始部署 Hadoop 集群了。

部署 Hadoop

部署 Hadoop 的命令:

sudo python paictl.py service start [-c /path/to/kubeconfig] [ -n service-name ]
复制代码

解释:-c 参数中带的是 k8s 授权的 kube-config 路径,-n 参数是服务名,如果没带 -n,则会默认启动 src 下的所有的服务。


Hadoop 中主要有这些服务:

zookeeperhadoop-name-nodehadoop-data-nodehadoop-resource-managerhadoop-node-managerhadoop-batch-jobhadoop-jobhistory
复制代码

那就手动一个个执行吧。执行一个后看看 pod 有没有启动,相关的 configmap 有没有创建,默认都是官方的。

注意项

如果发现 namenode 启用了安全模式,而不想启用的话,执行:

kubectl exec -it hadoop-name-node-e3bw9 bashhadoop dfsadmin -safemode leave
复制代码

即:进入 name-node 容器中执行关闭。


模块功能说明
  1. resource-manager 是调度中心,负责资源管理。

  2. node-manager 是容器启动的的执行者。通常异常情况需要重启 node-manager。

  3. zookeeper 为数据的存储中心。

  4. namenode 和 datanode 为 hadoop 服务(HDFS)的基础层。

模块运维方法说明
  1. resource-manager 重启:大量任务 waiting 和 stopping 和数据不一致等情况。

  2. node-manager 重启:更新节点的资源信息或者节点故障等。


结束福利

开源实战利用 k8s 作微服务的架构设计代码:

https://gitee.com/damon_one/spring-cloud-k8shttps://gitee.com/damon_one/spring-cloud-oauth2
复制代码

欢迎大家 star,多多指教。

关于作者

  笔名:Damon,技术爱好者,长期从事 Java 开发、Spring Cloud 的微服务架构设计,以及结合 Docker、K8s 做微服务容器化,自动化部署等一站式项目部署、落地。目前主要从事基于 K8s 云原生架构研发的工作。Golang 语言开发,长期研究边缘计算框架 KubeEdge、调度框架 Volcano 等。公众号 程序猿Damon 发起人。个人微信 MrNull008,个人网站:Damon | Micro-Service | Containerization | DevOps,欢迎來撩。

欢迎关注:InfoQ

欢迎关注:腾讯自媒体专栏


精彩推荐


欢迎关注


发布于: 2021 年 05 月 08 日阅读数: 32
用户头像

Damon

关注

God bless the fighters. 2020.03.11 加入

欢迎关注公众号:程序猿Damon,长期从事Java开发,研究Springcloud的微服务架构设计。目前主要从事基于K8s云原生架构研发的工作,Golang开发,长期研究边缘计算框架KubeEdge、调度框架Volcano、容器云KubeSphere研究

评论

发布
暂无评论
基于OpenPAI细化部署 Hadoop 集群