Construcción de un entorno distribuido de hadoop y mapreduce basado en tecnología docker

Construcción de un entorno distribuido de hadoop y mapreduce basado en tecnología docker

1. Instalar Doker

1. Confirme el entorno del host

  1. (si no lo está ya) instale la herramienta lsb-release

    apt install lsb-release

    inserte la descripción de la imagen aquí

  2. Ver versión

    lsb_release -a

    inserte la descripción de la imagen aquí

2. Preparar el entorno de instalación

  1. sistema de actualización

    sudo apt update

    inserte la descripción de la imagen aquí

    inserte la descripción de la imagen aquí

    sudo apt upgrade

    inserte la descripción de la imagen aquí

    inserte la descripción de la imagen aquí

  2. Descargar rizo:

    sudo apt install curl

    inserte la descripción de la imagen aquí

3. Instalar ventana acoplable

  1. Instalar docker a través de la herramienta curl

    curl -fssl https://get.docker.com -o get-docker.sh

    inserte la descripción de la imagen aquí

    sudo sh get-docker.sh

    inserte la descripción de la imagen aquí

    inserte la descripción de la imagen aquí

  2. Confirmar la instalación de la ventana acoplable

    sudo docker version

    inserte la descripción de la imagen aquí

  3. (Opcional) Instale docker-compose, la última versión es 1.29.2

    Puede visitar https://github.com/docker/compose/releases/ primero para confirmar el número de versión

    sudo curl -l "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

    inserte la descripción de la imagen aquí

    sudo chmod +x /usr/local/bin/docker-compose

    inserte la descripción de la imagen aquí

  4. Agregar cdn de imagen docker doméstico

    sudo vi /etc/docker/daemon.json

    {
          
          
    
      "registry-mirrors":["https://kfp63jaj.mirror.aliyuncs.com","https://docker.mirrors.ustc.edu.cn","https://registry.docker-cn.com","http://hub-mirror.c.163.com"]
    
    }
    

    inserte la descripción de la imagen aquí

  5. Vuelva a cargar la ventana acoplable para que cdn surta efecto:

    sudo systemctl daemon-reload

    inserte la descripción de la imagen aquí

    sudo systemctl restart docker

    inserte la descripción de la imagen aquí

    Reinicie la ventana acoplable pero encuentre problemas (como se muestra arriba)

    Para mayor comodidad, primero instalo un vim (realmente no puedo usar vi)

    inserte la descripción de la imagen aquí

    Así que eliminé la ventana acoplable y la reinstalé y el problema se resolvió.

    inserte la descripción de la imagen aquí

  6. Pruebe si la ventana acoplable puede tomar la imagen y ejecutarla normalmente

    1. Ejecute el caso de prueba hello-world

      sudo docker run hello-world

      inserte la descripción de la imagen aquí

  7. Ver el registro de ejecución de la imagen hello-world

    sudo docker ps -a

    inserte la descripción de la imagen aquí

2. Creación de hadoop y mapreduce basados ​​en tecnología docker

1. Preparar el entorno del contenedor

  1. Tome la imagen de ubuntu 18.04 como base para construir el entorno Hadoop

    sudo docker pull ubuntu:18.04

    inserte la descripción de la imagen aquí

  2. Compruebe si la imagen se capturó con éxito

    sudo docker images

    inserte la descripción de la imagen aquí

  3. Inicie un contenedor con esa imagen de ubuntu

    Conectar <host-share-path> con <container-share-path>

    sudo docker run -it -v ~/hadoop/build:/home/hadoop/build ubuntu

    inserte la descripción de la imagen aquí

    Parece que el espejo no se puede encontrar en los primeros cdn, luego se informa un error y luego se encuentra el espejo en los siguientes cdn

    Después de que se inicie el contenedor, ingresará automáticamente a la consola del contenedor.

  4. Instale el software requerido en la consola del contenedor

    apt-get update

    inserte la descripción de la imagen aquí

    apt-get upgrade

    inserte la descripción de la imagen aquí

  5. Necesita instalar net-tools (herramientas de administración de red), vim (editor de texto de línea de comando) y ssh (protocolo de inicio de sesión remoto)

    apt-get install net-tools vim openssh-server

    inserte la descripción de la imagen aquí

2. Configurar el servidor ssh

  1. Hacer que el servidor ssh se inicie automáticamente

    vim ~/.bashrc

    Presione o al final del archivo para ingresar al modo de edición y agregue:

    /etc/init.d/ssh start

    Presiona esc para regresar al modo comando, ingresa: wq para guardar y salir

    inserte la descripción de la imagen aquí

  2. Hacer que los cambios surtan efecto inmediatamente

    source ~/.bashrc

    inserte la descripción de la imagen aquí

  3. Configurar el acceso sin contraseña para ssh

    ssh-keygen -t rsa

    inserte la descripción de la imagen aquí

    cd ~/.ssh

    cat id_rsa.pub >> authorized_keys

    inserte la descripción de la imagen aquí

3. Instalar jdk8

(Nota: hadoop3.x actualmente solo es compatible con jdk7,8)

  1. instalar jdk8

    apt-get install openjdk-8-jdk

    inserte la descripción de la imagen aquí

  2. hero jdk en variables de entorno, edite el archivo de configuración de la línea de comandos de bash

    vim ~/.bashrc

    Al final del archivo agregar:

    export java_home=/usr/lib/jvm/java-8-openjdk-amd64/
    
    export path=$path:$java_home/bin
    

    inserte la descripción de la imagen aquí

  3. Hacer que la configuración de jdk surta efecto inmediatamente

    source ~/.bashrc

    inserte la descripción de la imagen aquí

  4. Prueba jdk funcionando correctamente

    java -version

    inserte la descripción de la imagen aquí

4. Guarda la imagen

  1. (Opcional) Para iniciar sesión en Docker, debe registrar una cuenta en el sitio web de Docker con anticipación. La ventaja es que puede enviar su propia imagen a Internet.

    sudo docker login

    inserte la descripción de la imagen aquí

  2. id del contenedor de consultas

    sudo docker ps -a

    inserte la descripción de la imagen aquí

  3. Guardar el contenedor actual como una imagen

    sudo docker commit <container id> <image name>

    inserte la descripción de la imagen aquí

  4. Cuando hay demasiados contenedores, puede eliminar el contenedor con el siguiente comando

    docker rm -f <containerid>

    inserte la descripción de la imagen aquí

5. Instalar Hadoop

  1. Descargue el tarball binario de Hadoop en la consola host

    La versión de Hadoop utilizada en este artículo es 3.2.1, la última versión: 3.3.2

    Se pueden descargar otras versiones desde el sitio web oficial de apache hadoop: https://hadoop.apache.org/releases.html

    cd /<host-share-path>

    <host-share-path> hace referencia a la ruta anterior al crear el contenedor: ~/hadoop/build

    inserte la descripción de la imagen aquí

    wget https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz

    (La descarga aquí es solo una página web, es inútil, por lo que aún tiene que descargar el paquete comprimido de hadoop usted mismo, ¡comprenda!)

    inserte la descripción de la imagen aquí

  2. Descomprima hadoop en la consola del contenedor

    Si no le gusta el nombre del contenedor o no es fácil de escribir, puede cambiarle el nombre

    docker rename <原名> <新名>

    inserte la descripción de la imagen aquí

    inserte la descripción de la imagen aquí

    inserte la descripción de la imagen aquí

    abre el contenedor

    docker exec -it <容器名或容器id> /bin/bash

    inserte la descripción de la imagen aquí

    Si el contenedor no se inicia, primero debe iniciar el contenedor

    inserte la descripción de la imagen aquí

    docker start <容器名或容器id>

    inserte la descripción de la imagen aquí

    cd /<container-share-path>

    <container -share-path> hace referencia a la ruta anterior cuando se creó el contenedor: /home/hadoop/buildinserte la descripción de la imagen aquí

    tar -zxvf hadoop-3.3.2.tar.gz -c /usr/local

    (Tenga en cuenta que cuando usé hadoop-3.2.3.tar.gz, tuve problemas con la descompresión, así que reemplacé hadoop-3.3.2.tar.gz)

    inserte la descripción de la imagen aquí

  3. La instalación está completa, verifique la versión de Hadoop

    1. Configurar variables de entorno

      export hadoop_home=/usr/local/hadoop-3.3.2
      export hadoop_yarn_home=$hadoop_home
      

      inserte la descripción de la imagen aquí

    2. prueba

      cd /usr/local/hadoop-3.3.2

      ./bin/hadoop version

      inserte la descripción de la imagen aquí

  4. especificar la ubicación jdk para hadoop

    1. Modificar el archivo de configuración

      Ejecutar en el directorio de instalación de hadoop

      vim etc/hadoop/hadoop-env.sh

      inserte la descripción de la imagen aquí

      Encuentre la ubicación de configuración java_home comentada y cámbiela a la ubicación jdk que acaba de configurar

      export java_home=/usr/lib/jvm/java-8-openjdk-amd64/
      

      inserte la descripción de la imagen aquí

  5. configuración en línea de hadoop

    1. Configurar el archivo core-site.xml

      Ejecutar en el directorio de instalación de hadoop

      vim etc/hadoop/core-site.xml

      inserte la descripción de la imagen aquí

      participar

      <configuration>
      <property>
      <name>hadoop.tmp.dir</name>
      <value>file:/usr/local/hadoop-3.2.1/tmp</value>
      <description>abase for other temporary directories.</description>
      </property>
      <!-- 配置文件系统的uri,代码中可以通过该地址访问文件系统,使用 hdfsoperator.hdfs_uri 调用 -->
      <property>
      <name>fs.defaultfs</name>
      <value>hdfs://master:9000</value>
      </property>
      </configuration>
      

      inserte la descripción de la imagen aquí

    2. Cooperar con el archivo hdfs-site.xml

      Ejecutar en el directorio de instalación de hadoop

      vim etc/hadoop/hdfs-site.xml

      inserte la descripción de la imagen aquí

      participar

      <configuration>
      <!-- 配置保存fsimage位置 -->
      <property>
      <name>dfs.namenode.name.dir</name>
      <value>file:/usr/local/hadoop-3.2.1/namenode_dir</value>
      </property>
      <!-- 配置保存数据文件的位置 -->
      <property>
      <name>dfs.datanode.data.dir</name>
      <value>file:/usr/local/hadoop-3.2.1/datanode_dir</value>
      </property>
      <property>
      <name>dfs.replication</name>
      <value>3</value>
      </property>
      </configuration>
      

      inserte la descripción de la imagen aquí

    3. configuración de mapreduce

      La descripción de la definición de este archivo de configuración se refiere a:

      https://hadoop.apache.org/docs/r<hadoop版本号>/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml

    4. Configurar mapred-sitio.xml

      Ejecutar en el directorio de instalación de hadoop

      vim etc/hadoop/mapred-site.xml

      inserte la descripción de la imagen aquí

      participar

      <configuration>
      <!-- mapreduce框架的名字 -->
      <property>
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
      </property>
      <!-- 设定hadoop的位置给yarn和mapreduce程序 -->
      <property>
      <name>yarn.app.mapreduce.am.env</name>
      <value>hadoop_mapred_home=${hadoop_home}</value>
      </property>
      <property>
      <name>mapreduce.map.env</name>
      <value>hadoop_mapred_home=${hadoop_home}</value>
      </property>
      <property>
      <name>mapreduce.reduce.env</name>
      <value>hadoop_mapred_home=${hadoop_home}</value>
      </property>
      </configuration>
      

      inserte la descripción de la imagen aquí

    5. Configurar el archivo yarn-site.xml

      Ejecutar en el directorio de instalación de hadoop

      vim etc/hadoop/yarn-site.xml

      inserte la descripción de la imagen aquí

      participar

      <configuration>
      <!-- site specific yarn configuration properties -->
      <!-- 辅助服务,数据混洗 -->
      <property>
      <name>yarn.nodemanager.aux-services</name>
      <value>mapreduce_shuffle</value>
      </property>
      <!-- 设定资源管理服务器的host名称,这个名称(master)将在下个小节中设定-->
      <property>
      <name>yarn.resourcemanager.hostname</name>
      <value>master</value>
      </property>
      </configuration>
      

      inserte la descripción de la imagen aquí

  6. Configuración de permisos de inicio de servicio

    1. Configure los archivos start-dfs.sh y stop-dfs.sh

      Ejecutar en el directorio de instalación de hadoop

      vim sbin/start-dfs.sh

      inserte la descripción de la imagen aquí

      y

      vim sbin/stop-dfs.sh

      inserte la descripción de la imagen aquí

      añadir al principio del archivo

      HDFS_DATANODE_USER=root
      HADOOP_SECURE_DN_USER=hdfs
      HDFS_NAMENODE_USER=root
      HDFS_SECONDARYNAMENODE_USER=root
      

      inserte la descripción de la imagen aquí
      inserte la descripción de la imagen aquí

    2. Configure los archivos start-yarn.sh y stop-yarn.sh

      Ejecutar en el directorio de instalación de hadoop

      vim sbin/start-yarn.sh

      inserte la descripción de la imagen aquí

      y

      vim sbin/stop-yarn.sh

      inserte la descripción de la imagen aquí

      añadir al principio del archivo

      YARN_RESOURCEMANAGER_USER=root
      HADOOP_SECURE_DN_USER=yarn
      YARN_NODEMANAGER_USER=root
      

      inserte la descripción de la imagen aquí
      inserte la descripción de la imagen aquí

    3. La configuración está completa, guarde la imagen

      1. volver al anfitrión

        exit

        inserte la descripción de la imagen aquí

      2. Ver contenedores

        docker ps

        inserte la descripción de la imagen aquí

      3. cargar contenedor

        docker commit <container id> <image name>

        inserte la descripción de la imagen aquí

  7. Inicie hadoop y configure la red

    1. Abra tres consolas host e inicie tres contenedores: un maestro y dos esclavos:

    2. Maestro

      Asignación de puertos abiertos: 8088 => 8080

      sudo docker run -p 8088:8080 -it -h master –-name master <image name>

      inserte la descripción de la imagen aquí

    3. trabajador01

      sudo docker run -it -h worker01 –-name worker01 <image name>

      inserte la descripción de la imagen aquí

    4. trabajador02

      sudo docker run -it -h worker02 –-name worker02 <image name>

      inserte la descripción de la imagen aquí

    5. Abra /etc/hosts de los tres contenedores respectivamente y complete la información de asignación de las direcciones IP y los nombres de host de cada uno (los tres contenedores deben configurarse de esta manera)

      vim /etc/hosts

      inserte la descripción de la imagen aquí

      (También puede usar el siguiente comando para consultar la ip cuando sea necesario: ifconfig<if y config no tienen espacios entre ellos, de lo contrario es otro comando>)

      inserte la descripción de la imagen aquí

      inserte la descripción de la imagen aquí

      inserte la descripción de la imagen aquí

      Agregar información (este archivo debe ajustarse cada vez que se inicia el contenedor)

      <master的实际ip>   master
      <worker01的实际ip>   worker01
      <worker02的实际ip>   worker02
      

      inserte la descripción de la imagen aquí
      inserte la descripción de la imagen aquí
      inserte la descripción de la imagen aquí

      El contenido del archivo de hosts de los tres hosts es el mismo

    6. Comprobar si la configuración es válida

      ssh master

      ssh worker01

      ssh worker02

      inserte la descripción de la imagen aquí

      inserte la descripción de la imagen aquí

      inserte la descripción de la imagen aquí

  8. Configurar el nombre de host del contenedor de trabajo en el contenedor maestro

    cd /usr/local/hadoop-3.3.2

    vim etc/hadoop/workers

    inserte la descripción de la imagen aquí

    eliminar localhost, unirse

    worker01
    worker02
    

    configuración de red completa

    inserte la descripción de la imagen aquí

  9. iniciar hadoop

    1. En el host maestro, inicie hadoop

      cd /usr/local/hadoop-3.3.2

      ./bin/hdfs namenode -format

      inserte la descripción de la imagen aquí

      inserte la descripción de la imagen aquí

      ./sbin/start-all.sh

      inserte la descripción de la imagen aquí

    2. Crear un directorio para almacenar archivos en hdfs

      Supongamos que el directorio que se creará es: /home/hadoop/input

      ./bin/hdfs dfs -mkdir -p /home/hadoop/input

      ./bin/hdfs dfs -put ./etc/hadoop/*.xml /home/hadoop/input

      inserte la descripción de la imagen aquí

    3. Comprobar si la replicación de la distribución es normal

      ./bin/hdfs dfs -ls /home/hadoop/input

      inserte la descripción de la imagen aquí

  10. Ejecute el programa de muestra que viene con mapreduce

    1. ejecuta el programa

      1. Crear un nuevo directorio /home/hadoop/wordcount

        ./bin/hdfs dfs -mkdir /home/hadoop/wordcount

        inserte la descripción de la imagen aquí

      2. Cree un nuevo archivo de entrada hello.txt y colóquelo en el directorio /home/hadoop/wordcount/

        inserte la descripción de la imagen aquí

        inserte la descripción de la imagen aquí

      3. ejecutar programa

        ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.2.jar wordcount /home/hadoop/wordcount /home/hadoop/wordcount/output

        inserte la descripción de la imagen aquíinserte la descripción de la imagen aquí

  11. Después de ejecutar, verifique la salida

    (Debido a que la tarea original proporcionada por mi servidor en la nube no se puede ejecutar, la reemplacé con la tarea de recuento de palabras)

    ./bin/hdfs dfs -ls /home/hadoop/wordcount/output

    inserte la descripción de la imagen aquí

    ./bin/hdfs dfs -cat /home/hadoop/wordcount/output/*

    inserte la descripción de la imagen aquí

3. Preguntas y respuestas

P1: Cómo sacar el nodo de nombre del modo seguro.

R1: Antes de cerrar el contenedor, si no se ejecuta el comando stop-all.sh, el nodo de nombre entrará en modo seguro. El comando para salir del modo seguro es el siguiente

./bin/hadoop dfsadmin -safemode leave

inserte la descripción de la imagen aquí

P2: Cómo eliminar contenedores en lotes.

A2:sudo docker container prune

P3: El error connect to host <docker node> puerto 22: conexión rechazada aparece cuando se inicia el servicio hadoop.

A3: El servidor ssh no se inicia, use el siguiente comando para iniciar el servidor ssh

/etc/init.d/ssh start

Supongo que te gusta

Origin blog.csdn.net/weixin_45795947/article/details/124179617
Recomendado
Clasificación