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_HOME 和 HADOOP_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_schema、mysql、testdb 等)
失败情况:
| 报错 | 原因 | 解决 |
|---|---|---|
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