在docker中配置hadoop2.7.1+hbase1.1.5+mysql8.0.27+hive1.2.1+sqoop1.4.6实验环境


前言

最近有一个课程实验需要配置如标题所示的环境,所以笔者就借此机会使用docker搭建了一个可回朔的容器实验环境,以便完成实验,同时也记录了一些在搭建过程中遇到的错误。


一、环境说明

->本机环境说明
Docker version 20.10.11, build dea9396
Ubuntu version 20.04.2

->容器内部环境说明
Ubuntu version 20.04.2
jdk-8u301-linux-x64

->组件版本说明:
Hadoop 2.7.1
Hbase 1.1.5
Hive 1.2.1
MySQL 8.0.27
Sqoop 1.4.6


二、搭建步骤

1. docker启动

首先登录docker进入初始ubuntu容器
代码如下:

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

运行结果如下则继续:

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

检查镜像目录:

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

交互式进入初始的运行ubuntu镜像的容器,同时要设置共享文件build

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

参数说明:
-i表示交互式
-t表示开启一个tty,可以理解为开启一个控制台
-it就表示在当下终端内与镜像ubuntu进行交互

-v表示指定共享文件夹目录
-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:/# 

这样就进入了容器内部可以正式开始搭建我们的环境了

2. 共享文件设置

在正式搭建之前,我们还需要把所需要的组件压缩包复制到上述过程中提到的本机共享文件夹build中
复制成功后在镜像中查看build目录即可看到所需的压缩包
如下所示:

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. jdk安装

将jdk压缩包解压到指定目录下

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

配置~/.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}

保存退出后进行source使修改生效

source ~/.bashrc

4. hadoop 2.7.1 伪分布搭建

搭建hadoop就是老生常谈的两个配置文件core-site.xml和hdfs-site.xml的具体配置,首先我们从build中将hadoop压缩包解压到自己想要的路径

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

在解压完成后就可以进入配置文件目录开始配置文件
下文以解压到/usr/local目录并改名为hadoop为例
(完整操作):

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

core-site.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-site.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>

最后为了方便操作,向~/.bashrc文件中写入hadoop的path路径,如下所示

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

此时初步的配置就已经完成,接下来进行hadoop的初始化:
(注意一定要配置上一部的hadoop的path变量,下文操作才可继续)

hadoop namenode -format

执行该指令后就会开始初始化hadoop配置,一路yes就可以了
到最后也许会有一些warning,但是都不要紧,要查看是否有success

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
************************************************************/

可以看到在倒数第4行有successfully formatted.说明初始化成功,hadoop的配置到这里就结束了,只需要start服务即可

4. hbase1.1.5 搭建

开始还是三步走,解压,改名,写路径

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

最后在~/.bashrc中写入path路径

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

这样就初步完成了配置,接下来就对hbase/conf目录中的hbase-env.sh和hbase-site.xml文件进行配置

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-site.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>

配置结束后,就基本大功告成,但是一定要实际运行一次hbase测试是否有细节出错,同时启动的顺序是先启动hdfs,再启动hbase
由于已经配置了路径,所以直接输入以下命令即可

start-dfs.sh
start-hbase.sh

这里一定要观察hbase的三个节点是否成功启动并且可以长时间存活
输入jps指令查看:

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

3124,3211,3325就是hbase的节点,特别是3211HMaster是最重要的,一旦挂掉就说明配置出了问题。值得一提的是hbase是最容易出问题的环节,经常会有各种各样奇怪的报错,这个时候就要学着去查看hbase的日志文件,日志文件一般存放在/hbase/logs目录下,使用vim即可查看

笔者在本次配置过程中也遇到了一些问题,由于最初配置时使用的是从官网下载的jdk11,版本实在是太高了,和hadoop2.7.1与hbase1.1.5都不适配,在启动hdfs时还可以凑合,启动hbase时warning频出,虽然启动了hbase但是HMaster和HRegionServer节点会立即挂掉,完全无法正常使用。一开始我不觉得是jdk的问题,认为是自己端口号或者存放位置写错了,结果最后查看log文件发现的确是jdk的问题。所以在这里推荐大家,如果按照以上步骤还是出错的话,首选一定是查看日志文件,效率最高。

5. hive 1.2.1 搭建

老三步,解压,改名,写路径

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

在~/.bashrc中写入path路径

/usr/local/hive/bin

接下来配置hive-default.xml
这里要先为文件改名

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

hive-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>

文件中的其他参数在第一次启动hive时会自动配置

另外,在搭建hive时还需要下载mysql,首选一定是5.7的祖传版本,奈何镜像的ubuntu版本略高,为mysql重装一次实在是得不偿失,而且笔者也使用了一段时间mysql8.0.27,所以就直接从apt下载了mysql

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

简略下载后即可查看mysql状态并启动mysql

service mysql status
service mysql start

在启动时可能遇到一个报错如下所示:

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

解决方法如下所示

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

解决后即可正常无warning运行,顺便一提,如果将共享文件设置为/tmp,会发生更严重的错误,mysql完全无法启动。

进入mysql shell后创建hive数据库与hive用户同时赋予权限

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

结束操作后从mysql官网下载版本对应的JDBC驱动,网址如下:
https://dev.mysql.com/downloads/connector/j/
官网的压缩包是deb格式,所以使用dpkg指令进行解压

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

解压完成后使用-L质量查看解压目录并将.jar复制到hive的lib目录下

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

至此,hive的准备工作就完成了,可以在指令行启动hdfs后输入hive直接启动hive

start-dfs.sh
hive

不过需要注意,第一次启动hive时会等待非常长的时间,请耐心等待,以免发生未知的错误

6. sqoop 1.4.6 搭建

开局老三样,解压,改名,写路径

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

写路径

/usr/local/sqoop/bin

接下来修改配置文件

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

为配置文件中加入内容

#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

由于上文没有配置zookeeper,所以不予设置
接下来再和设置hive时一样将JDBC驱动添加到sqoop目录下

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

至此准备工作结束,接下来启动mysql测试sqoop与其的连通性

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

系统会提示输入密码
具体如下所示:

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

如果最后可以显示mysql的数据库,则说明安装成功


三、镜像导出

经过上文中的搭建,环境已经就绪,接下来开始导出镜像
首先打开另一个终端,使用commit指令保存镜像

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

使用images指令查看本地镜像

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

使用save指令导出本地镜像

docker save -o ubuntu_allEnable.tar 05cf8bf14058

最后成功导出镜像压缩包,这个导出过程会比较慢,请耐心等待
将导出后的tar压缩包复制到其他设备,即可使用load指令解压加载镜像,在docker中运行。

总结

以上就是整个环境的搭建过程,初衷还是降低实验的时间成本,hadoop生态中的组件虽然经典,但是经常会出现报错,解决起来费时费力,所以最后我从本机作业转向了容器技术。如果有错误,还请各位读者批评指正,如有读者对该镜像压缩包有需要,留下邮箱就可以了,感谢阅读

猜你喜欢

转载自blog.csdn.net/weixin_45704680/article/details/121418740
今日推荐