English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Construir y desplegar un clúster distribuido de Hadoop utilizando Docker
Busqué mucho tiempo en línea y no encontré documentos sobre cómo construir un clúster distribuido de Hadoop utilizando Docker, no tengo más remedio que escribir uno yo mismo.
Primero: Preparación del entorno:
1:Primero debe haber un CentOS7Sistema operativo, que puede instalarse en una máquina virtual.
2:Primero debe haber un CentOS7Instalar docker en: en CentOS, el sistema operativo, puede instalarse en una máquina virtual.1.8.2
Los pasos de instalación son los siguientes:
<1> Instalar una versión específica de docker
yum install -y docker-1.8.2-10.el7.centos
<2> Puede producirse un error durante la instalación, es necesario eliminar esta dependencia
rpm -e lvm2-7:2.02.105-14.el7.x86_64
Iniciar docker
service docker start
Verificación del resultado de la instalación:
<3> Después de iniciar, al ejecutar docker info se verán las siguientes dos líneas de advertencia
Es necesario desactivar el cortafuegos y reiniciar el sistema
systemctl stop firewalld systemctl disable firewalld #Atención: después de ejecutar el comando anterior, es necesario reiniciar el sistema reboot -h (reinicio del sistema)
<4> Al ejecutar el contenedor puede producirse un error
Es necesario desactivar SELinux
Solución:
1:setenforce 0 (efectivo inmediatamente, sin necesidad de reiniciar el sistema operativo)
2:modificación/etc/selinux/En el archivo de configuración, SELINUX debe estar configurado como disabled, luego reiniciar el sistema para que surta efecto.
Se recomienda ejecutar ambos pasos, para asegurar que SELinux también esté en estado apagado después de que el sistema se reinicie.
3Es necesario construir primero una imagen básica de Hadoop, utilizando el archivo Dockerfile para la construcción.
Primero, construya una imagen con funcionalidad ssh para facilitar su uso posterior. (Pero esto puede afectar la seguridad del contenedor.)
注意:这个镜像中的root用户的密码是root
Mkdir centos-ssh-root Cd centos-ssh-root Vi Dockerfile
# 选择一个已有的os镜像作为基础 FROM centos # 镜像的作者 MAINTAINER crxy # 安装openssh-server和sudo软件包,并且将sshd的UsePAM参数设置成no RUN yum install -y openssh-server sudo RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config #安装openssh-clients RUN yum install -y openssh-clients # 添加测试用户root,密码root,并且将此用户添加到sudoers里 RUN echo "root:root" | chpasswd RUN echo "root ALL=(ALL) ALL" >> /etc/sudoers # 下面这两句比较特殊,在centos6上必须要有,否则创建出来的容器sshd不能登录 RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key # 启动sshd服务并且暴露22端口 RUN mkdir /var/run/sshd EXPOSE 22 CMD ["/usr/sbin/sshd", "-D"]
构建命令:
docker build -t=crxy/centos-ssh-root” .
查询刚才构建成功的镜像
4:基于这个镜像再构建一个带有jdk的镜像
注意:jdk使用的是1.7版本的
Mkdir centos-ssh-root-jdk Cd centos-ssh-root-jdk Cp ../jdk-7u75-Linux-x64.tar.gz . Vi Dockerfile
FROM crxy/centos-ssh-root ADD jdk-7u75-linux-x64.tar.gz /usr/local/ RUN mv /usr/local/jdk1.7.0_75 /usr/local/jdk1.7 ENV JAVA_HOME /usr/local/jdk1.7 ENV PATH $JAVA_HOME/bin:$PATH
构建命令:
docker build -t=crxy/centos-ssh-root-jdk” .
consulta la imagen construida con éxito
5:基于这个jdk镜像再构建一个带有hadoop的镜像
注意:hadoop使用的是2.4.1版本的。
Mkdir centos-ssh-root-jdk-hadoop Cd centos-ssh-root-jdk-hadoop Cp ../hadoop-2.4.1.tar.gz . Vi Dockerfile
FROM crxy/centos-ssh-root-jdk ADD hadoop-2.4.1.tar.gz /usr/local RUN mv /usr/local/hadoop-2.4.1 /usr/local/hadoop ENV HADOOP_HOME /usr/local/hadoop ENV PATH $HADOOP_HOME/bin:$PATH
构建命令:
docker build -t=crxy/centos-ssh-root-jdk-hadoop” .
consulta la imagen construida con éxito
dos: construir la集群 distribuida hadoop
1:plan de la集群
preparar para construir una集群 con tres nodos, uno principal y dos desde
nodo principal: hadoop0 ip:192.168.2.10
nodo desde1:hadoop1 ip:192.168.2.11
nodo desde2:hadoop2 ip:192.168.2.12
pero después de que el contenedor docker se reinicie, la IP cambiará, por lo que necesitamos configurar IP fija para docker. Usar pipework para configurar IP fija para el contenedor docker
2:iniciar tres contenedores, respectivamente como hadoop0 hadoop1 hadoop2
ejecutar el siguiente comando en el host de host, configurar el nombre de host y el nombre del contenedor del contenedor y abrir el puerto en hadoop050070 y8088
docker run --name hadoop0 --hostname hadoop0 -d -P -p 50070:50070 -p 8088:8088 crxy/centos-ssh-root-jdk-hadoop docker run --name hadoop1 --hostname hadoop1 -d -P crxy/centos-ssh-root-jdk-hadoop docker run --name hadoop2 --hostname hadoop2 -d -P crxy/centos-ssh-root-jdk-hadoop
usar docker ps para ver los tres contenedores recién iniciados
3:asignar IP fija a estos tres contenedores
1:descargar la dirección de descarga de pipeworkhttps://github.com/jpetazzo/pipework.git
2:cargar el paquete zip descargado al servidor de host, descomprimir, cambiar el nombre
unzip pipework-master.zip mv pipework-master pipework cp -rp pipework/pipework /usr/local/bin/
3:instalar bridge-utils
yum -y install bridge-utils
4:crear la red
brctl addbr br0 ip link set dev br0 up ip addr add 192.168.2.1/24 dev br0
5:asignar IP fija a los contenedores
pipework br0 hadoop0 192.168.2.10/24 pipework br0 hadoop1 192.168.2.11/24 pipework br0 hadoop2 192.168.2.12/24
verificar, ping a tres IP, si puede pingear significa que no hay problemas
4:configurar la集群 hadoop
primero conectarse a hadoop0, usar el comando
docker exec -it hadoop0 /bin/bash
los siguientes pasos son el proceso de configuración de la集群 hadoop
1:configurar el mapeo de nombre de host y IP, modificar tres contenedores: vi /etc/hosts
agregar la siguiente configuración
192.168.2.10 hadoop0 192.168.2.11 hadoop1 192.168.2.12 hadoop2
2:configurar el inicio de sesión SSH sin contraseña
realizar las siguientes operaciones en hadoop0
cd ~ mkdir .ssh cd .ssh ssh-keygen -t rsa( presione Enter repetidamente ) ssh-copy-id -i localhost ssh-copy-id -i hadoop0 ssh-copy-id -i hadoop1 ssh-copy-id -i hadoop2 en hadoop1realizar las siguientes operaciones cd ~ cd .ssh ssh-keygen -t rsa( presione Enter repetidamente ) ssh-copy-id -i localhost ssh-copy-id -i hadoop1 en hadoop2realizar las siguientes operaciones cd ~ cd .ssh ssh-keygen -t rsa( presione Enter repetidamente ) ssh-copy-id -i localhost ssh-copy-id -i hadoop2
3:en la máquina hadoop0 modificar el archivo de configuración de hadoop
ingresar a/usr/local/hadoop/etc/directorio hadoop
modificar los archivos de configuración core en el directorio-site.xml, hdfs-site.xml, yarn-site.xml, mapred-site.xml
(1)hadoop-env.sh
export JAVA_HOME=/usr/local/jdk1.7
(2)core-site.xml
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop0:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop/tmp</value> </property> <property> <name>fs.trash.interval</name> <value>1440</value> </property> </configuration>
(3)hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.permissions</name> <value>false</value> </property> </configuration>
(4)yarn-site.xml
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> </configuration>
(5)cambiar el nombre del archivo: mv mapred-site.xml.template mapred-site.xml
vi mapred-site.xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
(6)formatear
ingresar a/usr/local/en el directorio hadoop
1y ejecutar el comando de formateo
bin/hdfs namenode -format
Atención: Se producirá un error durante la ejecución porque falta el comando 'which'. Instale el paquete.
Ejecute el siguiente comando para instalar
yum install -y which
Ver el siguiente comando indica que el formateo se realizó con éxito.
La operación de formateo no se puede ejecutar repetidamente. Si es absolutamente necesario repetir el formateo, utilice los parámetros-puede usar 'force'.
(7)iniciar la distribución pseudonómica de hadoop
comando:
sbin/start-all.sh
Durante el primer inicio, se debe ingresar 'yes' para confirmar.
Usar jps para verificar si los procesos se iniciaron correctamente. Ver los siguientes procesos indica que la distribución pseudonómica se inició con éxito
[root@hadoop0 hadoop]# jps 3267 SecondaryNameNode 3003 NameNode 3664 Jps 3397 ResourceManager 3090 DataNode 3487 NodeManager
(8)detener la distribución pseudonómica de hadoop
comando:
sbin/stop-all.sh
(9)especificar la dirección del nodemanager, modificar el archivo yarn-site.xml
<property> <description>The hostname of the RM.</description> <name>yarn.resourcemanager.hostname</name> <value>hadoop0</value> </property>
(10)Modificar un archivo de configuración de hadoop en hadoop0/hadoop/slaves
Eliminar todo el contenido original, modificarlo como sigue
hadoop1 hadoop2
(11)Ejecute el comando en hadoop0
scp -rq /usr/local/hadoop hadoop1:/usr/local scp -rq /usr/local/hadoop hadoop2:/usr/local
(12)Iniciar el servicio de clúster distribuido de hadoop
Ejecute sbin/start-all.sh
Nota: Se producirá un error durante la ejecución, ya que los dos nodos esclavos carecen del comando which, instálelo
Ejecute los siguientes comandos en los dos nodos esclavos para instalar
yum install -y which
Luego inicie el clúster (si el clúster ya está en ejecución, debe detenerlo primero)
sbin/start-all.sh
(13)Verificar si el clúster funciona correctamente
Primero verifique los procesos:
Se deben tener estos procesos en Hadoop0
[root@hadoop0 hadoop]# jps 4643 Jps 4073 NameNode 4216 SecondaryNameNode 4381 ResourceManager
Hadoop1Se deben tener estos procesos
[root@hadoop1 hadoop]# jps 715 NodeManager 849 Jps 645 DataNode
Hadoop2Se deben tener estos procesos
[root@hadoop2 hadoop]# jps 456 NodeManager 589 Jps 388 DataNode
Usar el programa para verificar el servicio del clúster
Crear un archivo local
vi a.txt hello you hello me
Subir a.txt a hdfs
hdfs dfs -put a.txt /
Ejecutar el programa wordcount
cd /usr/local/hadoop/share/hadoop/mapreduce hadoop jar hadoop-mapreduce-examples-2.4.1.jar wordcount /a.txt /out
Verificar el resultado de la ejecución del programa
Esto indica que el clúster funciona correctamente.
Acceder al servicio del clúster a través del navegador
Debido a que al iniciar el contenedor hadoop0,50070 y8088se mapea al puerto correspondiente del anfitrión
adb9eba7142b crxy/centos-ssh-root-jdk-hadoop "/usr/sbin/sshd -D" Hace aproximadamente una hora Subido hace aproximadamente una hora 0.0.0.0:8088->8088/tcp, 0.0.0.0:50070->50070/tcp, 0.0.0.0:32770->22/tcp hadoop0
Por lo tanto, se puede acceder directamente al servicio del clúster en el contenedor desde el anfitrión
La dirección IP del anfitrión es:192.168.1.144
http://192.168.1.144:50070/
http://192.168.1.144:8088/
Tres: reiniciar los nodos del clúster
Detener tres contenedores, ejecutar el siguiente comando en el anfitrión
docker stop hadoop0 docker stop hadoop1 docker stop hadoop2
Después de detener los contenedores, la ip fija configurada anteriormente también se eliminará. Al usar estos contenedores nuevamente, es necesario configurar la ip fija nuevamente.
Primero, reactive los tres contenedores que se detuvieron anteriormente
docker start hadoop0 docker start hadoop1 docker start hadoop2
Ejecute el siguiente comando en el anfitrión para establecer ip fija para el contenedor nuevamente
pipework br0 hadoop0 192.168.2.10/24 pipework br0 hadoop1 192.168.2.11/24 pipework br0 hadoop2 192.168.2.12/24
También es necesario configurar nuevamente la relación de mapeo entre el nombre de host y la ip en el contenedor, es complicado escribirlo manualmente cada vez
Escribir un script, runhosts.sh
#!/bin/bash echo 192.168.2.10 hadoop0 >> /etc/hosts echo 192.168.2.11 hadoop1 >> /etc/hosts echo 192.168.2.12 hadoop2 >> /etc/hosts
Agregar permisos de ejecución,
chmod +x runhosts.sh
Copie este script a todos los nodos y ejecute este script respectivamente
scp runhosts.sh hadoop1:~ scp runhosts.sh hadoop2:~
Comando para ejecutar el script
./runhosts.sh
Revisar/etc/¿Se ha añadido con éxito en el archivo hosts?
Nota: En algunas versiones de docker, no se generan automáticamente los siguientes mapeos en el archivo hosts, por lo que aquí configuramos manualmente la ip fija del contenedor y establecemos la relación de mapeo entre el nombre de host y la ip.
172.17.0.25 hadoop0
172.17.0.25 hadoop0.bridge
172.17.0.26 hadoop1
172.17.0.26 hadoop1.bridge
172.17.0.27 hadoop2
172.17.0.27 hadoop2.bridge
Iniciar el clúster Hadoop
sbin/start-all.sh
Esto es todo el contenido del artículo, espero que ayude a su aprendizaje y que todos apoyen a Tutorial de Gritar.
Declaración: El contenido de este artículo se obtiene de la red, es propiedad del autor original, el contenido se contribuye y se carga por los usuarios de Internet, este sitio no posee los derechos de propiedad, no se ha procesado editorialmente y no asume la responsabilidad de las responsabilidades legales. Si encuentra contenido sospechoso de copyright, por favor envíe un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, por favor reemplace # con @ para denunciar, y proporcione la evidencia relevante. Una vez verificada, este sitio eliminará inmediatamente el contenido sospechoso de infracción.)