1. Información básica
Sitio web oficial http://hadoop.apache.org/
Inicio rápido http://hadoop.apache.org/docs/r1.0.4/cn/quickstart.html
Documentación en línea http://tool.oschina.net/apidocs/apidoc?api=hadoop
Tutorial de Yibai https://www.yiibai.com/hadoop/
Tutorial de W3Cschool https://www.w3cschool.cn/hadoop/?
2. Descripción del entorno y las herramientas
1. Sistema operativo Centos7.4 x64 Mínimo 1708
Instale 5 máquinas virtuales
NameNode: 2 juegos de memoria 2G, CPU de 1 núcleo
DataNode: 3 juegos de memoria 2G, CPU de 1 núcleo
2. Versión de JDK: jdk1.8
3. Herramientas: xshell5
4. Versión de VMware: VMware Workstation Pro15
5 、 Hadoop: 3.2.0
6 、 Guardián del zoológico: 3.4.5
3. Instalación y despliegue (preparación del entorno básico)
1. Instalación de máquina virtual (instale 5 máquinas virtuales)
Referencia https://blog.csdn.net/llwy1428/article/details/89328381
2. Cada máquina virtual está conectada a Internet (se deben configurar 5 nodos con tarjetas de red)
La configuración de la tarjeta de red puede referirse a:
https://blog.csdn.net/llwy1428/article/details/85058028
3. Modifique el nombre del host (5 nodos necesitan modificar el nombre del host)
Edite el nombre de host de cada nodo del clúster (tome el primer nodo node1.cn como ejemplo)
[root@localhost~]# hostnamectl set-hostname node1.cn
node1.cn
node2.cn
node3.cn
node4.cn
node5.cn
4. Construcción del entorno JDK8 (es necesario construir 5 nodos)
Consulte https://blog.csdn.net/llwy1428/article/details/85232267
5. Configure el firewall (se deben operar 5 nodos)
Apague el firewall y configure el inicio para prohibir el inicio
关闭防火墙 : systemctl stop firewalld
查看状态 : systemctl status firewalld
开机禁用 : systemctl disable firewalld
6. Configurar IP estática
Tome el nodo node1.cn como ejemplo (se omiten otros nodos):
[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
Nota: el cuadro rojo es la parte modificada y agregada
Puede referirse a: https://blog.csdn.net/llwy1428/article/details/85058028
7. Configure el archivo de hosts
Tome el nodo node1.cn como ejemplo:
[root@node1 ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.11.131 node1.cn
192.168.11.132 node2.cn
192.168.11.133 node3.cn
192.168.11.134 node4.cn
192.168.11.135 node5.cn
8. Instale las herramientas básicas
[root@node1 ~]# yum install -y vim wget lrzsz tree zip unzip net-tools ntp
[root@node1 ~]# yum update -y (可选)
(Dependiendo de su propia situación de red, es posible que deba esperar unos minutos)
9. Configure el inicio de sesión sin contraseña entre nodos
Los pasos específicos se refieren a:
https://blog.csdn.net/llwy1428/article/details/85911160
https://blog.csdn.net/llwy1428/article/details/85641999
10. Modifique la cantidad de archivos de sistema abiertos en cada nodo del clúster.
Tome el nodo node1.cn como ejemplo:
[root@node1 ~]# vim /etc/security/limits.conf
referencia
https://blog.csdn.net/llwy1428/article/details/89389191
11. Configuración de sincronización de tiempo de cada nodo en el clúster.
Este artículo se basa en el servidor de tiempo Aliyun, la dirección del servidor de tiempo Aliyun: ntp6.aliyun.com
Nota: Si hay un servidor de hora dedicado, cambie el nombre de host o la dirección IP del servidor de hora. El nombre de host debe asignarse en el archivo etc / hosts.
Tome node1.cn como ejemplo:
Establezca la zona horaria del sistema en el distrito de Dongba (zona horaria de Shanghai)
[root@node1 ~]# timedatectl set-timezone Asia/Shanghai
Cerrar servicio ntpd
[root@node1 ~]# systemctl stop ntpd.service
Configurar el servicio ntpd para prohibir el inicio
[root@node1 ~]# systemctl disable ntpd
Configurar una tarea programada
[root@node1 ~]# crontab -e
Escriba lo siguiente (sincronice con el servidor de tiempo de Alibaba Cloud cada 10 minutos):
0-59/10 * * * * /usr/sbin/ntpdate ntp6.aliyun.com
Reinicie el servicio de tareas programadas
[root@node1 ~]# /bin/systemctl restart crond.service
Establecer tareas cronometradas para iniciar
[root@node1 ~]# vim /etc/rc.local
Después de agregar el siguiente contenido, guarde y salga: wq
/bin/systemctl start crond.service
Todos los demás nodos del clúster son los mismos que node1.cn.
Referencia https://blog.csdn.net/llwy1428/article/details/89330330
12. Deshabilite SELinux en cada nodo del clúster.
Tome node1.cn como ejemplo:
[root@node1 ~]# vim /etc/selinux/config
Después de modificar el siguiente contenido, guarde y salga: wq
Todos los demás nodos del clúster son los mismos que node1.cn.
13. Deshabilite las páginas gigantes transparentes en cada nodo del clúster.
Referencia https://blog.csdn.net/llwy1428/article/details/89387744
14. Configure el entorno del sistema como UTF8
Tome node1.cn como ejemplo:
[root@node1 ~]# echo "export LANG=zh_CN.UTF-8 " >> ~/.bashrc
[root@node1 ~]# source ~/.bashrc
Todos los demás nodos del clúster son los mismos que node1.cn.
15, instale la base de datos
Nota: MariaDb (Mysql) se instala para proporcionar soporte de metadatos para Hive, Spark, Oozie, Superset, etc. Si no usa estas herramientas, no necesita instalar la base de datos Mysql.
El proceso de instalación de MariaDb (Mysql) puede referirse a:
https://blog.csdn.net/llwy1428/article/details/84965680
https://blog.csdn.net/llwy1428/article/details/85255621
Cuarto, instale e implemente el clúster de Hadoop (modo HA)
(Nota: durante la construcción y operación del clúster, asegúrese de que la hora de todos los nodos del clúster esté sincronizada)
1. Cree un directorio, cargue archivos,
Nota: Primero configure la información básica en node1.cn, luego distribuya los archivos configurados a cada nodo y luego realice la configuración adicional
Cree un directorio / opt / cluster / en cada nodo
Tome node1.cn como ejemplo:
[root@node1 ~]# mkdir /opt/cluster
2. Descarga de archivos (carga de archivos), descompresión
Descargar
[root@node1 opt]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.2.0/hadoop-3.2.0.tar.gz
o
Descargue el archivo manualmente: hadoop-3.2.0.tar.gz
Cargue el archivo descargado hadoop-3.2.0.tar.gz en la ruta / opt / cluster y descomprima hadoop-3.2.0.tar.gz
Ingrese al directorio / opt / cluster
descomprimir archivos
[root@node1 cluster]# tar zxvf hadoop-3.2.0.tar.gz
Ver estructura de directorio
3. Cree varios directorios en hadoop
[root@node1 ~]# mkdir /opt/cluster/hadoop-3.2.0/hdfs
[root@node1 ~]# mkdir /opt/cluster/hadoop-3.2.0/hdfs/tmp
[root@node1 ~]# mkdir /opt/cluster/hadoop-3.2.0/hdfs/name
[root@node1 ~]# mkdir /opt/cluster/hadoop-3.2.0/hdfs/data
[root@node1 ~]# mkdir /opt/cluster/hadoop-3.2.0/hdfs/journaldata
4. Configure las variables de entorno de hadoop (agregue la información de la variable de entorno de Hadoop)
[root@node1 ~]# vim /etc/profile
在最后追加如下信息
export HADOOP_HOME="/opt/cluster/hadoop-3.2.0"
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
Guardar y salir: wq
Hacer efectivo el archivo de configuración
[root@node1 ~]# source /etc/profile
Ver versión
5. Configure hadoop-env.sh
[root@node1 ~]# vim /opt/cluster/hadoop-3.2.0/etc/hadoop/hadoop-env.sh
Agrega el siguiente contenido
export JAVA_HOME=/opt/utils/jdk1.8.0_191
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_JOURNALNODE_USER=root
export HDFS_ZKFC_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
5, ubicación core-site.xml
[root@node1 ~]# vim /opt/cluster/hadoop-3.2.0/etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://cluster</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/cluster/hadoop-3.2.0/hdfs/tmp</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>node3.cn:2181,node4.cn:2181,node5.cn:2181</value>
</property>
</configuration>
6. Edite el archivo hdfs-site.xml.
[root@node1 ~]# vim /opt/cluster/hadoop-3.2.0/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.nameservices</name>
<value>cluster</value>
</property>
<property>
<name>dfs.ha.namenodes.cluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.rpc-address.cluster.nn1</name>
<value>node1.cn:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.cluster.nn2</name>
<value>node2.cn:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.cluster.nn1</name>
<value>node1.cn:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.cluster.nn2</name>
<value>node2.cn:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node3.cn:8485;node4.cn:8485;node5.cn:8485/cluster</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/cluster/hadoop-3.2.0/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/cluster/hadoop-3.2.0/hdfs/data</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/cluster/hadoop-3.2.0/hdfs/edits</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/cluster/hadoop-3.2.0/hdfs/journaldata</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.cluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>shell(/bin/true)</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.namenode.datanode.registration.ip-hostname-check</name>
<value>false</value>
</property>
</configuration>
7. Edite el archivo mapred-site.xml.
[root@node1 ~]# vim /opt/cluster/hadoop-3.2.0/etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/opt/cluster/hadoop-3.2.0</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/opt/cluster/hadoop-3.2.0</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/opt/cluster/hadoop-3.2.0</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>node1.cn:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>node1.cn:19888</value>
</property>
</configuration>
8. Edite el archivo yarn-site.xml.
[root@node1 ~]# vim /opt/cluster/hadoop-3.2.0/etc/hadoop/yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>cluster-yarn</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>node1.cn</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>node2.cn</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>node1.cn:8088</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>node2.cn:8088</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>node3.cn:2181,node4.cn:2181,node5.cn:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property> <property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>106800</value>
</property>
</configuration>
9. Trabajadores del archivo de configuración
[root@node1 ~]# vim /opt/cluster/hadoop-3.2.0/etc/hadoop/workers
node3.cn
node4.cn
node5.cn
10. Distribuya todo el directorio hadoop-3.2.0 a cada nodo
[root@node1 ~]# scp -r /opt/cluster/hadoop-3.2.0 node2.cn:/opt/cluster/
[root@node1 ~]# scp -r /opt/cluster/hadoop-3.2.0 node3.cn:/opt/cluster/
[root@node1 ~]# scp -r /opt/cluster/hadoop-3.2.0 node4.cn:/opt/cluster/
[root@node1 ~]# scp -r /opt/cluster/hadoop-3.2.0 node5.cn:/opt/cluster/
11. Configurar e iniciar zookeeper
referencia
https://hunter.blog.csdn.net/article/details/96651537
https://hunter.blog.csdn.net/ article / details / 85937442
12. Los tres nodos especificados inician journalnode
(Aquí elijo node3.cn, node4.cn, node5.cn como journalnode)
[root@node3 ~]# hdfs --daemon start journalnode
[root@node4 ~]# hdfs --daemon start journalnode
[root@node5 ~]# hdfs --daemon start journalnode
13. Formatee el nodo de nombre en node1.cn
[root@node1 ~]# hdfs namenode -format
14. Inicie namenode en node1.cn
[root@node1 ~]# hdfs --daemon start namenode
15. Sincronice la información de namenode formateada correctamente en node1.cn en node2.cn
[root@node2 ~]# hdfs namenode -bootstrapStandby
16. Inicie namenode en node2.cn
[root@node2 ~]# hdfs --daemon start namenode
Ver
17, cierra el servicio
(1) Cierre el nodo de nombre en node1.cn y node2.cn
[root@node1 ~]# hdfs --daemon stop namenode
[root@node2 ~]# hdfs --daemon stop namenode
(2) Cierre JournalNode en node3.cn, node4.cn, node5.cn
[root@node3 ~]# hdfs --daemon stop journalnode
[root@node4 ~]# hdfs --daemon stop journalnode
[root@node5 ~]# hdfs --daemon stop journalnode
18. Formatear ZKFC
Primero inicie zookeeper en node3.cn, node4.cn, node5.cn
Referencia https://blog.csdn.net/llwy1428/article/details/85937442
Después de iniciar zookeeper, ejecute en node1.cn:
[root@node1 ~]# hdfs zkfc -formatZK
19. Inicie los servicios de hilo y hdfs
[root@node1 ~]# /opt/cluster/hadoop-3.2.0/sbin/start-dfs.sh
[root@node1 ~]# /opt/cluster/hadoop-3.2.0/sbin/start-yarn.sh
20. Verifique el estado de inicio del servicio de cada nodo.
Hasta ahora, Centos 7.4 construye un clúster de Hadoop (HA) y la operación está completa.
Cinco operaciones básicas de shell
(1) Cree un directorio en hdfs
[root@node1 ~]# hdfs dfs -mkdir /hadoop
[root@node1 ~]# hdfs dfs -mkdir /hdfs
[root@node1 ~]# hdfs dfs -mkdir /tmp
(2) Ver el catálogo
[root@node2 ~]# hdfs dfs -ls /
(3) Cargar archivos
Por ejemplo: cree un archivo test.txt en el directorio / opt y escriba algunas palabras (el proceso se omite)
[root@node3 ~]# hdfs dfs -put /opt/test.txt /hadoop
Ver archivos cargados
[root@node4 ~]# hdfs dfs -ls /hadoop
[root@node4 ~]# hdfs dfs -cat /hadoop/test.txt
(4) Eliminar archivos
[root@node5 ~]# hdfs dfs -rm /hadoop/test.txt
Deleted /hadoop/test.txt
6. Ver las páginas de la interfaz de usuario de algunos servicios en el navegador.
1. Ver la información de hdfs
Compruebe la ip de node1.cn y node2.cn respectivamente
Otras páginas: omitidas.
2. Ver información de ResourceManager
entrar
http: // ip de node1.cn : 8088
o
http: // ip de node2.cn : 8088
Otras páginas: omitidas.
Siete, ejecuta mapreduce wordcount
Tome el test.txt anterior como ejemplo
[root@node5 ~]# /opt/cluster/hadoop-3.2.0/bin/yarn jar /opt/cluster/hadoop-3.2.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.0.jar wordcount /hadoop /hadoop/output
Ver el resultado de la ejecución en el navegador
Resultado de la ejecución en ResourceManager
Ver resultados de ejecución
[root@node5 ~]# hdfs dfs -cat /hadoop/output/part-r-00000