Este documento describe cómo construir un clúster de hadoop completamente distribuido con un nodo maestro y dos nodos de datos.
Directorio rápido
Entorno de configuración
1. Entorno del sistema
Esta vez, el servidor de nodo está configurado como tres servidores ubuntu locales 18.04, la captura de pantalla de configuración de la máquina virtual es la siguiente:
la ip de las tres máquinas es la siguiente:
- 192.168.1.113
- 192.168.1.114
- 192.168.1.115
2. Instale el entorno java
apt install openjdk-8-jdk-headless
Configure las variables de entorno JAVA, agregue el siguiente contenido al final del archivo .profile en el directorio raíz del usuario actual:
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
Nota: El directorio raíz del usuario actual se encuentra en el directorio / home / su nombre de usuario. Si no ve el archivo .profile, vaya directamente a vim. De hecho, la dirección del archivo real de este archivo se encuentra en el directorio etc. No lo analizaremos aquí.
Utilice el comando de origen para que sea efectivo de inmediato
source .profile
Puede utilizar el siguiente comando para probar si la configuración es correcta
echo $JAVA_HOME
3. Configurar host
vim /etc/hosts
Agregue el siguiente contenido, de acuerdo con la configuración de IP del servidor personal
# 注意每个机器都要配置三个
192.168.1.113 master
192.168.1.114 slave1
192.168.1.115 slave2
4. Configure el inicio de sesión sin contraseña
Clave de producción
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
El maestro inicia sesión en el esclavo sin contraseña
# 分别对应添加另外两个节点的就行
ssh-copy-id -i ~/.ssh/id_rsa.pub master
ssh-copy-id -i ~/.ssh/id_rsa.pub slave1
ssh-copy-id -i ~/.ssh/id_rsa.pub slave2
Pruebe el inicio de sesión sin contraseña
ssh master
ssh slave1
ssh slave2
Construcción del nodo Hadoop
1. Descargue el paquete de instalación y cree un directorio de Hadoop
Configure el nodo maestro primero
#下载
wget http://apache.claz.org/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz
#解压到 /usr/local 目录
sudo tar -xzvf hadoop-3.2.1.tar.gz -C /usr/local
#重命名文件夹
cd /usr/local/
sudo mv hadoop-3.2.1 hadoop
La mejor manera de descargarlo es descargarlo directamente con Thunder y luego usar winscp para cargarlo. Esto es más rápido, pero wget es realmente lento.
2. Configure las variables de entorno de Hadoop del nodo principal.
Al igual que configurar variables de entorno JDK, edite .profile
archivos en el directorio de usuario y agregue variables de entorno de Hadoop:
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
Copie el código y ejecute source.profile para un efecto inmediato
3. Configure el archivo de configuración de Hadoop del nodo principal
Varios componentes de Hadoop se configuran con el archivo XML, los archivos de configuración se colocan en el /usr/local/hadoop/etc/hadoop
directorio:
- core-site.xml: configure propiedades comunes, como la configuración de E / S comúnmente utilizada por HDFS y MapReduce, etc.
- hdfs-site.xml: configuración del demonio de Hadoop, incluido namenode, namenode auxiliar y datanode, etc.
- mapred-site.xml: configuración del demonio MapReduce
- yarn-site.xml: configuración relacionada con la programación de recursos
Nota: La sangría es problemática al copiar vim, se recomienda usar el editor de winscp para copiar y pegar
a. Edite el archivo core-site.xml y modifique el contenido de la siguiente manera:
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
Copiar la descripción del parámetro del código:
- fs.defaultFS: el sistema de archivos predeterminado. Los clientes HDFS necesitan este parámetro para acceder a HDFS
- hadoop.tmp.dir: especifica el directorio temporal para el almacenamiento de datos de Hadoop. Otros directorios se basarán en esta ruta. Se recomienda configurarlo en un lugar con suficiente espacio en lugar del predeterminado / tmp
Si el parámetro hadoop.tmp.dir no está configurado, el sistema usa el directorio temporal predeterminado: / tmp / hadoo-hadoop. Este directorio se eliminará después de cada reinicio y el formateo se debe ejecutar nuevamente, de lo contrario se producirá un error.
b. Edite hdfs-site.xml y modifique el contenido de la siguiente manera:
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/usr/local/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/usr/local/hadoop/hdfs/data</value>
</property>
</configuration>
Copiar la descripción del parámetro del código:
- dfs.replication: el número de copias del bloque de datos
- dfs.name.dir: especifique el directorio de almacenamiento de archivos del nodo namenode
- dfs.data.dir: especifique el directorio de almacenamiento de archivos del nodo de datos
c. Edite mapred-site.xml y modifique el contenido de la siguiente manera:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_HOME/share/hadoop/mapreduce/*:$HADOOP_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
</configuration>
Copie el código d. Edite yarn-site.xml y modifique el contenido de la siguiente manera:
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME</value>
</property>
</configuration>
Copiar el código e. Editar trabajadores, modificar el contenido de la siguiente manera:
slave1
slave2
5. Configuración de los otros dos nodos esclavos
Empaquete el Hadoop configurado del nodo maestro y envíelo a los otros dos nodos:
#打包hadoop包
tar -cxf hadoop.tar.gz /usr/local/hadoop
Cabe señalar aquí que Spark se reemplaza con su nombre de usuario
scp ./hadoop.tar.gz spark@slave1:~
scp ./hadoop.tar.gz spark@slave2:~
Copie el código para presurizar el paquete Hadoop en otros nodos al directorio / usr / local
sudo tar -xzvf hadoop.tar.gz -C /usr/local/
Copie el código para configurar las variables de entorno de Hadoop de los nodos Slave1 y Slaver2:
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
Hacer que las variables de entorno surtan efecto
source .profile
6. Configuración complementaria
Modifique los tres nodos /usr/local/hadoop/etc/hadoop/hadoop-env.sh
, agregue las siguientes variables de entorno JAVA
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
Asignar 777 a todos los archivos
# /usr/local
chmod -R 777 ./hadoop/
En la ruta / hadoop / sbin:
agregue los siguientes parámetros en la parte superior de los archivos start-dfs.sh y stop-dfs.sh
#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
Además, start-yarn.sh y stop-yarn.sh también deben agregar lo siguiente en la parte superior:
#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
Iniciar el clúster
1. Formatee el sistema de archivos HDFS
Ingrese al directorio Hadoop del nodo maestro y realice las siguientes operaciones:
bin/hadoop namenode -format
2. Inicie el clúster
# /usr/local/hadoop/sbin
start-all.sh
Visualización, simplemente reemplace la ip del nodo maestro
http://192.168.1.113:9870/
http://192.168.1.113:8088/