SQOOP 可以与自定义 libpath 一起使用吗?

Posted

技术标签:

【中文标题】SQOOP 可以与自定义 libpath 一起使用吗?【英文标题】:Can SQOOP work with a custom libpath? 【发布时间】:2016-08-26 11:30:51 【问题描述】:

我正在尝试使用 Sqoop 从 PostgreSQL 导入一些表数据到 HDFS。现在由于许可限制,Sqoop 没有为所有 JDBC 兼容数据库打包 JDBC 驱动程序。 PostgreSQL 就是其中之一。为了与该数据库交互,Sqoop 需要将相关的 JDBC 驱动程序安装到预设的类路径(通常为 $SQOOP_HOME/lib)中。

在我的例子中,Hadoop 管理员没有向我提供对此预定义类路径的写入权限。除了预设位置之外,是否还有其他方法可以指示 Sqoop 客户端查看某个路径(例如,我的主目录)?

我查看了官方的 Apache 文档并搜索了互联网,但无法获得任何答案。有人可以帮忙吗?

谢谢!

【问题讨论】:

这个question 可能有用。 【参考方案1】:

我昨天得到了这个工作。以下是要遵循的步骤。

    从here下载合适的JDBC驱动 将 jar 文件放在选择的目录下。我选择了 hadoop集群用户的主目录,即/home/myuser export HADOOP_CLASSPATH="/home/myuser/postgresql-9.4.1209.jar" (将 /home/myuser/postgresql-9.4.1209.jar 替换为您的路径和 jar 文件名)

    要执行 Sqoop 导入,您可以使用以下命令。

    sqoop import --connect 'jdbc:postgresql://<postgres_server_url>:<postgres_port>/<db_name>' --username <db_user_name> --password <db_user_password> --table <db_table_name> --warehouse-dir <existing_empty_hdfs_directory>

    要执行 Sqoop 导出,您可以使用以下命令。

    sqoop export --connect 'jdbc:postgresql://<postgres_server_url>:<postgres_port>/<db_name>' --username <db_user_name> --password <db_user_password> --table <db_table_name> --export-dir <existing_hdfs_path_containing_export_data>

【讨论】:

这并不能在任何地方用 sqoop /opt/sqlanywhere17/java/sajdbc4.jar 修复 sql,我仍然没有得到 dbjdbc17 in java.library.path【参考方案2】:

根据 Sqoop docs,

-libjars &lt;comma separated list of jars&gt;- 指定以逗号分隔的 jar 文件以包含在类路径中。

确保在命令中使用-libjars 作为第一个参数。

编辑:

根据文档,

-files-libjars-archives 参数通常不与 Sqoop 一起使用,但它们包含在 Hadoop 内部参数解析系统中。

因此,JDBC 客户端 jar 需要放在 $SQOOP_HOME/lib

【讨论】:

我试过这个 sqoop import --libjars /home/myuser/postgresql-9.4.1209.jar --connect 'jdbc:postgres://:5432/' -- username -P --table 并得到以下错误 ERROR tool.BaseSqoopTool: Got error creating database manager: java.io.IOException: No manager for connect string: jdbc:postgres://xxxx.xxxx. xxxx:5432/xxxxxx 在 org.apache.sqoop.ConnFactory.getManager(ConnFactory.java:192) 在 org.apache.sqoop.tool.BaseSqoopTool.init(BaseSqoopTool.java:256) 在 org.apache.sqoop.tool。 ImportTool.init(ImportTool.java:89) ..... @TapasSaha 我在最后尝试并得到了同样的错误。我用详细信息更新了答案【参考方案3】:

我最近遇到了这个-libjars 选项的问题。它不能完美地工作。可能这个问题是从 Hadoop jar 命令行选项传播的。可能的选择是使用 HADOOP_CLASSPATH 环境变量指定额外的 jar。

您必须导出驱动程序 jar 文件的路径。

export HADOOP_CLASSPATH=<path_to_driver_jar>.jar

在此之后,它可以正确拾取您指定的jar文件。 -libjars 选项没有正确选择文件。我在 sqoop 版本 1.4.6 中注意到了这一点。

【讨论】:

以上是关于SQOOP 可以与自定义 libpath 一起使用吗?的主要内容,如果未能解决你的问题,请参考以下文章

SparkContext.textFile 可以与自定义接收器一起使用吗?

我可以将 Excel 的自动填充与自定义模式一起使用吗?

如何使 didSelectRowAt IndexPath 与自定义委托一起使用

将 SharedElement Activity 转换与自定义视图一起使用

将 Firebase 身份验证与自定义提供程序一起使用

如何将 Qt 属性与自定义类一起使用?