3

请找到我的以下问题并帮助我解决它。

我有一个 sqoop 语句,它使用 attunity jdbc 驱动程序将数据从大型机带到 Hadoop(Hive)。

    sqoop import \
    --connect "jdbc:attconnect://X.X.1.1:8883;DefTdpName=PROD_E;OneTdpMode=1"\ 
    --driver "com.attunity.jdbc.NvDriver" \
   --query Select * FROM how_record WHERE \$CONDITIONS" \
    --fields-terminated-by "\t" \
    --hive-import \
    --hive-overwrite \
    --delete-target-dir  \
    --null-string '\\N' \
    --null-non-string '\\N' \
    --hive-delims-replacement '' \
    --target-dir "path/how_record" \
    --fetch-size 50000 \
    --hive-table "how_record" -m 1

当我第一次在 sqoop 语句之上运行时,我不断收到套接字超时错误。

ERROR manager.SqlManager: Error executing statement:
java.sql.SQLException: JBC0088E: JBC0002E: Socket timeout detected: Read timed out

java.sql.SQLException: JBC0088E: JBC0002E: Socket timeout detected: Read timed out

            at com.attunity.jdbc.NvSQLWarning.createSQLException(Unknown Source)

            at com.attunity.comm.XmsgComm.xMsgThrowTimeoutEx(Unknown Source)

            at com.attunity.comm.XmsgComm.treatInterruptedIOException(Unknown Source)

            at com.attunity.comm.XmsgComm.xMsgPerformCall(Unknown Source)

            at com.attunity.comm.Daemon.GetServer(Unknown Source)

            at com.attunity.navapi.SysTdp.getRemoteSysTdp(Unknown Source)

            at com.attunity.jdbc.NvConnectionBase.open(Unknown Source)

            at com.attunity.jdbc.NvConnectPropertiesBase.openConnection(Unknown Source)

            at com.attunity.jdbc.NvDriverCoreBase.connect(Unknown Source)

            at com.attunity.jdbc.NvDriverCoreBase.connect(Unknown Source)

            at java.sql.DriverManager.getConnection(DriverManager.java:664)

            at java.sql.DriverManager.getConnection(DriverManager.java:270)

但是当我第二次(立即)运行到一个以上时,错误会自动解决并且 sqoop 正在成功完成。

只有当我第一次运行 sqoop 时,我才会遇到这个问题。

我浏览了一些博客,错误可能与 JDBC 中的连接池有关。

我的背景主要是相关的DATA,在JAVA方面没有太多经验。

有人可以帮我找出实际问题和解决方案。

提前致谢!!

4

2 回答 2

2

参考24.1.Sqoop 支持的数据库

请参阅Attunity 驱动程序配置

尝试在 sqoop 导入命令中使用 --driver 选项指定适当的驱动程序。

根据您的集群,下载nvjdbc2.jar并将其放置在 sqoop 文档中指定的适当位置。

要使用的类名:com.attunity.jdbc.NvDriver

虽然 JDBC 是一个兼容层,它允许程序通过一个通用 API 访问许多不同的数据库,但每个数据库使用的 SQL 语言的细微差别可能意味着 Sqoop 不能开箱即用地使用每个数据库,或者某些数据库可能以低效的方式使用。

即使 Sqoop 在内部支持数据库,您可能仍需要在客户端的 $SQOOP_HOME/lib 路径中安装数据库供应商的 JDBC 驱动程序。Sqoop 可以从客户端 $SQOOP_HOME/lib 中的任何 jar 中加载类,并将它们用作它运行的任何 MapReduce 作业的一部分;与旧版本不同,您不再需要在服务器上的 Hadoop 库路径中安装 JDBC jar。

于 2019-12-29T23:50:10.560 回答
0

您是否查看过数据库服务器上的负载?我猜这就是瓶颈所在。此配置仅在您可以扩展数据库服务器或拥有多个服务器时有用,每个服务器都有一组不同的表。

于 2019-12-26T17:07:26.987 回答