【问题标题】:Sqoop with query clause带有查询子句的 Sqoop
【发布时间】:2017-12-20 16:23:34
【问题描述】:

我需要将一些数据从 Oracle 移动到 Hive,我发现 Sqoop 可能是一个有用的工具。 问题是我需要处理查询并将结果插入目标数据库的表中。

Oracle 函数结果 --> HiveDB.myTable

我找到了这个命令:

sqoop import --connect jdbc:oracle:thin:@******:1522/**
--username myUsername --password pwd --query '...' 
--hive-import --split-by "myID" --hive-table "hive-table" --hive-database "hive-database"

但我需要指定 --target-dir 强制,并且我在 HDFS 中没有写入权限。

仅当我使用 --query 时才如此,因为如果我使用 --table,则不需要 --target-dir

有人知道是否有办法使用查询来避免 "--target-dir" 属性?

【问题讨论】:

  • 您无法避免使用 target-dir 作为查询选项。当您说您没有写入 HDFS 的权限时,这不可能是真的,因为在表选项中,如果您选择忽略目标目录,SQOOP 仍将写入 HDFS,但在默认位置下。默认位置在 /user/hive/warehouse// 下。试试这个位置作为目标目录。我确信数据会写在那里。
  • 另一个选项是使用“--where”选项,它不需要--target-dir。如果您从单个表中导入,则此选项有效。
  • @Ramesh 我试图指定 --target-dir /user/hive/warehouse//,但我无法在文件夹 /user 中读/写/hive/仓库。
  • 您能否将您运行的 SQOOP 命令添加到问题中。实际的命令,而不是您已经给出的示例。另外,您能否发布您收到的确切错误消息。
  • 您可以访问 Hive 吗?

标签: oracle hive hdfs sqoop


【解决方案1】:

除了 hive 表,你可以使用 hcatalog 表,但你必须给出 target-dir 的位置。

【讨论】:

    【解决方案2】:

    您需要在 HDFS 中具有写入权限才能导入数据。大多数时候 hdfs:///tmp/ 目录将对所有用户具有写访问权限。使用它作为你的目标目录并运行你的命令。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-04
      相关资源
      最近更新 更多