Planificación de la implementación del clúster
Aviso:
NameNode y SecondaryNameNode no deben instalarse en el mismo servidor
ResourceManager también consume mucha memoria. No lo configure en la misma máquina que NameNode y SecondaryNameNode.
|
hadoop102 |
hadoop103 |
hadoop104 |
HDFS
|
NodoNombre nodo de datos |
nodo de datos |
Nodo de nombre secundario nodo de datos |
HILO |
Administrador de nodos |
Administrador de recursos Administrador de nodos |
Administrador de nodos |
Descripción del archivo de configuración
Hay dos tipos de archivos de configuración de Hadoop: archivos de configuración predeterminados y archivos de configuración personalizados Solo cuando los usuarios desean modificar un valor de configuración predeterminado, deben modificar el archivo de configuración personalizado y cambiar el valor del atributo correspondiente.
2.1 Archivo de configuración predeterminado
archivo predeterminado para buscar |
La ubicación donde se almacena el archivo en el paquete jar de Hadoop |
[core-default.xml] |
hadoop-common-3.1.3.jar/core-default.xml |
[hdfs-predeterminado.xml] |
hadoop-hdfs-3.1.3.jar/hdfs-default.xml |
[hilo-predeterminado.xml] |
hadoop-hilo-común-3.1.3.jar/hilo-default.xml |
[mapred-default.xml] |
hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml |
2.2 Archivos de configuración personalizados
Los cuatro archivos de configuración core-site.xml, hdfs-site.xml, yarn-site.xml y mapred-site.xml se almacenan en la ruta $HADOOP_HOME/etc/hadoop y los usuarios pueden volver a modificar la configuración de acuerdo con requerimientos del proyecto.
3. Configurar el clúster
3.1 Archivo de configuración principal
3.1.1 Configurar core-site.xml
[atguigu@hadoop102 ~]$ cd $HADOOP_HOME/etc/hadoop
[atguigu@hadoop102 hadoop]$ vim core-site.xml
El contenido del archivo es el siguiente:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property>
<!-- 指定hadoop数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置HDFS网页登录使用的静态用户为atguigu -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>atguigu</value>
</property>
</configuration>
3.1.2 Configurar hdfs-site.xml [archivo de configuración HDFS]
[atguigu@hadoop102 ~]$ cd $HADOOP_HOME/etc/hadoop
[atguigu@hadoop102 hadoop]$ vim hdfs-site.xml
El contenido del archivo es el siguiente:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- nn web端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop102:9870</value>
</property>
<!-- 2nn web端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
</configuration>
3.1.3 Configurar yarn-site.xml [archivo de configuración YARN]
[atguigu@hadoop102 ~]$ cd $HADOOP_HOME/etc/hadoop
[atguigu@hadoop102 hadoop]$ vim yarn-site.xml
El contenido del archivo es el siguiente:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定MR走shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</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_MAPRED_HOME</value>
</property>
</configuration>
3.1.4 Configurar mapred-site.xml [archivo de configuración de MapReduce]
[atguigu@hadoop102 ~]$ cd $HADOOP_HOME/etc/hadoop
[atguigu@hadoop102 hadoop]$ vim mapred-site.xml
El contenido del archivo es el siguiente:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定MapReduce程序运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
3.1.5 Distribuir los archivos de configuración de Hadoop configurados en el clúster
[atguigu@hadoop102 ~]$ xsync /opt/module/hadoop-3.1.3/etc/hadoop/
# 去103和104上查看文件分发情况
[atguigu@hadoop103 ~]$ cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
[atguigu@hadoop104 ~]$ cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
3.2 Agrupándose juntos
3.2.1 Configuración de trabajadores
[atguigu@hadoop102 hadoop]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
Agregue lo siguiente a este archivo:
hadoop102
hadoop103
hadoop104
Nota: no se permiten espacios al final del contenido agregado en este archivo, y no se permiten líneas en blanco en el archivo.
Sincronice todos los archivos de configuración de nodos:
[atguigu@hadoop102 hadoop]$ xsync /opt/module/hadoop-3.1.3/etc
3.2.2 Iniciar el clúster
(1) Formatee el NameNode.
Si el clúster se inicia por primera vez , debe formatear NameNode en el nodo hadoop102 (Nota: formatear NameNode generará una nueva ID de clúster, lo que resultará en ID de clúster inconsistentes entre NameNode y DataNode, y el clúster no puede encontrar el Si el clúster se está ejecutando Si necesita volver a formatear el NameNode, primero debe detener los procesos de namenode y datanode, y eliminar los directorios de datos y registros de todas las máquinas antes de formatear).
[atguigu@hadoop102 hadoop-3.1.3]$ hdfs namenode -format
(2) Iniciar HDFS
[atguigu@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh
(3) Iniciar HILO
Inicie YARN en el nodo (hadoop103) configurado con ResourceManager
[atguigu@hadoop102 hadoop-3.1.3]$ sbin/start-yarn.sh
3.2.3 Resumen de los métodos de inicio/detención del clúster
(1) Cada módulo se inicia/detiene por separado (la configuración de ssh es un requisito previo) de uso común
Inicio/detención general de HDFS
start-dfs.sh/stop-dfs.sh
Inicio/parada general HILO
start-yarn.sh/stop-yarn.sh
(2) Cada componente de servicio se inicia/detiene uno por uno
Iniciar/detener componentes HDFS individualmente
hdfs --daemon start/stop namenode/datanode/secondarynamenode
iniciar/detener HILO
yarn --daemon start/stop resourcemanager/nodemanager
3.3 Escribir scripts comunes para clústeres de Hadoop
3.3.1 Secuencia de comandos de inicio y apagado del clúster de Hadoop (incluidos HDFS, Yarn, Historyserver): myhadoop.sh
[atguigu@hadoop102 ~]$ cd /home/atguigu/bin
[atguigu@hadoop102 bin]$ vim myhadoop.sh
Introduzca la siguiente:
#!/bin/bash
if [ $# -lt 1 ]
then
echo "No Args Input..."
exit ;
fi
case $1 in
"start")
echo " ======启动 hadoop集群 ======="
echo " --------------- 启动 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
echo " --------------- 启动 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
;;
"stop")
echo " ==========关闭 hadoop集群 ========="
echo " --------------- 关闭 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
echo " --------------- 关闭 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
esac
Guarde y salga, luego otorgue el permiso de ejecución del script
[atguigu@hadoop102 bin]$ chmod +x myhadoop.sh
3.3.2 Ver los scripts de proceso Java de los tres servidores: jpsall
[atguigu@hadoop102 ~]$ cd /home/atguigu/bin
[atguigu@hadoop102 bin]$ vim jpsall
Introduzca la siguiente:
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo =============== $host ===============
ssh $host jps
done
Guarde y salga, luego otorgue el permiso de ejecución del script
[atguigu@hadoop102 bin]$ chmod +x jpsall
Distribuya el directorio /home/atguigu/bin para asegurarse de que el script personalizado se pueda usar en las tres máquinas.
[atguigu@hadoop102 ~]$ xsync /home/atguigu/bin/
3.4 URL comunes
(1) Ver el NameNode de HDFS en el lado web
①Ingrese en el navegador: http://hadoop102:9870
② Ver la información de datos almacenada en HDFS
(2) Ver el ResourceManager de YARN en el lado web
①Ingrese en el navegador: http://hadoop103:8088
② Verifique la información del trabajo que se ejecuta en YARN
3.3 Configurar servidor de historial
Para ver el funcionamiento histórico del programa, debe configurar el servidor de historial. Los pasos de configuración específicos son los siguientes:
1) Configurar mapred-sitio.xml
[atguigu@hadoop102 ~]$ cd $HADOOP_HOME/etc/hadoop
[atguigu@hadoop102 hadoop]$ vim mapred-site.xml
Agregue la siguiente configuración a este archivo:
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
2) Configuración de distribución
[atguigu@hadoop102 hadoop]$ xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml
3) Inicie el servidor de historial en hadoop102
[atguigu@hadoop102 hadoop]$ mapred --daemon start historyserver
4) Verifique si el servidor de historial está iniciado
[atguigu@hadoop102 hadoop]$ jps
5) Ver historial de trabajos
http://hadoop102:19888/historialtrabajo
3.4 Configurar la agregación de registros
Concepto de agregación de registros: después de que se ejecuta la aplicación, la información de registro que ejecuta el programa se carga en el sistema HDFS.
Beneficios de la función de agregación de registros: es conveniente ver los detalles de la operación del programa, lo cual es conveniente para el desarrollo y la depuración.
Nota: Para habilitar la función de agregación de registros, es necesario reiniciar NodeManager, ResourceManager e HistoryServer.
Los pasos específicos para habilitar la función de agregación de registros son los siguientes:
1) Configurar hilo-sitio.xml
[atguigu@hadoop102 ~]$ cd $HADOOP_HOME/etc/hadoop
[atguigu@hadoop102 hadoop]$ vim yarn-site.xml
Agregue la siguiente configuración a este archivo:
<!-- 开启日志聚集功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop102:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
2) Configuración de distribución
[atguigu@hadoop102 hadoop]$ xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml
3) Cierre NodeManager, ResourceManager e HistoryServer
[atguigu@hadoop103 hadoop-3.1.3]$ sbin/stop-yarn.sh
[atguigu@hadoop102 hadoop-3.1.3]$ mapred --daemon stophistoryserver
4) Inicie NodeManager, ResourceManage e HistoryServer
[atguigu@hadoop103 ~]$ start-yarn.sh
[atguigu@hadoop102 ~]$mapred --daemon start historyserver
5) Ver registros
Lista de tareas históricas en la dirección del servidor histórico
http://hadoop102:19888/historialtrabajo
3.5 Descripción de los números de puerto comunes
nombre del puerto |
Hadoop2.x |
Hadoop3.x |
Puerto de comunicación interno de NameNode |
8020 / 9000 |
8020/9000/9820 |
Interfaz de usuario HTTP de NameNode |
50070 |
9870 |
MapReduce ver puerto de tareas de ejecución |
8088 |
8088 |
Puerto de comunicación del servidor de historial |
19888 |
19888 |
3.6 Sincronización de tiempo de clúster
如果服务器在公网环境(能连接外网),可以不采用集群时间同步,因为服务器会定期和公网时间进行校准;
如果服务器在内网环境,必须要配置集群时间同步,否则时间久了,会产生时间偏差,导致集群执行任务时间不同步。
1)需求
找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,生产环境根据任务对时间的准确程度要求周期同步。测试环境为了尽快看到效果,采用1分钟同步一次。
2)时间服务器配置(必须root用户)
(1)查看hadoop102服务状态和开机自启动状态(如果开着就关掉)
[atguigu@hadoop102 ~]$ sudo systemctl status ntpd
[atguigu@hadoop102 ~]$ sudo systemctl is-enabled ntpd
# 关闭
[atguigu@hadoop102 ~]$ sudo systemctl disabled ntpd
(2)修改hadoop102的ntp.conf配置文件
[atguigu@hadoop102 ~]$ sudo vim /etc/ntp.conf
修改内容如下:
①修改1(授权192.168.10.0-192.168.10.255网段上的所有机器可以从这台机器上查询和同步时间)
#restrict192.168.1.0 mask 255.255.255.0 nomodify notrap
====> 将上面的注释去掉(并将192.168.1.0改成192.168.10.0)
restrict 192.168.10.0 mask255.255.255.0 nomodify notrap
②修改2(集群在局域网中,不使用其他互联网上的时间)
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
====> 给上面的内容添加注释
#server0.centos.pool.ntp.org iburst
#server1.centos.pool.ntp.org iburst
#server2.centos.pool.ntp.org iburst
#server3.centos.pool.ntp.org iburst
③添加3(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步)
server 127.127.1.0
fudge 127.127.1.0 stratum 10
(3)修改hadoop102的/etc/sysconfig/ntpd 文件
[atguigu@hadoop102 ~]$ sudo vim /etc/sysconfig/ntpd
增加内容如下(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes
(4)重新启动ntpd服务
[atguigu@hadoop102 ~]$ sudo systemctl start ntpd
(5)设置ntpd服务开机启动
[atguigu@hadoop102 ~]$ sudo systemctl enable ntpd
3)其他机器配置(必须root用户)
(1)关闭所有节点上ntp服务和自启动
[root@hadoop103 ~]$ systemctl stop ntpd
[root@hadoop103 ~]$ systemctl disable ntpd
[root@hadoop104 ~]$ systemctl stop ntpd
[root@hadoop104 ~]$ systemctl disable ntpd
(2)在其他机器配置1分钟与时间服务器同步一次
[root@hadoop103 ~]$ sudo crontab -e
编写定时任务如下:
*/1 * * * * /usr/sbin/ntpdate hadoop102
(3)修改任意机器时间
[root@hadoop103 ~]$ date -s "2021-9-1111:11:11"
(4)1分钟后查看机器是否与时间服务器同步
[root@hadoop103 ~]$ date
4. Hadoop常用网址
Web端查看HDFS的NameNode:
查看HDFS上存储的数据信息
Web端查看YARN的ResourceManager
查看YARN上运行的Job信息
查看JobHistory