0
点赞
收藏
分享

微信扫一扫

k8s 1.28.2 安装 Hadoop3.3.6

标签(空格分隔): kubernetes系列

一: 系统环境介绍

系统:
   centos7.9x64
k8s 集群最新版本:
   k8s1.28.2 采用kubeadm部署

caclico 版本:
    calico v3.26.2

containerd版本:
     containerd://1.6.24

hadoop 版本:
     hadoop 3.3.6 

helm 版本:
   helm 3.13.0

二:k8s部署Hadoop集群

2.1 部署一套k8s1.28.x 集群

k8s 1.28.x 集群已经部署完成

kubectl get node -o wide 

image.png

2.2 安装helm 包管理工具


# 下载helm
wget https://get.helm.sh/helm-v3.13.0-linux-amd64.tar.gz

# 解压文件
tar zxvf helm-v3.13.0-linux-amd64.tar.gz

# 移动到bin目录
mv linux-amd64/helm /usr/bin/helm

# 查看版本
helm version

image.png

2.3 安装buildkit


# 下载文件 https://github.com/moby/buildkit
wget https://github.com/moby/buildkit/releases/download/v0.11.6/buildkit-v0.11.6.linux-amd64.tar.gz

# 创建解压的目录
mkdir -p /usr/local/buildkit

# 解压到指定的目录
tar -xf buildkit-v0.11.6.linux-amd64.tar.gz -C /usr/local/buildkit

# 查看解压的目录
yum -y install tree
tree /usr/local/buildkit

image.png

修改PATH环境变量
# 注意这里的echo 要使用单引号,单引号会原样输出,双引号会解析变量
echo 'export PATH=/usr/local/buildkit/bin:$PATH' >> /etc/profile
cat /etc/profile

# 使刚才配置生效
source /etc/profile

image.png

创建buildkitd自启动服务
cat <<EOF > /usr/lib/systemd/system/buildkitd.service
[Unit]
Description=buildkitd
After=network.target

[Service]
ExecStart=/usr/local/buildkit/bin/buildkitd

[Install]
WantedBy=multi-user.target
EOF
# 重新加载Unit file
systemctl daemon-reload
# 启动服务
systemctl start buildkitd
# 开机自启动
systemctl enable buildkitd

image.png

2.4 准备Hadoop的镜像

vim Dockerfile
---
FROM openjdk:8-jdk

ENV HADOOP_VERSION 3.3.6
ENV HADOOP_HOME=/opt/hadoop

ENV HADOOP_COMMON_HOME=${HADOOP_HOME} \
    HADOOP_HDFS_HOME=${HADOOP_HOME} \
    HADOOP_MAPRED_HOME=${HADOOP_HOME} \
    HADOOP_YARN_HOME=${HADOOP_HOME} \
    HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop \
    PATH=${PATH}:${HADOOP_HOME}/bin

RUN curl --silent --output /tmp/hadoop.tgz https://ftp-stud.hs-esslingen.de/pub/Mirrors/ftp.apache.org/dist/hadoop/common/hadoop-${HADOOP_VERSION}/hadoop-${HADOOP_VERSION}.tar.gz && tar --directory /opt -xzf /tmp/hadoop.tgz && rm /tmp/hadoop.tgz
RUN ln -s /opt/hadoop-${HADOOP_VERSION} ${HADOOP_HOME}

WORKDIR $HADOOP_HOME

# Hdfs ports
EXPOSE 50010 50020 50070 50075 50090 8020 9000

# MapReduce ports
EXPOSE 19888

# Yarn ports
EXPOSE 8030 8031 8032 8033 8040 8042 8088

# Other ports
EXPOSE 49707 2122

---
如果K8S 底层走的是containerd 则使用buildkitd 去构建镜像

# 查看镜像
ctr -n k8s.io image ls
# 生成镜像导入containerd
buildctl build --frontend=dockerfile.v0 --local context=. --local dockerfile=. --output type=docker,name=apache-hadoop:3.3.6 | ctr -n k8s.io image import -
# 查看镜像
nerdctl -n k8s.io images


注:buildkitd 构建镜像介绍:
----
`buildctl build --frontend=dockerfile.v0 --local context=. --local dockerfile=. --output type=docker,name=apache-hadoop:3.3.6`:这部分命令使用 buildctl 工具来构建 Docker 镜像。它指定了以下参数:
    `--frontend=dockerfile.v0`:使用 Dockerfile v0 格式的构建前端。
    `--local context=.`:将当前目录(表示为 .)作为构建上下文。
    `--local dockerfile=.`:在当前目录中查找 Dockerfile。
    `--output type=docker,name=apache-hadoop:3.3.6`:将构建的镜像输出为 Docker 镜像,命名为 apache-hadoop:3.3.6。
`|`:这是一个管道符号,用于将第一个命令的输出传递给下一个命令。
`ctr -n k8s.io image import -`:这部分命令使用 ctr 工具导入 Docker 镜像。它指定了以下参数:
    `-n k8s.io`:使用 k8s.io 运行时来执行操作。
    `image import -`:从标准输入导入 Docker 镜像。
综上所述,该命令的作用是在构建过程中使用 buildctl 工具构建一个名为 apache-hadoop:3.3.6 的 Docker 镜像,并将其导入到 Docker 运行时中使用 ctr 工具。

image.png

导出镜像
  nerdctl -n k8s.io save -o apache-hadoop-images-3.3.6.tar.gz apache-hadoop:3.3.6

导入镜像
   nerdctl -n k8s.io load -i apache-hadoop-images-3.3.6.tar.gz

image.png image.png

2.5 安装hadoop

创建hadoop 的持久化目录
mkdir -p /bigdata/hadoop/{nn,dn}/data/data{1..3}
tree /bigdata/hadoop

image.png

2.6 准备Hadoop的helm charts 文件

上传编写好的hadoop helm charts 的文件
unzip hadoop.zip

image.png

执行helm 安装

  helm install hadoop ./hadoop -n hadoop --create-namespace

image.png

NAME: hadoop
LAST DEPLOYED: Tue Oct 10 11:45:28 2023
NAMESPACE: hadoop
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
1. You can check the status of HDFS by running this command:
   kubectl exec -n hadoop -it hadoop-hadoop-hdfs-nn-0 -- /opt/hadoop/bin/hdfs dfsadmin -report

2. You can list the yarn nodes by running this command:
   kubectl exec -n hadoop -it hadoop-hadoop-yarn-rm-0 -- /opt/hadoop/bin/yarn node -list

3. Create a port-forward to the yarn resource manager UI:
   kubectl port-forward -n hadoop hadoop-hadoop-yarn-rm-0 8088:8088

   Then open the ui in your browser:

   open http://localhost:8088

4. You can run included hadoop tests like this:
   kubectl exec -n hadoop -it hadoop-hadoop-yarn-nm-0 -- /opt/hadoop/bin/hadoop jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.3.6-tests.jar TestDFSIO -write -nrFiles 5 -fileSize 128MB -resFile /tmp/TestDFSIOwrite.txt

5. You can list the mapreduce jobs like this:
   kubectl exec -n hadoop -it hadoop-hadoop-yarn-rm-0 -- /opt/hadoop/bin/mapred job -list

6. This chart can also be used with the zeppelin chart
    helm install --namespace hadoop --set hadoop.useConfigMap=true,hadoop.configMapName=hadoop-hadoop stable/zeppelin

7. You can scale the number of yarn nodes like this:
   helm upgrade hadoop --set yarn.nodeManager.replicas=4 stable/hadoop

   Make sure to update the values.yaml if you want to make this permanent.


kubectl get pod,svc -n hadoop -o wide 

image.png

打开hdfs的web 
  http://172.16.10.11:30870

image.png image.png

打开yarn的web 
     http://172.16.10.11:30088

image.png

2.7 hdfs 的测试

# 进入容器
kubectl exec -it hadoop-hadoop-hdfs-nn-0 -n hadoop -- bash
# 显示已安装的Hadoop版本
hadoop version
# 显示HDFS集群的报告,包括有关集群节点、块数量、磁盘使用情况等信息
hdfs dfsadmin -report
# 在HDFS上创建一个新目录
hdfs dfs -mkdir /tmp
# 列出HDFS根目录下的文件和目录
hdfs dfs -ls /
# 将字符串“test hadoop”写入名为“test.txt”的本地文件
echo "test hadoop" >test.txt
# 将本地文件“test.txt”上传到HDFS的“/tmp”目录中
hdfs dfs -put test.txt /tmp/
# 列出HDFS上“/tmp”目录中的文件和目录
hdfs dfs -ls /tmp/
# 显示HDFS上“/tmp/test.txt”文件的内容
hdfs dfs -cat /tmp/test.txt

image.png

2.8 测试yarn:

执行命令:

kubectl exec -n hadoop -it hadoop-hadoop-yarn-nm-0 -- /opt/hadoop/bin/hadoop jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.3.6-tests.jar TestDFSIO -write -nrFiles 5 -fileSize 128MB -resFile /tmp/TestDFSIOwrite.txt

image.png image.png image.png image.png image.png

2.9 卸载 Hadoop

卸载Hadoop
helm uninstall hadoop -n hadoop
kubectl get pod --all-namespaces -o wide

删除目录
rm -rf /bigdata/hadoop
mkdir -p /bigdata/hadoop/{nn,dn}/data/data{1..3}
tree /root/hadoop

删除ns
kubectl delete namespace hadoop
kubectl get namespace
举报

相关推荐

0 条评论