sqoop配置

Sqoop 配置:配环境变量 + 装驱动 + 测连接,三步跑通

Sqoop 配置就三件事:

  • sqoop-env.sh(Hadoop 路径)
  • 装数据库 JDBC 驱动
  • 测连接(sqoop list-databases

必配:sqoop-env.sh——告诉 Sqoop Hadoop 在哪

cd $SQOOP_HOME/conf
cp sqoop-env-template.sh sqoop-env.sh
vim sqoop-env.sh
# Hadoop 公共组件路径(HDFS、YARN 等)  
export HADOOP_COMMON_HOME=/usr/local/myself/hadoop-3.3.0  

# MapReduce 路径(Sqoop 依赖 MapReduce 执行数据同步)  
export HADOOP_MAPRED_HOME=/usr/local/myself/hadoop-3.3.0  

# Hive 路径(若需与 Hive 交互,如导入数据到 Hive 表)  
export HIVE_HOME=/usr/local/myself/apache-hive-3.1.2-bin  

# ZooKeeper 路径(若依赖 ZooKeeper,如与 HBase 交互)  
export ZOOKEEPER_HOME=/usr/local/myself/apache-zookeeper-3.6.1-bin  
export ZOOCFGDIR=/usr/local/myself/apache-zookeeper-3.6.1-bin/conf  

# HBase 路径(若需与 HBase 交互)  
export HBASE_HOME=/usr/local/myself/hbase-2.2.7

必配: HADOOP_COMMON_HOMEHADOOP_MAPRED_HOME,Sqoop 底层跑的是 MapReduce,没有这两项任务提交不了。

选配:

变量 什么时候需要
HIVE_HOME 要用 --hive-import 直接导到 Hive
HBASE_HOME 要导到 HBase
ZOOKEEPER_HOME 连接 HBase 时需要

新手只配 Hadoop 路径就够了,用到 Hive/HBase 的时候再补。

装驱动:Sqoop 本身不带数据库驱动

Sqoop 通过 JDBC 连数据库,但驱动要自己装

# 下载 MySQL 驱动
wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.28/mysql-connector-java-8.0.28.jar

# 放到 Sqoop 的 lib 目录
cp mysql-connector-java-8.0.28.jar $SQOOP_HOME/lib/

版本匹配:

MySQL 版本 推荐驱动
MySQL 5.7 mysql-connector-java-5.1.x.jar
MySQL 8.0 mysql-connector-java-8.0.x.jar

驱动版本不对会报 No suitable driver found for jdbc:mysql

其他数据库:

数据库 驱动 JAR
Oracle ojdbc8.jar
PostgreSQL postgresql-42.x.x.jar

测试连接:确认配对了

sqoop list-databases \
  --connect jdbc:mysql://localhost:3306/ \
  --username root \
  --password 123456

成功输出: 看到数据库列表(information_schemamysqltestdb 等)

失败情况:

报错 原因 解决
No suitable driver 驱动没装或版本不对 检查 $SQOOP_HOME/lib/ 有没有驱动 JAR
Connection refused MySQL 没启动或端口不对 systemctl status mysql,检查 3306 端口
Access denied 用户名/密码错 确认账号密码,或重新授权

验证 Sqoop 版本

sqoop version

输出类似:

Sqoop 1.4.7
git commit id xxxxx
Compiled by ... on ...

能看到版本说明基础配置没问题。

常见问题

1. 启动 Sqoop 时报 NoClassDefFoundError: org/apache/commons/lang/StringUtils

Sqoop 缺 commons-lang 包。从 Hadoop 目录复制一份:

cp $HADOOP_HOME/share/hadoop/common/lib/commons-lang-2.6.jar $SQOOP_HOME/lib/

2. sqoop: command not found

环境变量没配。把 $SQOOP_HOME/bin 加到 PATH

export SQOOP_HOME=/usr/local/sqoop
export PATH=$SQOOP_HOME/bin:$PATH

3. 密码里有特殊字符,命令报错

用单引号包起来:

--password '123!@#'

或者把密码放文件里(更安全):

--password-file /path/to/password.txt