加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Hadoop运行在Kubernetes平台实践

发布时间:2018-12-18 12:09:14 所属栏目:教程 来源:店家小二
导读:Hadoop与Kubernetes就好像江湖里的两大绝世高手,一个是成名已久的长者,至今仍然名声远扬,一个则是初出茅庐的青涩少年,骨骼惊奇,不走寻常路,一出手便惊诧了整个武林。Hadoop与Kubernetes之间有很深的渊源,因为都出自IT豪门Google,只不过,后者是亲

实际上,Datanode可以用DaemonSet方式在每个Kubernerntes节点上部署一个,在这里为了清晰起见,就没有用这个方式 定义。接下来,我们来看看Yarn框架如何建模,下图是Yarn框架的集群架构图:

Hadoop 运行在 Kubernetes平台实践

我们看到,Yarn集群中存在两种角色的节点:ResourceManager以及NodeManger,前者属于Yarn集群的头脑(Master),后者是工作承载节点(Work Node),这个架构虽然与HDFS很相似,但因为一个重要细节的差别,无法沿用HDFS的建模方式,这个细节就是Yarn集群中的ResourceManager要对NodeManger节点进行严格验证,即NodeManger节点的节点所在主机的主机名(DNS)与对应IP地址严格匹配,简单来说,就是要符合如下规则:

NodeManger建立TCP连接时所用的IP地址,必须是该节点主机名对应的IP地址,即主机DNS名称解析后返回节点的IP地址。

所以我们采用了Kubernetes里较为特殊的一种Service——Headless Service来解决这个问题,即为每个NodeManger节点建模一个Headless Service与对应的Pod,下面是一个ResourceManager与两个NodeManger节点所组成的Yarn集群的建模示意图:

Hadoop 运行在 Kubernetes平台实践

Headless Service的特殊之处在于这种Service没有分配Cluster IP,在Kuberntes DNS里Ping这种Service的名称时,会返回后面对应的Pod的IP地址,如果后面有多个Pod实例,则会随机轮询返回其中一个的Pod地址,我们用Headless Service建模NodeManger的时候,还有一个细节需要注意,即Pod的名字(容器的主机名)必须与对应的Headless Service的名字一样,这样一来,当运行在容器里的NodeManger进程向ResourceManager发起TCP连接的过程中会用到容器的主机名,而这个主机名恰好是NodeManger Service的服务名,而这个服务名解析出来的IP地址又刚好是容器的IP地址,这样一来,就巧妙的解决了Yarn集群的DNS限制问题。

下面以yarn-node-1为例,给出对应的Service与Pod的YAM文件,首先是yarn-node-1对应的Headless Service的YAM定义:

  1. apiVersion: v1 
  2. kind: Service 
  3. metadata: 
  4. name: yarn-node-1 
  5. spec: 
  6. clusterIP: None 
  7. selector: 
  8. app: yarn-node-1 
  9. ports: 
  10.  - port: 8040 

注意到定义中“clusterIP:None”这句话,表明这是一个Headless Service,没有自己的Cluster IP地址,下面给出YAM文件定义:

  1. apiVersion: v1 
  2. kind: Pod 
  3. metadata: 
  4. name: yarn-node-1 
  5. labels: 
  6. app: yarn-node-1 
  7. spec: 
  8. containers: 
  9. - name: yarn-node-1 
  10.   image: kubeguide/hadoop 
  11.   imagePullPolicy: IfNotPresent 
  12.   ports: 
  13.     - containerPort: 8040 
  14.     - containerPort: 8041    
  15.     - containerPort: 8042         
  16.   env: 
  17.     - name: HADOOP_NODE_TYPE 
  18.       value: yarnnode 
  19.     - name: HDFS_MASTER_SERVICE 
  20.       valueFrom: 
  21.         configMapKeyRef: 
  22.           name: ku8-hadoop-conf 
  23.           key: HDFS_MASTER_SERVICE 
  24.     - name: HDOOP_YARN_MASTER 
  25.       valueFrom: 
  26.         configMapKeyRef: 
  27.           name: ku8-hadoop-conf 
  28.           key: HDOOP_YARN_MASTER           
  29. restartPolicy: Always 

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读