Configure el entorno experimental hadoop2.7.1+hbase1.1.5+mysql8.0.27+hive1.2.1+sqoop1.4.6 en Docker


prefacio

Recientemente, hubo un experimento del curso que requirió configurar el entorno como se muestra en el título, por lo que el autor aprovechó la oportunidad para usar Docker para construir un entorno de experimento de contenedor rastreable para completar el experimento y también registró algunos errores encontrados durante la construcción. proceso. .


1. Descripción ambiental

->Descripción del entorno nativo
Docker versión 20.10.11, compilación dea9396
Ubuntu versión 20.04.2

->Descripción del entorno interno del contenedor
Ubuntu versión 20.04.2
jdk-8u301-linux-x64

->Descripción de la versión del componente:
Hadoop 2.7.1
Hbase 1.1.5
Hive 1.2.1
MySQL 8.0.27
Sqoop 1.4.6


2. Pasos de construcción

1. inicio de la ventana acoplable

Primero inicie sesión en Docker e ingrese el contenedor inicial de Ubuntu,
el código es el siguiente:

hadoop@peryol-ThinkPad-T540p:~$ docker login

Si el resultado de la operación es el siguiente, continúe:

Authenticating with existing credentials...
WARNING! Your password will be stored unencrypted in xxxxxxxx(密码存放文件地址)
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

Consulta el directorio de imágenes:

hadoop@peryol-ThinkPad-T540p:~$ docker images
REPOSITORY                             TAG       IMAGE ID       CREATED        SIZE
ubuntu/all_enable                      latest    05cf8bf14058   14 hours ago   3GB
ubuntu/hadoop_hbase_hive_enable        latest    b20fe17a3ca8   15 hours ago   2.99GB
ubuntu/hadoop_hbase_enable             latest    23ec3c409a19   23 hours ago   2.79GB
ubuntu/hadoop_hbase_hive_sqoop_mysql   latest    a4ab808bd4d3   24 hours ago   2.42GB
ubuntu/mysql                           latest    bfd8141ba845   25 hours ago   1.52GB
ubuntu/master                          latest    5d47bb6b07a4   2 months ago   2.19GB
ubuntu/slave02                         latest    cd345c90bfdb   2 months ago   2.19GB
ubuntu/slave01                         latest    f27e5e2a8f80   2 months ago   2.19GB
ubuntu/hadoopinstalled                 latest    1d02675e3776   2 months ago   2.19GB
ubuntu/jdkinstalled                    latest    c4887df4b631   2 months ago   907MB
ubuntu                                 latest    fb52e22af1b0   2 months ago   72.8MB
hello-world                            latest    d1165f221234   8 months ago   13.3kB

Ingrese de forma interactiva al contenedor inicial que ejecuta la imagen de Ubuntu y configure la compilación del archivo compartido.

docker run -it -v /home/xxxx/build/:/root/build ubuntu

Descripción del parámetro:
-i significa interactivo
-t significa abrir un tty, que puede entenderse como abrir una consola
-significa interactuar con el espejo ubuntu en la terminal actual

-v indica el directorio de carpetas compartidas especificado
-v localhost_path:container_path

root@7622623f361b:/# uname -a
Linux 7622623f361b 5.11.0-40-generic #44~20.04.2-Ubuntu SMP Tue Oct 26 18:07:44 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
root@7622623f361b:/# 

De esta manera, hemos ingresado al contenedor y podemos comenzar oficialmente a construir nuestro entorno.

2. Configuración de archivos compartidos

Antes de la compilación oficial, también necesitamos copiar el paquete comprimido del componente requerido a la carpeta compartida local mencionada en el proceso anterior. Después de copiar correctamente, vea el
directorio de compilación en el espejo y verá el paquete comprimido requerido
de la siguiente manera:

root@586063e32312:/# cd ~
root@586063e32312:~# ls
build
root@586063e32312:~# cd build
root@586063e32312:~/build# ls
apache-hive-1.2.1-bin.tar.gz  hbase-1.1.5-bin.tar.gz      mysql-connector-java_8.0.27-1ubuntu20.04_all.deb
hadoop-2.7.1.tar.gz           jdk-8u301-linux-x64.tar.gz  sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz

3. instalación jdk

Extraiga el paquete comprimido jdk al directorio especificado

root@586063e32312:~/build# tar -zxvf jdk-8u301-linux-x64.tar.gz -C /usr/lib

Configurar ~/.bashrc

vim ~/.bashrc
export JAVA_HOME=/usr/lib/jdk1.8.0_301
export JRE_HOME=${
    
    JAVA_HOME}/jre
export CLASSPATH=.:${
    
    JAVA_HOME}/lib:${
    
    JRE_HOME}/lib
export JAVA_PATH=${
    
    JAVA_HOME}/bin:${
    
    JRE_HOME}/bin
export PATH=$PATH:${
    
    JAVA_PATH}

Después de guardar y salir, obtenga los cambios para que surtan efecto.

source ~/.bashrc

4. compilación de pseudodistribución de hadoop 2.7.1

La construcción de hadoop es la configuración específica de los dos archivos de configuración cliché core-site.xml y hdfs-site.xml. Primero, descomprimimos el paquete comprimido de hadoop desde la compilación a la ruta que queremos.

tar -zxvf hadoop-2.7.1.tar.gz -C xx/xxx(指定路径)

Una vez completada la descompresión, puede ingresar al directorio del archivo de configuración para iniciar el archivo de configuración.
Lo siguiente lleva la descompresión al directorio /usr/local y le cambia el nombre a hadoop como ejemplo
(operación completa):

tar -zxvf hadoop-2.7.1.tar.gz -C /usr/local
cd /usr/local
mv hadoop-2.7.1 hadoop

sitio-core.xml

<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://localhost:9000</value>
        </property>
</configuration>

hdfs-sitio.xml

<configuration>
        <property>
                <name>dfs.replication</name>
                <value>1</value>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:/usr/local/hadoop/tmp/dfs/name</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:/usr/local/hadoop/tmp/dfs/data</value>
        </property>
</configuration>

Finalmente, para facilitar la operación, escriba la ruta de hadoop al archivo ~/.bashrc, como se muestra a continuación

export PATH=$PATH:${
    
    JAVA_PATH}:/usr/local/hadoop/sbin:/usr/local/hadoop/bin

En este punto, se ha completado la configuración preliminar y el siguiente paso es inicializar hadoop:
(tenga en cuenta que la variable de ruta de hadoop en la parte anterior debe configurarse antes de que puedan continuar las siguientes operaciones)

hadoop namenode -format

Después de ejecutar este comando, la configuración de Hadoop comenzará a inicializarse. Simplemente diga sí por completo. Puede
haber algunas advertencias al final, pero no importa. Debe verificar si tiene éxito.

21/11/20 03:31:04 INFO util.GSet: capacity      = 2^15 = 32768 entries
21/11/20 03:31:04 INFO namenode.FSImage: Allocated new BlockPoolId: BP-1796055780-172.17.0.3-1637379064494
21/11/20 03:31:04 INFO common.Storage: Storage directory /usr/local/hadoop/tmp/dfs/name has been successfully formatted.
21/11/20 03:31:04 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
21/11/20 03:31:04 INFO util.ExitUtil: Exiting with status 0
21/11/20 03:31:04 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at 586063e32312/172.17.0.3
************************************************************/

Puede ver que hay un formato exitoso en la cuarta línea desde abajo. Esto indica que la inicialización fue exitosa. La configuración de hadoop ha terminado aquí. Solo necesita iniciar el servicio.

4. compilación hbase1.1.5

Hay tres pasos para comenzar: descomprimir, cambiar el nombre y escribir la ruta.

tar -zxvf hbase-1.1.5-bin.tar.gz -C /usr/local/
cd /usr/local
mv hbase-1.1.5 hbase

Finalmente, escribe la ruta en ~/.bashrc

/usr/local/hbase/sbin:/usr/local/hbase/bin

Esto completa la configuración inicial. A continuación, configure los archivos hbase-env.sh y hbase-site.xml en el directorio hbase/conf.

hbase-env.sh

export JAVA_HOME=/usr/lib/jdk1.8.0_301
export JRE_HOME=${
    
    JAVA_HOME}/jre
export CLASSPATH=.:${
    
    JAVA_HOME}/lib:${
    
    JRE_HOME}/lib
export JAVA_PATH=${
    
    JAVA_HOME}/bin:${
    
    JRE_HOME}/bin
export PATH=$PATH:${
    
    JAVA_PATH}
export HBASE_CLASSPATH=/usr/local/hadoop/conf
export HBASE_MANAGES_ZK=true

hbase-sitio.xml

<configuration>
        <property>
                <name>hbase.rootdir</name>
                <value>hdfs://localhost:9000/hbase</value>
        </property>
        <property>
                <name>hbase.cluster.distributed</name>
                <value>true</value>
        </property>
</configuration>

Una vez completada la configuración, básicamente ha terminado, pero en realidad debe ejecutar hbase para probar si hay errores de detalles. Al mismo tiempo, la secuencia de inicio es iniciar hdfs primero y luego iniciar hbase. Dado que la ruta ha sido configurado, puede ingresar directamente el siguiente comando
.

start-dfs.sh
start-hbase.sh

Aquí debe observar si los tres nodos de hbase se iniciaron correctamente y pueden sobrevivir durante mucho tiempo,
ingrese el comando jps para verificar:

root@2ecbf78ed0ba:/usr/local/hbase/conf# jps
3124 HQuorumPeer
709 SecondaryNameNode
443 NameNode
3211 HMaster
556 DataNode
3612 Jps
3325 HRegionServer

3124, 3211 y 3325 son nodos hbase, especialmente 3211HMaster es el más importante. Una vez que se cuelga, significa que hay un problema con la configuración. Vale la pena mencionar que hbase es el enlace más propenso a tener problemas. A menudo hay varios informes de errores extraños. En este momento, debe aprender a verificar los archivos de registro de hbase. Los archivos de registro generalmente se almacenan en /hbase/logs directorio Utilice vim para ver

El autor también encontró algunos problemas durante esta configuración. Dado que en la configuración inicial se utilizó el jdk11 descargado del sitio web oficial, la versión era demasiado alta y no era adecuada para hadoop2.7.1 y hbase1.1.5. Al iniciar hdfs, está bien. Advertencias Aparecen con frecuencia al iniciar hbase. Aunque se inicia hbase, los nodos HMaster y HRegionServer se colgarán inmediatamente y no podrán usarse normalmente en absoluto. Al principio, no pensé que fuera un problema de jdk. Pensé que era porque había escrito el número de puerto o la ubicación de almacenamiento incorrectos. Finalmente, revisé el archivo de registro y descubrí que efectivamente era un problema de jdk. Por lo tanto, recomiendo a todos aquí. Si aún recibe un error después de seguir los pasos anteriores, la primera opción debe ser verificar el archivo de registro, que es la más eficiente.

5. configuración de la colmena 1.2.1

Los antiguos tres pasos: descomprimir, cambiar el nombre y escribir la ruta.

tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /usr/local/
cd /usr/local
mv apache-hive-1.2.1-bin hive

Escriba la ruta de acceso en ~/.bashrc

/usr/local/hive/bin

A continuación, configure hive-default.xml.
Aquí primero debe cambiar el nombre del archivo.

mv hive-default.xml.template hive-default.xml
vim hive-default.xml

colmena-default.xml:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
	 <property>
				<name>javax.jdo.option.ConnectionURL</name>
				<value>jdbc:mysql://localhost:3306/hive? createDatabaseIfNotExist=true</value>
				<description>JDBC connect string for a JDBC metastore</description>
      </property>
      
      <property>
			<name>javax.jdo.option.ConnectionDriverName</name>
			<value>com.mysql.jdbc.Driver</value> 
			<description>Driver class name for a JDBC metastore</description>
      </property>
      
      <property>
			<name>javax.jdo.option.ConnectionUserName</name>
			<value>hive</value>
			<description>username to use against metastore datastore</description>
      </property>
      
      <property>
			<name>javax.jdo.option.ConnectionPassword</name>
			<value>hive</value>
			<description>password to use against metastore database</description>
      </property>	
</configuration>

Otros parámetros del archivo se configurarán automáticamente cuando se inicie Hive por primera vez.

Además, debe descargar MySQL al construir Hive. La primera opción debe ser la versión ancestral 5.7. Sin embargo, la versión de Ubuntu del espejo es ligeramente superior. Reinstalar MySQL una vez realmente no vale la pena. Además, el autor también Usé mysql8.0.27 por un tiempo, así que descargué mysql directamente desde apt

sudo apt-get update  
//更新源
sudo apt-get install mysql-server 
//安装

Después de una simple descarga, puede verificar el estado de MySQL e iniciar MySQL.

service mysql status
service mysql start

Es posible que encuentre un error durante el inicio como se muestra a continuación:

su: warning: cannot change directory to /nonexistent: No such file or directory

La solución es la siguiente.

service mysql stop
usermod -d /var/lib/mysql/ mysql
service mysql start

Después de resolver el problema, puede ejecutarse normalmente sin previo aviso. Por cierto, si el archivo compartido está configurado en /tmp, ocurrirá un error más grave y mysql no se iniciará en absoluto.

Después de ingresar al shell mysql, cree una base de datos de colmena y otorgue permisos al usuario de colmena al mismo tiempo

mysql>create database hive;
mysql>create user 'hive'@'%' identified by 'hive';
mysql>grant all privileges on *.* to 'hive'@'%'; 

Después de completar la operación, descargue el controlador JDBC correspondiente del sitio web oficial de mysql, la URL es la siguiente:
https://dev.mysql.com/downloads/connector/j/
El paquete comprimido en el sitio web oficial está en formato deb. así que use el comando dpkg para descomprimirlo.

dpkg -i mysql-connector-java_8.0.27-1ubuntu20.04_all.deb

Una vez completada la descompresión, utilice la calidad -L para ver el directorio de descompresión y copie el .jar al directorio lib de Hive.

dpkg -L mysql-connector-java
cd /usr/share/java
//这是使用-L查出的解压目录
cp mysql-connector-java-8.0.27.jar /usr/local/hive/lib

En este punto, el trabajo de preparación de Hive está completo. Puede iniciar Hive directamente después de iniciar hdfs en la línea de comando.

start-dfs.sh
hive

Sin embargo, tenga en cuenta que tomará mucho tiempo cuando inicie Hive por primera vez. Espere pacientemente para evitar errores desconocidos.

6. configuración de sqoop 1.4.6

Comience con los mismos tres métodos antiguos: descomprimir, cambiar el nombre y escribir la ruta.

tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /usr/local/
cd /usr/local/
mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha/ sqoop

escribir ruta

/usr/local/sqoop/bin

Luego modifique el archivo de configuración.

cd /usr/local/sqoop/conf/
cat sqoop-env-template.sh >> sqoop-env.sh
//复制副本
vim sqoop-env.sh

Agregar contenido al archivo de configuración

#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/usr/local/hadoop

#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/usr/local/hadoop

#set the path to where bin/hbase is available
export HBASE_HOME=/usr/local/hbase

#Set the path to where bin/hive is available
export HIVE_HOME=/usr/local/hive

Dado que zookeeper no está configurado anteriormente, no se configurará.
A continuación, agregue el controlador JDBC al directorio sqoop como cuando configuró Hive.

cp /usr/share/jaba/mysql-connector-java-8.0.27.jar /usr/local/sqoop/lib

En este punto, el trabajo de preparación está completo, luego inicie mysql para probar la conectividad entre sqoop y él.

service mysql start
sqoop list-databases --connect jdbc:mysql://127.0.0.1:3306/ --username hive -P

El sistema le solicitará que ingrese una contraseña
de la siguiente manera:

root@2ecbf78ed0ba:/usr/local/sqoop/bin# sqoop list-databases --connect jdbc:mysql://127.0.0.1:3306/ --username hive -P
Warning: /usr/local/sqoop/bin/../../hcatalog does not exist! HCatalog jobs will fail.
Please set $HCAT_HOME to the root of your HCatalog installation.
Warning: /usr/local/sqoop/bin/../../accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
Warning: /usr/local/sqoop/bin/../../zookeeper does not exist! Accumulo imports will fail.
Please set $ZOOKEEPER_HOME to the root of your Zookeeper installation.
21/11/19 20:51:25 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6
Enter password: 
21/11/19 20:51:27 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
mysql
information_schema
performance_schema
sys
hive

Si la base de datos mysql se puede mostrar al final, la instalación se realizó correctamente.


3. Exportación de imágenes

Después de la configuración anterior, el entorno está listo. A continuación, comience a exportar la imagen.
Primero, abra otra terminal y use el comando de confirmación para guardar la imagen.

hadoop@peryol-ThinkPad-T540p:~$ docker ps
//查看运行中的容器
CONTAINER ID   IMAGE                        COMMAND   CREATED             STATUS             PORTS     NAMES
2ecbf78ed0ba   ubuntu/hadoop_hbase_enable   "bash"    About an hour ago   Up About an hour             mystifying_perlman
hadoop@peryol-ThinkPad-T540p:~$ docker commit 2ecbf78ed0ba ubuntu/all_enable
//保存容器中的镜像到本地
sha256:05cf8bf14058863bb5d08fadb80aa1f02c7b927722098deec1e9c4dca458d83e

Utilice el comando de imágenes para ver imágenes locales

root@peryol-ThinkPad-T540p:/var/lib/docker/containers# docker images
REPOSITORY                             TAG       IMAGE ID       CREATED             SIZE
ubuntu/all_enable                      latest    05cf8bf14058   20 minutes ago      3GB
ubuntu/hadoop_hbase_hive_enable        latest    b20fe17a3ca8   About an hour ago   2.99GB
ubuntu/hadoop_hbase_enable             latest    23ec3c409a19   10 hours ago        2.79GB
ubuntu/hadoop_hbase_hive_sqoop_mysql   latest    a4ab808bd4d3   11 hours ago        2.42GB
ubuntu/mysql                           latest    bfd8141ba845   12 hours ago        1.52GB
ubuntu/master                          latest    5d47bb6b07a4   2 months ago        2.19GB
ubuntu/slave02                         latest    cd345c90bfdb   2 months ago        2.19GB
ubuntu/slave01                         latest    f27e5e2a8f80   2 months ago        2.19GB
ubuntu/hadoopinstalled                 latest    1d02675e3776   2 months ago        2.19GB
ubuntu/jdkinstalled                    latest    c4887df4b631   2 months ago        907MB
ubuntu                                 latest    fb52e22af1b0   2 months ago        72.8MB
hello-world                            latest    d1165f221234   8 months ago        13.3kB

Utilice el comando guardar para exportar una imagen local

docker save -o ubuntu_allEnable.tar 05cf8bf14058

Finalmente, el paquete comprimido de imagen se exportó exitosamente. Este proceso de exportación será lento. Espere pacientemente.
Copie el paquete comprimido tar exportado a otros dispositivos y luego use el comando de carga para descomprimir y cargar la imagen y ejecutarla en la ventana acoplable.

Resumir

Lo anterior es el proceso de construcción de todo el entorno. La intención original es reducir el costo de tiempo del experimento. Aunque los componentes del ecosistema Hadoop son clásicos, a menudo ocurren errores, que requieren mucho tiempo y son laboriosos de resolver. Al final cambié de las operaciones locales a la tecnología de contenedores. Si hay algún error, se invita a los lectores a criticarlo y corregirlo. Si algún lector necesita este paquete de compresión de imágenes, simplemente deje una dirección de correo electrónico. Gracias por leer.

Supongo que te gusta

Origin blog.csdn.net/weixin_45704680/article/details/121418740
Recomendado
Clasificación