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 <comma separated list of jars>
- 指定以逗号分隔的 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://我最近遇到了这个-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 可以与自定义接收器一起使用吗?
如何使 didSelectRowAt IndexPath 与自定义委托一起使用