Construcción de clúster Hadoop Construcción de clúster distribuido Hadoop

1. Introducción

    En Hadoop 2.0, los datos de dos NameNodes se comparten en tiempo real. El nuevo HDFS utiliza un mecanismo para compartir, el clúster Quorum Journal Node (JournalNode) o el Sistema de archivos Nnetwork (NFS) para compartir. NFS está en el nivel del sistema operativo y JournalNode está en el nivel de hadoop. Utilizamos el clúster JournalNode para compartir datos (esta también es la práctica habitual). Como se muestra en la siguiente figura, es el diagrama de arquitectura de JournalNode.

 

 

   Para la sincronización de datos, los dos NameNodes se comunican entre sí a través de un conjunto de procesos independientes llamados JournalNodes. Cuando hay cambios en el espacio de nombres NameNode en el estado activo, se notificará a la mayoría de los procesos de JournalNodes. El NameNode en el estado de espera tiene la capacidad de leer la información de cambio en los JN, y ha estado monitoreando los cambios en el registro de edición, y aplica los cambios a su propio espacio de nombres. El modo de espera puede garantizar que cuando el clúster falle, el estado del espacio de nombres esté completamente sincronizado.

 

 

 

    Para los clústeres HA, es importante asegurarse de que solo un NameNode esté activo a la vez. De lo contrario, el estado de los datos de los dos NameNodes será diferente, y los datos pueden perderse o pueden producirse resultados incorrectos. Para garantizar esto, es necesario usar ZooKeeper. Primero, los dos NameNodes en el clúster HDFS se registran en ZooKeeper. Cuando el Active NameNode falla, ZooKeeper puede detectar esta situación y cambiará automáticamente el Standby NameNode al estado Activo.

 

Dos, arreglo

1. Prepara el medio ambiente

    Configure un clúster de 5 servidores aquí, por supuesto, los tres más bajos también se pueden construir.

    Versión de Zookeeper: 3.4.7

    Versión de Hadoop: 2.7.1

1) Asignación de roles de host

    La siguiente es la asignación de roles de cada servidor, que se puede ajustar de acuerdo con el número de sus propios servidores.

1> hadoop01

    Zookeeper 、 NameNode 、 DFSZKFailoverController 、 ResourceManager。

2> hadoop02

    Zookeeper 、 NameNode2 、 DFSZKFailoverController。

3> hadoop03

    Zookeeper 、 DataNode 、 NodeManager 、 JournalNode。

4> hadoop04

    Zookeeper 、 DataNode 、 NodeManager 、 JournalNode。

5> hadoop05

    Zookeeper 、 DataNode 、 NodeManager 、 JournalNode。

2) Apaga el cortafuegos

    El entorno de producción general no requiere el firewall que viene con el sistema. Si no hay un firewall externo, se puede activar, pero se debe permitir que el puerto de comunicación pase a través del firewall. Aquí, en aras de la simplicidad del experimento, el firewall se desactiva directamente.

service iptables status #查看防火墙状态
service iptables start #立即开启防火墙,但是重启后失效。
service iptables stop #立即关闭防火墙,但是重启后失效。

#重启后生效

chkconfig iptables on #开启防火墙,重启后生效。 chkconfig iptables off #关闭防火墙,重启后生效。

  

3) Configurar nombre de host

    Modifique el archivo / etc / sysconfig / network

vim /etc/sysconfig/network

    ¡¡¡Tenga en cuenta que el nombre de host del clúster donde está instalado Hadoop no se puede subrayar !! De lo contrario, no se encontrará el host. ¡No se puede iniciar!

source /etc/sysconfig/network

    Después de la modificación anterior, el nombre del host no cambiará inmediatamente y debe reiniciarse para que surta efecto. Entonces puede usar el siguiente comando para hacer cambios inmediatos:

hostname

4) Configurar hosts

    Modificar el archivo / etc / hosts

vim /etc/hosts

    Rellene lo siguiente

127.0.0.1 hadoop01
其他主机和ip对应信息。。。

    Las dos operaciones anteriores son para lograr el desacoplamiento de la IP. Si completa toda la IP en múltiples servicios de marco, una vez que cambie la IP de su servidor, entonces cada marco de servicio debe modificar la IP. Nombre de host, luego, cuando cambia la dirección IP de su servidor, solo necesita modificar la relación de mapeo entre el nombre de host y la ip en el archivo de hosts.

5) Configurar inicio de sesión sin contraseña

    Todos los hosts en el clúster deben iniciar sesión entre sí en secreto.

    Generar clave:

ssh-keygen

Enviar la clave pública:

ssh-copy-id root@hadoop01

    En este momento, la clave pública se guarda en el archivo /root/.ssh/authorized_keys del host remoto, y la información de host conocida se guarda en conocido_hosts. Cuando acceda nuevamente, no necesita ingresar la contraseña.

ssh hadoop01

    Use este comando para conectarse de forma remota y verificar si puede conectarse sin contraseña.

    Cabe señalar aquí que debe enviarse a la máquina.

6) Instalar jdk

1> descomprimir e instalar

    Cargue y descomprima el paquete de instalación de jdk a través de fz, el comando es el siguiente:

​​​​​​​tar -zxvf [jdk安装包位置]

2> Configurar variables de entorno

    Modificar / etc / perfil.

    Este archivo es una configuración de variable de entorno que se ejecutará cuando cada usuario inicie sesión. Este archivo se ejecuta cuando el usuario inicia sesión por primera vez. Y recopile la configuración del shell desde el archivo de configuración en el directorio /etc/profile.d.

vim /etc/profile

    Agregue el siguiente contenido al final del archivo y guarde y salga.

export JAVA_HOME=/home/app/jdk1.7.0_45/
export PATH=$PATH:$JAVA_HOME/bin

3> Recargar

    Vuelva a cargar el perfil para que la configuración surta efecto.

source /etc/profile

    Una vez completada la configuración de la variable de entorno, pruebe si la variable de entorno surte efecto.

echo $JAVA_HOME
java -version

7) Construir clúster Zookeeper

    Ver también: construcción del clúster ZooKepper .

2. Configurar hadoop

1) Descomprimir

    Cargue el paquete de instalación en el servidor y descomprímalo.

tar -zxvf hadoop-2.7.1_64bit.tar.gz

2) Modificar configuración

    Los siguientes archivos son todos los archivos que deben configurarse para Hadoop completamente distribuidos. Esta configuración sigue el grupo de 5 componentes del servidor descritos anteriormente.

1> hadoop-env.sh

    En este archivo, cambie la variable de entorno java al mismo valor que la variable de entorno java en el archivo / etc / profile.

JAVA_HOME=/home/app/jdk1.7.0_45/

2> core-site.xml

    La siguiente es la plantilla de configuración para este archivo.

<configuration>
<!-- 指定hdfs的nameservice为ns -->
<property> <name>fs.defaultFS</name> <value>hdfs://ns</value> </property> <!--指定hadoop数据临时存放目录--> <property> <name>hadoop.tmp.dir</name> <value>/root/work/hadoop-2.7.1/tmp</value> </property> <!--指定hdfs操作数据的缓冲区大小 可以不配--> <property> <name>io.file.buffer.size</name> <value>4096</value> </property> <!--指定zookeeper地址--> <property> <name>ha.zookeeper.quorum</name> <value>hadoop01:2181,hadoop02:2181,hadoop03:2181,hadoop04:2181,hadoop05:2181</value> </property> </configuration>

3> hdfs-site.xml

<configuration>
<!--指定hdfs的nameservice为ns,需要和core-site.xml中的保持一致 --> <property> <name>dfs.nameservices</name> <value>ns</value> </property> <!-- ns下面有两个NameNode,分别是nn1,nn2 --> <property> <name>dfs.ha.namenodes.ns</name> <value>nn1,nn2</value> </property> <!-- nn1的RPC通信地址 --> <property> <name>dfs.namenode.rpc-address.ns.nn1</name> <value>hadoop01:9000</value> </property> <!-- nn1的http通信地址 --> <property> <name>dfs.namenode.http-address.ns.nn1</name> <value>hadoop01:50070</value> </property> <!-- nn2的RPC通信地址 --> <property> <name>dfs.namenode.rpc-address.ns.nn2</name> <value>hadoop02:9000</value> </property> <!-- nn2的http通信地址 --> <property> <name>dfs.namenode.http-address.ns.nn2</name> <value>hadoop02:50070</value> </property> <!-- 指定NameNode的元数据在JournalNode上的存放位置 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://hadoop03:8485;hadoop04:8485;hadoop05:8485/ns</value> </property> <!-- 指定JournalNode在本地磁盘存放数据的位置 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/root/work/hadoop-2.7.1/tmp/journal</value> </property> <!-- 开启NameNode故障时自动切换 --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!-- 配置失败自动切换实现方式 --> <property> <name>dfs.client.failover.proxy.provider.ns</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <!-- 配置隔离机制 --> <property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> </property> <!-- 使用隔离机制时需要ssh免登陆 --> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/root/.ssh/id_rsa</value> </property> <!-- namenode存储位置 --> <property> <name>dfs.namenode.name.dir</name> <value>/root/work/hadoop-2.7.1/tmp/name</value> </property>     <!-- dataode存储位置 --> <property>     <name>dfs.datanode.data.dir</name> <value>/root/work/hadoop-2.7.1/tmp/data</value> </property> <!-- 副本数量根据自己的需求配置,这里配置2个 --> <property> <name>dfs.replication</name> <value>2</value> </property> <!-- 在NN和DN上开启WebHDFS (REST API)功能,不是必须 --> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> </configuration>

4> mapred-site.xml

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

5> yarn-site.xml

<configuration>
<!-- 指定nodemanager启动时加载server的方式为shuffle server -->
<property>     <name>yarn.nodemanager.aux-services</name>     <value>mapreduce_shuffle</value>     </property>   <!-- 指定resourcemanager地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop01</value> </property> </configuration>

6> esclavos

    Aquí configuramos hadoop03, hadoop04 y hadoop05 como nodos para almacenar datos.

vim slaves
hadoop03
hadoop04
hadoop05

3) Variables de entorno

    Archivo de configuración / etc / profile:

vim /etc/profile

Agregue el siguiente contenido al final:

export HADOOP_HOME=[hadoop的安装路径]
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

4) Otros servidores

    Use el comando scp para copiar el archivo de configuración a otros servidores.

    Cabe señalar aquí que si jdk, Zookeeper y otras configuraciones de otros servidores son las mismas que la configuración actual de este servidor, la copia directa no necesita ser modificada en el pasado.

Tres, empezar

    Inicie hadoop completamente distribuido:

1. Inicie el clúster zk 

./zkServer.sh start

2. Inicie el clúster jn

sbin/hadoop-daemons.sh start journalnode

1) Formato zkfc

    Formatear el primer arranque

hdfs zkfc -formatZK

2) Formato hdfs

    Formatear el primer arranque

hadoop namenode -format

3. Iniciar NameNode

En hadoop01:

hadoop-daemon.sh start namenode

En hadoop02:

hdfs namenode -bootstrapStandby #把NameNode的数据同步到hadoop02上
hadoop-daemon.sh start namenode #启动备用的namenode

 

4. Inicie DataNode

hadoop-daemons.sh start datanode

5. Iniciar hilo

start-yarn.sh

6. Inicie ZKFC

    En hadoop01

hadoop-daemon.sh start zkfc

    En hadoop02

hadoop-daemon.sh start zkfc

 

7. Después del inicio

    Una vez completado el inicio, use el comando jps para ver cada servidor, el proceso es el siguiente:

    hadoop01:

10877 QuorumPeerMain
11351 NameNode
11871 DFSZKFailoverController 11570 ResourceManager

    hadoop02:

16019 QuorumPeerMain
16214 NameNode
16344 DFSZKFailoverController

    hadoop03:

16548 QuorumPeerMain
16783 DataNode
16893 NodeManager 16701 JournalNode

    hadoop04:

16565 QuorumPeerMain
16798 DataNode
16908 NodeManager 16716 JournalNode

    hadoop05:

16562 QuorumPeerMain
16809 DataNode
16919 NodeManager 16727 JournalNode

    En este punto, todo el clúster está construido y se puede usar normalmente.

 

 

Construcción de clúster completamente distribuida de Hadoop https://my.oschina.net/u/3754001/blog/1802135

 

Configuración del clúster de Hadoop  http://hadoop.apache.org/docs/r1.0.4/cn/cluster_setup.html

Construcción de clúster distribuido de Hadoop   https://www.cnblogs.com/skyturtle/p/9979413.html

 

Supongo que te gusta

Origin www.cnblogs.com/yuluoxingkong/p/12718376.html
Recomendado
Clasificación