安装配置sqoop(超详细)

前言

sqoop就是sql-to-hadoop,说通俗点,我们用到最多的就是mysql与hive之间的数据传递,而hive是依靠hadoop运行的,所以要再mysql和hive之间互相传递数据,就必须要安装sqoop

一、准备

我们要准备sqoop的安装包,我们的hadoop版本是3.1.3,匹配的sqoop版本是1.4.6

选择的是  ' sqoop-1.4.6.bin_hadoop-0.23.tar.gz '

网站地址:sqoop下载

二、安装部署

1. 上传到/opt/software目录下

#使用XFTP或者带上传文件功能的shell工具

2. 解压sqoop压缩包到/opt/module目录下

tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C /opt/module/

3. 改名

#解压完后名字太长,所以方便后续配置,我们改个名字

cd /opt/module
mv sqoop-1.4.7.bin__hadoop-2.6.0/ sqoop-1.4.7

4. 添加环境变量

#环境变量是告诉系统你sqoop的位置的,证明你有这个东西  就可以使用了

#进入
vi /etc/profile
# 添加
#SQOOP_HOME
export SQOOP_HOME=/opt/module/sqoop-1.4.7
export PATH=$PATH:$SQOOP_HOME/bin

#ESC :wq保存退出

#刷新环境  使环境生效

source /etc/profile

5. 修改sqoop的配置文件

#进入
cd $SQOOP_HOME/conf
#复制 Sqoop 环境变量模板文件
##复制可以保留源文件,相当于保存备份
###去掉template是因为有template的文件系统是不看的,等于白配置
cp sqoop-env-template.sh sqoop-env.sh 
#修改
vim sqoop-env.sh
#添加
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
#export HBASE_HOME=$HBASE_HOME
export HIVE_HOME=$HIVE_HOME
export ZOOCFGDIR=$ZOOKEEPER_HOME

#添加的内容取决于你自己安装了什么

##我这个就是没有安装HBase我就没写

##ZOOKEEPER_HOME这个我环境文件里写的是ZK_HOME,一开始以为要用到,后来发现用不到就没管他

补充一点:

拿我的这个举例,我没有配置HBase,所以在后续再用sqoop跑程序的时候会报警告,但是不用管他

6. 拷贝mysql驱动

#为什么要拷贝mysql驱动 前言里解释过了

cp /opt/software/mysql-connector-java-5.1.37-bin.jar $SQOOP_HOME/lib

#7. 拷贝 Hive 文件

#主要是跟hive做交互

cp hive-3.1.2/lib/hive-common-3.1.2.jar sqoop-1.4.7/lib/

#8. 检验

sqoop version

三、项目验证:mysql与hive做交互

#要求:把mysql中的表全量传递到hive中

##全量:一字不差的传递过去

sqoop import \
--connect jdbc:mysql://10.2.40.101:3306/smart_school?characterEncoding=UTF-8 \
--username root \
--password 123456 \
--table user_activity01_copy1 \
--direct \
--delete-target-dir \
--fields-terminated-by '\t' \
--lines-terminated-by '\n' \
--hive-import \
--hive-database bigdata_platform \
--create-hive-table \
--hive-table 1_null_1729296718697 \
--num-mappers 1 \
--verbose

SQL解释:

10.2.40.101 是我集群节点ip

smart_school是我mysql的数据库名字

user_activity01_copy1是我做测试用的表名

bigdata_platform是我hive里的数据库名字

因为我加了--create-hive-table这个配置项,所以我不用在hive里手动创建表

1_null_1729296718697是我的hive数据库里表的名字

参数解释:

sqoop import:这是 Sqoop 的导入命令,用于从关系型数据库(如 MySQL)导入数据到 Hadoop(Hive)。

--connect jdbc:mysql://10.2.40.101:3306/smart_school?characterEncoding=UTF-8:指定连接到 MySQL 数据库的 JDBC URL。这里连接的是 10.2.40.101 上的 smart_school 数据库,端口为 3306,并指定字符编码为 UTF-8

--username root:指定连接数据库时使用的用户名,这里是 root

--password 123456:指定连接数据库时使用的密码,这里是 123456

--table user_activity01_copy1:指定要从 MySQL 数据库中导入的表名,这里是 user_activity01_copy1

--direct:使用直接模式进行数据导入。直接模式可以提高导入速度,因为它使用数据库的原生批量加载功能。

--delete-target-dir:如果目标目录已经存在,则在导入前删除该目录。这确保每次导入时都是全新的数据集。

--fields-terminated-by '\t':指定字段之间的分隔符。这里使用制表符 \t 作为字段分隔符。

--lines-terminated-by '\n':指定行之间的分隔符。这里使用换行符 \n 作为行分隔符。

--hive-import:启用 Hive 导入。将导入的数据保存到 Hive 中。

--hive-database bigdata_platform:指定要将数据导入的 Hive 数据库名称,这里是 bigdata_platform

--create-hive-table:创建 Hive 表。如果表已经存在,将会被覆盖。

--hive-table 1_null_1729296718697:指定在 Hive 中创建的表名,这里是 1_null_1729296718697

--num-mappers 1:指定用于执行导入任务的 Map 任务的数量。这里是 1,表示只有一个 Map 任务。

--verbose 这个参数你也可以不加,这个是我当时有报错解决不了问题,为了获取更详细的日志信息加        

在hive节点登录hive能查到

在HDFS上查看10.2.40.102::50070

地址:/user/hive/warehouse/bigdata_platform.db

#因为我搭建的是hadoopha,所以节点二的namenode也可能是active

代码截图:

我在执行这条命令的时候遇到过报错

报错1:java.io.IOException: Cannot run program "mysqldump": error=2, 没有那个文件或目录

#无法找到 mysqldump 工具

  • 原因
    • mysqldump 未安装。
    • mysqldump 不在 PATH 中。
    • 当前用户没有执行 mysqldump 的权限。
  • 解决方法
    • 安装 mysqldump:例如,在 Debian 系统上使用 sapt-get install mysql-client
    • 将 mysqldump 的路径添加到 PATH 环境变量中。
    • 确保当前用户有执行 mysqldump 的权限。
    • 如果使用 --direct 选项,即使 mysqldump 失败,直接模式仍然可以正常工作。

我后续用不到mysqldump,所以加了一个--direct字段

报错2:org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot create directory /tmp/hadoop-yarn/staging/root/.staging/job_1729300755474_0001. Name node is in safe mode.

#NameNode 处于安全模式

  • 原因:NameNode 处于安全模式,阻止了新的目录创建。
  • 解决方法
    • 等待几秒钟让 NameNode 自动退出安全模式。
    • 手动退出安全模式:hdfs dfsadmin -safemode leave
    • 确认 Hadoop 配置正确,并且所有节点都正常运行。
    • 重新运行 Sqoop 命令。

我的解决办法就是直接关闭就行,这个原因的造成就是,短时间内多次报错,浪费资源过头了

过程截图:

...

...

...

....

....

....

...

...

...

...

...

...

...

...

...

上一篇:ES6 Promise的用法


下一篇:APQP在制造行业的应用:搭上数字化项目管理平台很nice