1. 首页
  2. 技术知识

教你在k8s上部署HADOOP-3.2.2(HDFS)的方法

环境+版本

k8s: v1.21.1

hadoop: 3.2.2

dockerfile

  1. FROM openjdk:8-jdk
  2. # 如果要通过ssh连接容器内部,添加自己的公钥(非必须)
  3. ARG SSH_PUB=’ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC3nTRJ/aVb67l1xMaN36jmIbabU7Hiv/xpZ8bwLVvNO3Bj7kUzYTp7DIbPcHQg4d6EsPC6j91E8zW6CrV2fo2Ai8tDO/rCq9Se/64F3+8oEIiI6E/OfUZfXD1mPbG7M/kcA3VeQP6wxNPhWBbKRisqgUc6VTKhl+hK6LwRTZgeShxSNcey+HZst52wJxjQkNG+7CAEY5bbmBzAlHCSl4Z0RftYTHR3q8LcEg7YLNZasUogX68kBgRrb+jw1pRMNo7o7RI9xliDAGX+E4C3vVZL0IsccKgr90222axsADoEjC9O+Q6uwKjahemOVaau+9sHIwkelcOcCzW5SuAwkezv 805899926@qq.com’
  4. RUN apt-get update;
  5. RUN apt-get install -y openssh-server net-tools vim git;
  6. RUN sed -i -r ‘s/^\s*UseDNS\s+\w+/#\0/; s/^\s*PasswordAuthentication\s+\w+/#\0/; s/^\s*ClientAliveInterval\s+\w+/#\0/’ /etc/ssh/sshd_config;
  7. RUN echo ‘UseDNS no \nPermitRootLogin yes \nPasswordAuthentication yes \nClientAliveInterval 30’ >> /etc/ssh/sshd_config;
  8. RUN cat /etc/ssh/sshd_config
  9. RUN su root bash -c ‘cd;mkdir .ssh;chmod 700 .ssh;echo ${SSH_PUB} > .ssh/authorized_keys;chmod 644 .ssh/authorized_keys’
  10. RUN su root bash -c ‘cd;ssh-keygen -t rsa -f ~/.ssh/id_rsa; cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys’
  11. # hadoop
  12. ENV HADOOP_TGZ_URL=https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.2.2/hadoop-3.2.2.tar.gz
  13. ENV HADOOP_HOME=/opt/hadoop
  14. ENV PATH=$HADOOP_HOME/bin:$PATH
  15. RUN set -ex; \
  16.     mkdir -p $HADOOP_HOME; \
  17.     wget -nv -O $HADOOP_HOME/src.tgz $HADOOP_TGZ_URL; \
  18.     tar -xf $HADOOP_HOME/src.tgz –strip-components=1 -C $HADOOP_HOME; \
  19.     rm $HADOOP_HOME/src.tgz; \
  20.     chown -R root:root $HADOOP_HOME; \
  21. RUN mkdir -p $HADOOP_HOME/hdfs/name/ && mkdir -p $HADOOP_HOME/hdfs/data/
  22. # clean trash file or dir
  23. RUN rm -rf $HADOOP_HOME/share/doc/;
  24. COPY docker-entrypoint.sh /
  25. EXPOSE 22 9870 9000
  26. ENTRYPOINT [“/docker-entrypoint.sh”]

复制代码 docker-entrypoint.sh

  1. #!/bin/bash
  2. set -e
  3. service ssh start
  4. hdfs_dir=$HADOOP_HOME/hdfs/
  5. if [ $HADOOP_NODE_TYPE = “datanode” ]; then
  6.   echo -e “\033[32m start datanode \033[0m”
  7.   $HADOOP_HOME/bin/hdfs datanode -regular
  8. fi
  9. if [ $HADOOP_NODE_TYPE = “namenode” ]; then
  10.   if [ -z $(ls -A ${hdfs_dir}) ]; then
  11.     echo -e “\033[32m start hdfs namenode format \033[0m”
  12.     $HADOOP_HOME/bin/hdfs namenode -format
  13.   fi
  14.   echo -e “\033[32m start hdfs namenode \033[0m”
  15.   $HADOOP_HOME/bin/hdfs namenode

复制代码 pod template

  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4.   name: hadoop
  5.   namespace: big-data
  6.   labels:
  7.     APP: hadoop
  8. data:
  9.   hadoop-env.sh: |
  10.     export HDFS_DATANODE_USER=root
  11.     export HDFS_NAMENODE_USER=root
  12.     export HDFS_SECONDARYNAMENODE_USER=root
  13.     export JАVA_HOME=/usr/local/openjdk-8
  14.     export HADOOP_OS_TYPE=${HADOOP_OS_TYPE:-$(uname -s)}
  15.     export HADOOP_OPTS=”-Djava.library.path=${HADOOP_HOME}/lib/native”
  16.   core-site.xml: |
  17.     <?xml version=”1.0″ encoding=”UTF-8″?>
  18.     <?xml-stylesheet type=”text/xsl” href=”configuration.xsl” rel=”external nofollow”  rel=”external nofollow” ?>
  19.     <configuration>
  20.         <property>
  21.             <name>fs.defaultFS</name>
  22.             <value>hdfs://hadoop-master:9000</value>
  23.         </property>
  24.         <property>
  25.             <name>dfs.namenode.rpc-bind-host</name>
  26.             <value>0.0.0.0</value>
  27.         </property>
  28.     </configuration>
  29.   hdfs-site.xml: |
  30.     <?xml version=”1.0″ encoding=”UTF-8″?>
  31.     <?xml-stylesheet type=”text/xsl” href=”configuration.xsl” rel=”external nofollow”  rel=”external nofollow” ?>
  32.     <configuration>
  33.         <property>
  34.             <name>dfs.namenode.name.dir</name>
  35.             <value>file:///opt/hadoop/hdfs/name</value>
  36.         </property>
  37.         <property>
  38.             <name>dfs.datanode.data.dir</name>
  39.             <value>file:///opt/hadoop/hdfs/data</value>
  40.         </property>
  41.         <property>
  42.             <name>dfs.namenode.datanode.registration.ip-hostname-check</name>
  43.             <value>false</value>
  44.         </property>
  45.         <property>
  46.             <name>dfs.replication</name>
  47.             <value>1</value>
  48.         </property>
  49.     </configuration>
  50. # namenode svc
  51. apiVersion: v1
  52. kind: Service
  53. metadata:
  54.   name: hadoop-master
  55.   namespace: big-data
  56. spec:
  57.   selector:
  58.     app: hadoop-namenode
  59.   type: NodePort
  60.   ports:
  61.     – name: rpc
  62.       port: 9000
  63.       targetPort: 9000
  64.     – name: http
  65.       port: 9870
  66.       targetPort: 9870
  67.       nodePort: 9870
  68. # namenode pod
  69. apiVersion: apps/v1
  70. kind: Deployment
  71. metadata:
  72.   name: hadoop-namenode
  73.   namespace: big-data
  74. spec:
  75.   strategy:
  76.     type: Recreate
  77.   selector:
  78.     matchLabels:
  79.       app: hadoop-namenode
  80.   template:
  81.     metadata:
  82.       labels:
  83.         app: hadoop-namenode
  84.     spec:
  85.       volumes:
  86.         – name: hadoop-env
  87.           configMap:
  88.             name: hadoop
  89.             items:
  90.               – key: hadoop-env.sh
  91.                 path: hadoop-env.sh
  92.         – name: core-site
  93.           configMap:
  94.             name: hadoop
  95.             items:
  96.               – key: core-site.xml
  97.                 path: core-site.xml
  98.         – name: hdfs-site
  99.           configMap:
  100.             name: hadoop
  101.             items:
  102.               – key: hdfs-site.xml
  103.                 path: hdfs-site.xml
  104.         – name: hadoop-data
  105.           persistentVolumeClaim:
  106.             claimName: data-hadoop-namenode
  107.       containers:
  108.         – name: hadoop
  109.           image: registry:5000/hadoop
  110.           imagePullPolicy: Always
  111.           ports:
  112.             – containerPort: 22
  113.             – containerPort: 9000
  114.             – containerPort: 9870
  115.           volumeMounts:
  116.             – name: hadoop-env
  117.               mountPath: /opt/hadoop/etc/hadoop/hadoop-env.sh
  118.               subPath: hadoop-env.sh
  119.             – name: core-site
  120.               mountPath: /opt/hadoop/etc/hadoop/core-site.xml
  121.               subPath: core-site.xml
  122.             – name: hdfs-site
  123.               mountPath: /opt/hadoop/etc/hadoop/hdfs-site.xml
  124.               subPath: hdfs-site.xml
  125.             – name: hadoop-data
  126.               mountPath: /opt/hadoop/hdfs/
  127.               subPath: hdfs
  128.             – name: hadoop-data
  129.               mountPath: /opt/hadoop/logs/
  130.               subPath: logs
  131.           env:
  132.             – name: HADOOP_NODE_TYPE
  133.               value: namenode
  134. apiVersion: v1
  135. kind: PersistentVolumeClaim
  136. metadata:
  137.   name: data-hadoop-namenode
  138.   namespace: big-data
  139. spec:
  140.   accessModes:
  141.     – ReadWriteMany
  142.   resources:
  143.     requests:
  144.       storage: 256Gi
  145.   storageClassName: “managed-nfs-storage”
  146. # datanode pod
  147. apiVersion: apps/v1
  148. kind: StatefulSet
  149. metadata:
  150.   name: hadoop-datanode
  151.   namespace: big-data
  152. spec:
  153.   replicas: 2
  154.   selector:
  155.     matchLabels:
  156.       app: hadoop-datanode
  157.   serviceName: hadoop-datanode
  158.   template:
  159.     metadata:
  160.       labels:
  161.         app: hadoop-datanode
  162.     spec:
  163.       volumes:
  164.         – name: hadoop-env
  165.           configMap:
  166.             name: hadoop
  167.             items:
  168.               – key: hadoop-env.sh
  169.                 path: hadoop-env.sh
  170.         – name: core-site
  171.           configMap:
  172.             name: hadoop
  173.             items:
  174.               – key: core-site.xml
  175.                 path: core-site.xml
  176.         – name: hdfs-site
  177.           configMap:
  178.             name: hadoop
  179.             items:
  180.               – key: hdfs-site.xml
  181.                 path: hdfs-site.xml
  182.       containers:
  183.         – name: hadoop
  184.           image: registry:5000/hadoop
  185.           imagePullPolicy: Always
  186.           ports:
  187.             – containerPort: 22
  188.             – containerPort: 9000
  189.             – containerPort: 9870
  190.           volumeMounts:
  191.             – name: hadoop-env
  192.               mountPath: /opt/hadoop/etc/hadoop/hadoop-env.sh
  193.               subPath: hadoop-env.sh
  194.             – name: core-site
  195.               mountPath: /opt/hadoop/etc/hadoop/core-site.xml
  196.               subPath: core-site.xml
  197.             – name: hdfs-site
  198.               mountPath: /opt/hadoop/etc/hadoop/hdfs-site.xml
  199.               subPath: hdfs-site.xml
  200.             – name: data
  201.               mountPath: /opt/hadoop/hdfs/
  202.               subPath: hdfs
  203.             – name: data
  204.               mountPath: /opt/hadoop/logs/
  205.               subPath: logs
  206.           env:
  207.             – name: HADOOP_NODE_TYPE
  208.               value: datanode
  209.   volumeClaimTemplates:
  210.     – metadata:
  211.         name: data
  212.         namespace: big-data
  213.       spec:
  214.         accessModes:
  215.           – ReadWriteMany
  216.         resources:
  217.           requests:
  218.             storage: 256Gi
  219.         storageClassName: “managed-nfs-storage”

复制代码 到此这篇关于k8s-部署HADOOP-3.2.2(HDFS)的文章就介绍到这了,更多相关k8s部署hadoop内容请搜索共生网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持共生网络!

原创文章,作者:starterknow,如若转载,请注明出处:https://www.starterknow.com/108219.html

联系我们