Utilice VMWare para crear un sistema de clúster y un clúster de Hadoop

Construcción del sistema de clústeres

1. Asuntos que requieren atención

1.Asegúrese de que se hayan iniciado todos los servicios VMWare en el sistema Windows.

Inserte la descripción de la imagen aquí
2. Confirme la dirección de puerta de enlace generada por VMWare.
Vea los pasos: En la
máquina virtual: Editar -> Editor de red virtual -> VMnet8 -> Configuración de NAT
Inserte la descripción de la imagen aquí
3. Confirme que la tarjeta de red VMnet8 se haya configurado con dirección IP y DNS (servidor de nombre de dominio)
Ver los pasos:
haga clic con el botón derecho en el icono de wifi en la esquina inferior derecha de la computadora -> abra la configuración de red e Internet -> Ethernet -> cambie las opciones del adaptador -> haga clic derecho después de encontrar VMnet8, y seleccione propiedades -> haga doble clic en Protocolo de Internet versión 4- -> Seleccione "Usar la siguiente dirección IP" (esencialmente incluso si la dirección IP de la tarjeta de red está configurada)
Inserte la descripción de la imagen aquí

Dos, copia la máquina virtual

Instale una máquina virtual primero, y luego copie algunas copias del archivo de esa máquina virtual, cambie el nombre del archivo para
ingresar el archivo, haga clic en el archivo con el formato llamado .vmx para abrir la máquina virtual y
preste atención a la asignación de memoria, con 16G Memoria, cree 3 máquinas virtuales como ejemplo, (16 -4) / 3 = 4

Tres, establezca una dirección IP estática para la máquina virtual

Utilice el siguiente comando para abrir el archivo de la tarjeta de red de la máquina virtual

vim /etc/sysconfig/network-scripts/ifcfg-ens33

El archivo configurado es el siguiente:
Inserte la descripción de la imagen aquí
A continuación, explicaré las partes agregadas y modificadas: El atributo
BOOTPROTO puede tener dos opciones: dhcp y static
1. dhcp significa que la dirección IP de centos7 se obtiene dinámicamente. La premisa de usar dhcp es asegurar el enrutador DHCP se ha activado
2. Estático significa que centos7 obtiene una dirección IP obteniendo estáticamente el atributo
ONBOOT . Centos7 está deshabilitado de forma predeterminada y debe cambiarse manualmente a para conectarse a la red. El atributo
IPADDR es la dirección IP utilizada para obtener la dirección IP estáticamente.
NETMASK es La máscara de subred
GATEWAY es la IP de la puerta de enlace. Esto se puede ver en el segundo elemento de las notas anteriores sobre cómo obtener
DNS1 como el primer servidor de nombres de dominio, esto puede ir a Baidu
DNS2 como el segundo servidor de nombres de dominio.

Cuarto, modifique el nombre de host correspondiente para cada máquina virtual.

Aquí hay algunas instrucciones que pueden usarse para manipular el nombre de host

hostname # 单独使用可以查看当前主机名
hostname 主机名 # 可以临时修改主机名
hostnamectl # 可以查看主机信息
hostnamectl set-hostname 主机名 # 可以永久修改主机名

Aquí configuro los nombres de host de mis tres máquinas virtuales como node01, node02 y node03 respectivamente (los siguientes comandos se ejecutan en tres máquinas virtuales diferentes)

hostnamectl set-hostname node01
hostnamectl set-hostname node02
hostnamectl set-hostname node03

Cinco, configurar la asignación de nombres de dominio e IP para cada máquina virtual

Utilice el siguiente comando para abrir el archivo / etc / hosts de archivos

vim /etc/hosts

Agregue la siguiente declaración en el archivo:

192.168.28.147 node01 node01.hadoop.com
192.168.28.148 node02 node02.hadoop.com
192.168.28.149 node03 node03.hadoop.com

Debajo de la declaración anterior para explicar: la columna corresponde a la declaración anterior es la dirección IP del host del nombre de host del dominio
no es el dominio no puede escribir

6. Apague el firewall y SELinux

Las instrucciones para apagar el firewall son las siguientes:

systemctl stop firewalld # 关闭防火墙,但这只是暂时的,一当开机重启后,防火墙会再次打开
systemctl disable firewalld # 永久关闭防火墙

El método para cerrar SELinux es el siguiente:

vim /etc/selinux/config
SELINUX=disabled # 关闭SELinux

Aquí hay una explicación de lo que es SELinux. El llamado SELinux es un subsistema de seguridad de Linux. La gestión de permisos de Linux es para archivos en lugar de procesos. Por lo tanto, si el usuario root inicia un proceso, el proceso puede operar cualquiera. El archivo, debido a que lo creó el usuario root, equivale a tener la autoridad del usuario root, lo que tendrá un alto riesgo de seguridad. Por lo tanto, usamos SELinux para aumentar la restricción en el proceso para que el proceso solo pueda estar en el rango permitido. recursos operativos dentro de
los siguientes tres para explicar el valor bajo SELinux, así como sus tres modos operativos:
1, hacer cumplir el modo obligatorio (si se opera en violación de las reglas de SELinux, se prohibirá dirigir la operación y el comportamiento del registro al registro in)
2, modo de tolerancia permisiva (si se opera en violación de las reglas de SELinux, no se detiene directamente, pero este comportamiento se registrará en el registro)
3, Desactivado apagar SELinux

Siete, configure el inicio de sesión sin contraseña de la máquina virtual

Esta operación se realiza para evitar el problema de ingresar una contraseña al iniciar otro nodo desde un nodo
. El principio de inicio de sesión SSH sin contraseña :
1. Primero, debe configurar la clave pública del
nodo A en el nodo B. 2. El nodo A solicita el nodo B Requiere inicio de sesión
3. El nodo B usa la clave pública del Nodo A para encriptar un texto aleatorio
4. El Nodo A usa la clave privada para desencriptarlo y lo envía de regreso al Nodo B
5. El Nodo B verifica si el texto es correcto.
A continuación, se explica cómo realizar el inicio de sesión sin contraseña de la máquina virtual Operación:
1. Utilice los siguientes comandos en los tres nodos para generar claves públicas y privadas en los tres nodos:

ssh-keygen -t rsa # 使用rsa加密算法生成公钥和私钥

2. Utilice el siguiente comando para copiar las claves públicas de los tres hosts a un host, aquí se usa el host node01:

ssh-copy-id node01

3. Realice las siguientes operaciones en el host que ha obtenido las claves públicas de los tres hosts para copiar la clave pública del primer host a varios otros hosts:

scp /root/.ssh/authorized_keys node02:/root/.ssh
scp /root/.ssh/authorized_keys node03:/root/.ssh

Tenga en cuenta que debido a que uso directamente el usuario raíz para construir el sistema de clúster, la generación de claves también se genera en el directorio raíz del usuario raíz. Todo .ssh se encuentra en /root/.ssh, si no el usuario raíz, La ruta donde se encuentra ssh debe ser /home/username/.ssh
4. Verifique si el archivo known_hosts se genera en el directorio .ssh de cada nodo Este es el archivo usado para guardar el host identificable 5. Use el nombre de host ssh . Inicio de sesión sin contraseña

Ocho, configure la sincronización del reloj

Esto es para evitar el caos de la aplicación que se ejecuta en los tres nodos debido al tiempo no sincronizado, lo que causará problemas impredecibles. Por ejemplo, cuando usamos HBase, si la diferencia de tiempo entre los nodos es demasiado grande, entonces Hará que HBase cuelgue. A continuación se explica cómo sincronizar el reloj:
1. Instale ntp

yum -y install ntp

2. Inicie la sincronización del reloj cronometrando las tareas.
Ejecute los siguientes comandos:

crontab -e

Después de que aparezca el cuadro de edición de vim, ingrese la siguiente declaración y guárdela para lograr la sincronización del reloj:

*/1 * * * * /usr/sbin/ntpdate ntp4.aliyun.com

Construcción de clústeres Hadoop

1. Descarga y descomprime Hadoop

Si no hay ningún archivo Hadoop, puede usar el siguiente comando para descargar el paquete comprimido de Hadoop:

wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.9.2/hadoop-2.9.2.tar.gz

Si hay un paquete comprimido para descargar Hadoop en Windows, puede usar el comando rz para cargar el paquete comprimido en centos7. La instalación de este comando es la siguiente:

yum -y install lrzsz # 安装 rz 命令
rz # 打开上传界面,进行文件从Windows到Linux的上传

El comando para descomprimir Hadoop es el siguiente:

tar -zxf hadoop-2.9.2.tar.gz -C /usr/local # 将Hadoop解压到 /usr/local 中

2. Descarga y descomprime el JDK

Si no hay un archivo JDK, puede ejecutar el siguiente comando para descargar en línea:

yum -y install java-1.8.0-openjdk*

Después de descargar el archivo, generalmente se almacena en / usr / lib / jvm . Si desea saber dónde se almacena el archivo después de descargarlo, puede usar el siguiente comando:

ls -l /etc/alternatives

Busque el enlace suave de java. La ubicación del archivo señalada por el enlace suave es la ubicación donde se almacena el archivo después de la descarga.
Si el archivo se carga mediante el comando rz , el archivo generalmente se descomprime en / usr / lib de la siguiente manera:

tar -zxf jdk-8u271-linux-x64.tar.gz -C /usr/lib

Tenga en cuenta que los dos paquetes jdk que utilicé para la demostración del código aquí son diferentes, los siguientes usan java-1.8.0-openjdk *

3. Configurar las variables de entorno del sistema

Utilice el siguiente comando para abrir el archivo de configuración de las variables de entorno del sistema:

vim /etc/profile

Agregue el siguiente contenido al final del archivo, puede escribir directamente G en el modo de comando para saltar directamente a la última línea (los siguientes comandos están escritos a mano y puede ingresar el incorrecto, pero este es generalmente el caso):

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-0.el7_8.x86_64
export PATH=$PATH:$JAVA_HOME/bin
export HADOOP_HOME=/usr/local/hadoop-2.9.2
export PATH=$PATH:$HADOOP_HOME/bin

Guarde y salga después de la entrada, use el siguiente comando para que el archivo sea efectivo:

. /etc/profile # 或者使用 source /etc/profile也行, . 是 source的缩写

Verifique si las variables de entorno de Hadoop están configuradas correctamente (la razón para configurar las variables de entorno de Hadoop es que puede ejecutar fácilmente el comando hadoop en cualquier directorio después de la configuración, sin ingresar al directorio de instalación de hadoop y usar ./ para ejecutar), escriba directamente hadoop El comando es suficiente y las siguientes condiciones indican que la configuración es exitosa:
Inserte la descripción de la imagen aquí

4. Configure las variables de entorno JAVA_HOME para los archivos Hadoop relacionados

Use el siguiente comando para ingresar al archivo hadoop

cd /usr/local/hadoop-2.9.2/etc/hadoop

Utilice vim para los tres archivos siguientes para agregar declaraciones al final del archivo

vim hadoop-env.sh
vim mapred-env.sh
vim yarn-env.sh

Declaraciones agregadas al final de cada archivo:

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-0.el7_8.x86_64

5. Configurar HDFS

Utilice vim para abrir el archivo core-site.xml (el archivo aún se encuentra en el directorio superior) y
agregue la siguiente declaración:

<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://node01:9000</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>file:/root/server/hadoop-2.9.2/tmp</value>
        </property>
</configuration>

Explique la declaración anterior:
1. fs.defaultFS : esta es la ruta de acceso predeterminada de HDFS y la dirección de acceso de NameNode
2. hadoop.tmp.dir : este es el directorio de almacenamiento de los archivos de datos de Hadoop. Si este parámetro no está configurado, Apuntará a / tmp de forma predeterminada , y el directorio / tmp se vaciará automáticamente después de reiniciar.
Use vim para modificar el archivo hdfs-site.xml y agregue el siguiente contenido:

<configuration>
        <property>
                <name>dfs.replication</name>
                <value>2</value>
        </property>
        <property><!--不用检查用户权限-->
                <name>dfs.permissions.enabled</name>
                <value>false</value>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:/root/server/hadoop-2.9.2/tmp/dfs/name</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:/root/server/hadoop-2.9.2/tmp/dfs/data</value>
        </property>
</configuration>

Para explicar la declaración anterior:
1. dfs.replication : el número de copias del archivo en el sistema HDFS
2. dfs.namenode.name.dir : la ubicación de almacenamiento de los datos del nodo NameNode en el sistema de archivos local
3. dfs.datanode.data. dir : la ubicación de almacenamiento de los datos del nodo DataNode en el sistema de archivos local
4. dfs.permissions.enabled : se utiliza para determinar si se deben verificar los permisos de usuario Abra el archivo esclavo
con vim y agregue el siguiente contenido (nombre de host):

node01
node02
node03

Tenga en cuenta que si usa la versión 3.x de Hadoop, modifique el archivo de trabajadores y agregue el mismo contenido

6. Configurar YARN

El archivo que se va a modificar todavía se encuentra en el directorio donde se encuentra el archivo anterior

Primero cambie el nombre del archivo mapred-site.xml.template a mapred-site.xml , y el método de cambio de nombre es el siguiente (Hadoop 3.x ha cambiado el nombre de forma predeterminada, por lo que no es necesario cambiarlo):

mv mapred-site.xml.template mapred-site.xml

Luego modifique el archivo y agregue la siguiente declaración:

<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
</configuration>

Explica el significado de la declaración. La declaración especifica el marco de ejecución de la tarea mapreduce como yarn.
Luego, abre el archivo yarn-site.xml y agrega el siguiente contenido:

<configuration>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
        <property>
        		<name>yarn.resourcemanager.address</name>
        		<value>node01:8032</value>
		</property>
</configuration>

Explique el contenido anterior:
1. yarn.nodemanager.aux-services : Este es un servicio auxiliar que se ejecuta en NodeMananger. Necesitamos configurarlo como mapreduce_shuffle . Solo de esta manera podemos ejecutar el programa MapReduce. En cuanto a por qué lo necesitamos, hablaremos de mapreduce más adelante. Se introducirá en el blog. YARN proporciona este elemento de configuración para extender servicios personalizados en NodeManager. La función Shuffle de MapReduce es un servicio extendido.
2, yarn.resourcemanager.address : Especifique el nodo y el puerto de acceso donde se encuentra ResourceManager. El valor predeterminado es 8032. Especifique aquí ResourceManager se ejecuta en el nodo01. Si no se agrega el contenido anterior, ResourceManager se iniciará en el nodo que ejecuta el comando YARN start (start-yarn.sh) de forma predeterminada.

7. Copie los archivos de instalación de Hadoop a otros hosts.

scp -r /usr/local/hadoop-2.9.2 node02:/usr/local/
scp -r /usr/local/hadoop-2.9.2 node03:/usr/local/

La copia directa puede reducir los problemas de configuración en los otros dos nodos

8. Formatee el NameNode

Antes de iniciar Hadoop, es necesario formatear el NameNode. El propósito es inicializar algunos directorios y archivos en el sistema de archivos HDFS. Ejecutamos los siguientes comandos en el nodo01 para formatear:

hadoop namenode -format

Una vez que el formateo sea exitoso, se generará el directorio /usr/local/hadoop-2.9.2/tmp/dfs/name/current , y se generará el archivo fsimage para almacenar la información de metadatos del sistema de archivos HDFS en este directorio.

9. Inicie Hadoop

Ejecute el siguiente comando en el nodo node01, inicie el clúster de Hadoop, comando /usr/local/hadoop-2.9.2/sbin en

./start-all.sh

Los siguientes son algunos de los resultados que se producirán
si no se realiza la configuración: 1. Si el nodo donde se encuentra SecondaryNameNode no está configurado, se iniciará en el nodo donde el comando de inicio de HDFS (start-dfs.sh) se ejecuta por defecto
2. Si el nodo donde se encuentra ResourceManager no está configurado, Se iniciará en el nodo donde se ejecuta el comando de inicio YARN (start-yarn.sh) de forma predeterminada; si el nodo donde se encuentra el ResourceManager, YARN debe iniciarse en el nodo configurado, de lo contrario se lanzará una excepción cuando se inicien otros nodos
3. NodeManager No se requiere configuración. Estará en el mismo nodo que el DataNode para obtener la ventaja local de datos cuando se ejecute la tarea. Es decir, el nodo con el DataNode tendrá el NodeManager.
Encontré un problema al iniciar Hadoop 3.x, es decir, apareció al iniciar Hadoop. Se informa del siguiente error:

ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.

Escribiré la solución a continuación por el momento. Ya que no he descubierto la fuente específica, no está muy detallada por el momento. La dejaré en el próximo blog.
Modifique los siguientes cuatro archivos
1. Para start-dfs.sh y stop-dfs.sh Archivo, agregue el siguiente código a la línea anterior del primer código sin comentarios:

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

2. Para los archivos start-yarn.sh y stop-yarn.sh , agregue el siguiente código a la línea anterior del primer código sin comentarios:

YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

Después de re ./start-all.sh a

10. Ver el proceso iniciado por cada nodo

[root@node01 sbin]# jps
15088 NodeManager
14786 SecondaryNameNode
1987 QuorumPeerMain
14617 DataNode
14941 ResourceManager
15374 Jps
14479 NameNode

[root@node02 ~]# jps
15697 QuorumPeerMain
20611 Jps
20360 DataNode
20475 NodeManager

[root@node03 ~]# jps
20548 DataNode
20663 NodeManager
20793 Jps
15789 QuorumPeerMain

Tenga en cuenta que si DataNode no aparece en jps, puede deberse a que después de usar hadoop namenode -format nuevamente , no eliminamos los datos en /usr/local/hadoop-2.9.2/tmp/dfs/data/current , y cada nodo Todo dentro

Supongo que te gusta

Origin blog.csdn.net/myWarren/article/details/109278438
Recomendado
Clasificación