SQOOP可以使用自定义libpath吗?

时间:2016-08-26 11:30:51

标签: hadoop jdbc hadoop2 sqoop

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

就我而言,Hadoop管理员不向我提供对此预定义类路径的写访问权。有没有其他方法可以指示Sqoop客户端查找某个路径(比如我的主目录)而不是预设位置或者除了预设位置之外?

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

谢谢!

3 个答案:

答案 0 :(得分:2)

根据Sqoop docs

  

-libjars <comma separated list of jars> - 指定要包含在类路径中的逗号分隔的jar文件。

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

编辑:

根据文件,

  

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

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

答案 1 :(得分:2)

我昨天开始工作了。以下是要遵循的步骤。

  1. here
  2. 下载相应的JDBC驱动程序
  3. 将jar文件放在所选目录下。我选择了 hadoop集群用户的主目录,即/home/myuser
  4. export HADOOP_CLASSPATH="/home/myuser/postgresql-9.4.1209.jar" (用您的路径和jar文件名替换/home/myuser/postgresql-9.4.1209.jar)
  5. 要执行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>

  6. 要执行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 版中注意到了这一点。