sqoop导入mysql数据到hive中报错

本文介绍了一个关于MySQL数据库连接器版本不匹配导致的Streaming Resultset错误,并提供了具体的解决方案,通过更改mysql-connector-java的版本成功解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



ERROR manager.SqlManager: Error reading from database: java.sql.SQLException: Streaming result set com.mysql.jdbc.RowDataDynamic@6c4fc156 is still active. No statements may be issued when any streaming result sets are open and in use on a given connection. Ensure that you have called .close() on any active streaming result sets before attempting more queries.
java.sql.SQLException: Streaming result set com.mysql.jdbc.RowDataDynamic@6c4fc156 is still active. No statements may be issued when any streaming result sets are open and in use on a given connection. Ensure that you have called .close() on any active streaming result sets before attempting more queries.
 at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:930)
 at com.mysql.jdbc.MysqlIO.checkForOutstandingStreamingData(MysqlIO.java:2646)
 at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1861)
 at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2101)
 at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2548)
 at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2477)
 at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1422)
 at com.mysql.jdbc.ConnectionImpl.getMaxBytesPerChar(ConnectionImpl.java:2945)
 at com.mysql.jdbc.Field.getMaxBytesPerCharacter(Field.java:582)
 at com.mysql.jdbc.ResultSetMetaData.getPrecision(ResultSetMetaData.java:441)
 at org.apache.sqoop.manager.SqlManager.getColumnInfoForRawQuery(SqlManager.java:285)
 at org.apache.sqoop.manager.SqlManager.getColumnTypesForRawQuery(SqlManager.java:240)
 at org.apache.sqoop.manager.SqlManager.getColumnTypes(SqlManager.java:226)
 at org.apache.sqoop.manager.ConnManager.getColumnTypes(ConnManager.java:295)
 at org.apache.sqoop.orm.ClassWriter.getColumnTypes(ClassWriter.java:1773)
 at org.apache.sqoop.orm.ClassWriter.generate(ClassWriter.java:1578)
 at org.apache.sqoop.tool.CodeGenTool.generateORM(CodeGenTool.java:96)
 at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:478)
 at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:601)
 at org.apache.sqoop.Sqoop.run(Sqoop.java:143)
 at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
 at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:179)
 at org.apache.sqoop.Sqoop.runTool(Sqoop.java:218)
 at org.apache.sqoop.Sqoop.runTool(Sqoop.java:227)
 at org.apache.sqoop.Sqoop.main(Sqoop.java:236)
14/11/11 19:58:15 ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: No columns to generate for ClassWriter
 at org.apache.sqoop.orm.ClassWriter.generate(ClassWriter.java:1584)
 at org.apache.sqoop.tool.CodeGenTool.generateORM(CodeGenTool.java:96)
 at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:478)
 at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:601)
 at org.apache.sqoop.Sqoop.run(Sqoop.java:143)
 at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
 at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:179)
 at org.apache.sqoop.Sqoop.runTool(Sqoop.java:218)
 at org.apache.sqoop.Sqoop.runTool(Sqoop.java:227)
 at org.apache.sqoop.Sqoop.main(Sqoop.java:236)



后经定位,发现是mysql-connect-java jar包的版本不对

改为mysql-connector-java-5.1.31 这个版本后就可以了

在 DolphinScheduler 中使用 SqoopMySQL 导入数据Hive,通常涉及 Sqoop 脚本的编写、Hive 和 Hadoop 环境的配置、以及 DolphinScheduler 的任务调度配置。以下是具体实现方法和注意事项。 ### 1. Sqoop 命令的编写 Sqoop 用于将 MySQL 数据导入 Hive 的基本命令如下: ```bash sqoop import \ --connect jdbc:mysql://<mysql-host>:3306/<database-name> \ --username <mysql-username> \ --password <mysql-password> \ --table <table-name> \ --hive-import \ --hive-table <hive-database>.<hive-table-name> \ --hive-overwrite \ --fields-terminated-by ',' \ --lines-terminated-by '\n' \ --target-dir /user/hive/warehouse/<hive-database>.db/<hive-table-name> ``` 其中: - `--connect` 指定 MySQL 数据库的连接地址。 - `--username` 和 `--password` 用于数据库认证。 - `--table` 指定 MySQL 中的源表。 - `--hive-import` 表示将数据导入Hive。 - `--hive-table` 指定 Hive 中的目标表。 - `--hive-overwrite` 允许覆盖目标表中的现有数据。 - `--fields-terminated-by` 和 `--lines-terminated-by` 定义文件中的字段和行分隔符。 - `--target-dir` 指定 HDFS 中的存储路径,Hive 会从此路径读取数据。 ### 2. DolphinScheduler 中的任务配置 在 DolphinScheduler 中,可以通过 Shell 任务或 Sqoop 任务类型执行 Sqoop 命令。具体步骤如下: 1. **创建工作流**:进入 DolphinScheduler Web UI,创建一个新的工作流。 2. **添加任务节点**:选择任务类型为 `Shell` 或 `Sqoop`(如果支持)。 3. **编写脚本**:在任务的脚本编辑器中输入上述 Sqoop 命令。 4. **配置资源**:确保任务节点中引用了正确的资源文件(如配置文件或脚本文件)。 5. **设置调度时间**:根据需求配置调度策略,例如一次性执行或周期性执行。 6. **保存并上线**:完成配置后保存并上线工作流。 ### 3. 环境配置与问题处理 #### 3.1 Hive 依赖问题 在 DolphinScheduler 中运行 Sqoop 任务时,可能会遇到类路径问题,例如 `NoClassDefFoundError` 或 `ClassNotFoundException`。解决方法包括: - 确保所有 Hive 和 Hadoop 的依赖库(如 `hive-metastore` 和 `hadoop-client`)已正确安装并配置。 - 在 DolphinScheduler 的环境变量中设置 `HADOOP_CLASSPATH`,以包含 HiveSqoop 的依赖库。 #### 3.2 Hadoop 配置 确保 Hadoop 的配置文件(如 `core-site.xml` 和 `hdfs-site.xml`)位于 Sqoop 的类路径中。可以通过设置 `HADOOP_CONF_DIR` 环境变量实现: ```bash export HADOOP_CONF_DIR=/opt/installs/hadoop/etc/hadoop ``` #### 3.3 DolphinScheduler 配置 如果 DolphinScheduler 运行在腾讯云等特殊环境中,可能会遇到 `UnknownHostException` 或 `NullPointerException`。需要检查并修改 DolphinScheduler 的配置文件 `common.properties`,确保以下配置正确: ```properties resource.manager.httpaddress.port=5004 ``` ### 4. 数据导入流程示例 假设 MySQL 中有一个表 `employees`,需要导入Hive 中的 `default.employees` 表中,具体步骤如下: 1. **创建 Hive 表**:在 Hive 中提前创建目标表。 ```sql CREATE TABLE default.employees ( id INT, name STRING, department STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'; ``` 2. **执行 Sqoop 命令**:使用 DolphinScheduler 调度 Sqoop 命令将数据导入 Hive。 ```bash sqoop import \ --connect jdbc:mysql://localhost:3306/company_db \ --username root \ --password password \ --table employees \ --hive-import \ --hive-table default.employees \ --hive-overwrite \ --fields-terminated-by ',' \ --lines-terminated-by '\n' \ --target-dir /user/hive/warehouse/default.db/employees ``` 3. **验证数据**:在 Hive 中查询导入数据,确保数据已正确加载。 ```sql SELECT * FROM default.employees; ``` ### 5. 常见问题与解决方案 #### 5.1 NoClassDefFoundError 如果出现 `NoClassDefFoundError` 错误,通常是由于缺少 Hive 或 Hadoop 的依赖库。解决方法包括: - 确保所有必要的 JAR 文件已正确安装。 - 在 Sqoop 命令中使用 `--libjars` 参数指定依赖库的路径。 #### 5.2 UnknownHostException 如果 DolphinScheduler 报 `UnknownHostException`,可能是由于 ResourceManager 的 HTTP 地址配置错误。解决方法包括: - 修改 DolphinScheduler 的 `common.properties` 文件,设置正确的 HTTP 端口。 #### 5.3 NullPointerException 如果 DolphinScheduler 报 `NullPointerException`,可能是由于任务状态获取失败。解决方法包括: - 检查 DolphinScheduler 的日志,确认是否与 ResourceManager 的连接有关。 - 确保 ResourceManager 的 HTTP 地址和端口配置正确。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值