今天需要一台电脑的mysql数据库中导出一张表的数据,遇到了一个问题,我觉得值得记录一下。
sqoop 导入方式为:mysql -> hdfs (导入文件系统,不是hive)。
下面展示sqoop job 命令:
#!/bin/bash
#Set the RDBMS connection params
rdbms_connstr="jdbc:mysql://xxx.xxx.xxx.xxx:3306/tablespace"
rdbms_username="root"
rdbms_pwd="mysql"
#Set query and table
#query_sql=
#Set the hive tables
hive_table="xxx"
hive_database="ods"
#hive table create
hive -f /opt/ods_tables/${hive_table}.sql
#sqoop start
sqoop import --connect ${rdbms_connstr} \
--username ${rdbms_username} \
--password ${rdbms_pwd} \
--query "SELECT xxxx FROM tablespace.tablename where \$CONDITIONS" \
--hive-overwrite \
--hive-database ${hive_database} \
--hive-table ${hive_table} \
--delete-target-dir \
--target-dir /db/${hive_database}/${hive_table} \
--fields-terminated-by "\001" \
--m 1
命令没有问题,但是脚本运行就是失败,报错信息如下:
之后我查看了原表中的字段类型,并没发现有bigint类型的字段,这就很奇怪了,报错信息与实际情况不符,头大。
最后找到一张帖子与我的情况很相似,原因是sqoop的connector包,与数据库的版本差距太大了,造成了报错。
查看mysql版本为:8.0.23
而sqoop的lib下默认的mysql连接包的版本是:5.1.20
ok,试一下,更换了一下 8.0.23 的连接包,执行脚本,通过,问题解决,很好,perfect!就喜欢这顺滑的感觉。
结论:数据库版本与sqoop包的连接包版本不同的远程,但是这个报错信息也太误导人了。
下面附上 mysql-connector-java 的下载地址:
https://downloads.mysql.com/archives/c-j/