在Kubernetes(K8s)中部署Hadoop集群是一个相对复杂的过程,但是通过一步步的指导和正确的实践,就能够轻松完成。下面我将向你详细介绍如何在K8s上实现"hadoop on k8s",帮助你理解整个流程。

### 步骤概述

下表展示了在K8s上部署Hadoop集群的主要步骤和需要的操作:

| 步骤 | 操作 | 代码示例 | 说明 |
|------|------------------------------------|-----------------------------------------|----------------------------------------|
| 1 | 安装Hadoop镜像到Registry | `docker pull bde2020/hadoop-master` | 拉取Hadoop镜像到本地Registry |
| 2 | 配置Hadoop配置文件 | `kubectl create configmap hadoop-conf` | 创建ConfigMap存储Hadoop配置文件 |
| 3 | 创建Hadoop服务 | `kubectl create -f hadoop-services.yaml`| 创建Hadoop服务 |
| 4 | 创建Hadoop控制器 | `kubectl create -f hadoop-controller.yaml` | 创建Hadoop控制器 |
| 5 | 访问Hadoop集群Web页面 | `http://:50070` | 通过浏览器访问Hadoop集群Web页面 |


### 操作步骤及代码示例

#### 步骤一:安装Hadoop镜像到Registry

在K8s中部署Hadoop需要用到Hadoop镜像,我们可以先将镜像拉取到本地的Registry中。

```shell
docker pull bde2020/hadoop-master
```

#### 步骤二:配置Hadoop配置文件

配置Hadoop的配置文件,并将配置文件存储在一个ConfigMap中,以便后续Pod可以引用。

```shell
kubectl create configmap hadoop-conf --from-file=hadoop-config
```

#### 步骤三:创建Hadoop服务

创建一个Service来公开Hadoop的服务端口给集群内其他Pod使用。

```shell
kubectl create -f hadoop-services.yaml
```

hadoop-services.yaml示例:
```yaml
apiVersion: v1
kind: Service
metadata:
name: hadoop-service
spec:
selector:
app: hadoop
ports:
- protocol: TCP
port: 9000
targetPort: 9000
name: namenode
- protocol: TCP
port: 50070
targetPort: 50070
name: webui
```

#### 步骤四:创建Hadoop控制器

创建一个Deployment或StatefulSet来部署Hadoop的主节点和从节点。

```shell
kubectl create -f hadoop-controller.yaml
```

hadoop-controller.yaml示例:
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: hadoop-controller
spec:
replicas: 3
selector:
matchLabels:
app: hadoop
template:
metadata:
labels:
app: hadoop
spec:
containers:
- name: hadoop-master
image: bde2020/hadoop-master
ports:
- containerPort: 9000
- containerPort: 50070
volumeMounts:
- name: hadoop-conf
mountPath: /usr/local/hadoop/etc/hadoop
volumes:
- name: hadoop-conf
configMap:
name: hadoop-conf
```

#### 步骤五:访问Hadoop集群Web页面

通过浏览器访问Hadoop集群的Web页面,可以查看Hadoop集群的状态和执行任务等信息。

```shell
http://:50070
```

通过以上步骤,你就可以在Kubernetes上成功部署Hadoop集群,并访问Hadoop的Web页面,开始体验分布式数据处理的乐趣了。希望这篇文章对你有帮助!