我正在尝试使用Sqoop从PostgreSQL导入一些表数据到HDFS。现在由于许可限制,Sqoop没有为所有符合JDBC的数据库打包JDBC驱动程序。 PostgreSQL就是其中之一。为了与此数据库进行交互,Sqoop需要将相关的JDBC驱动程序安装到预设的类路径中(通常是$ SQOOP_HOME / lib)。
就我而言,Hadoop管理员不向我提供对此预定义类路径的写访问权。有没有其他方法可以指示Sqoop客户端查找某个路径(比如我的主目录)而不是预设位置或者除了预设位置之外?
我查看了官方Apache文档并搜索了互联网,但无法获取任何答案。有人可以帮忙吗?
谢谢!
答案 0 :(得分:2)
根据Sqoop docs,
-libjars <comma separated list of jars>
- 指定要包含在类路径中的逗号分隔的jar文件。
确保在命令中使用-libjars
作为第一个参数。
根据文件,
-files
,-libjars
和-archives
参数通常不与Sqoop一起使用,但它们作为Hadoop内部参数解析系统的一部分包含在内。
因此,需要将JDBC客户端jar放在$SQOOP_HOME/lib
。
答案 1 :(得分:2)
/home/myuser
export HADOOP_CLASSPATH="/home/myuser/postgresql-9.4.1209.jar"
(用您的路径和jar文件名替换/home/myuser/postgresql-9.4.1209.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>
答案 2 :(得分:0)
我最近遇到了此 -libjars
选项的问题。它不能完美地工作。可能这个问题是从 Hadoop jar 命令行选项传播的。可能的选项是使用 HADOOP_CLASSPATH
环境变量指定额外的 jar。
您必须导出驱动程序 jar 文件的路径。
export HADOOP_CLASSPATH=<path_to_driver_jar>.jar
此后,它可以正确拾取您指定的 jar 文件。 -libjars
选项没有正确选择文件。我在 sqoop 1.4.6 版中注意到了这一点。