sqoop 中 --warehouse-dir 和 --target-dir 命令的区别

Difference between --warehouse-dir and --target-dir commands in sqoop

我无法理解 sqoop 中以下命令之间的区别。如果有人能举例说明就更好了。

 --warehouse-dir and --target-dir 

谢谢

以下参数指向默认配置单元 table location.It 可用于开发目的,您只想对内部 table 执行一些测试。

--warehouse-dir

下面的参数指向一些 hdfs 位置,您可以在其中挂载外部配置单元 tables.This 在生产环境中很有用,您希望每个数据都可用于某些外部目录和外部 table。

--target-dir

--warehouse-dir 

通常,当您使用 sqoop 使用 import-all-tables 工具导入所有 tables 时,通常会使用此选项。 该目录可以是任何内容,您的配置单元 /data/warehouse 目录或其他父目录。所有 table 都将导入到此父目录中。

--target-dir

当您必须使用 import-table 工具导入单个 table 时使用此选项。 对于每个 table,您都必须提及该目录,并且该目录不得已存在于路径中。

--warehouse-dir指向导入数据的Hive文件夹(我在批量导入tables时用过)而导入时需要--target-dir通过查询配置单元(sqoop 错误要求它)。在后一种情况下,它用作映射器的临时区域,后面是 LOAD INPATH。我将 --target-dir 设置为与 --warehouse-dir 相同(在从整个 table 切换到查询导入之后)并且变得空 tables。从 sqoop 命令中删除了 --warehouse-dir 并将 --target-dir 更改为 /tmp/newfolder 并且我对 Hive 的导入很开心。

我们通常使用仓库目录,即使仓库目录多个 table 或单个 table 也能正常工作。

另一个优点是,只有 warehouse-dir 与 S3 一起工作,这一点非常重要,当您希望将外部 tables 数据存储在 s3 中时。

如果您想 运行 为多个 table 执行多个 Sqoop 作业,则需要在每次调用时更改 --target-dir 参数。

作为替代方案,Sqoop 提供了另一个参数 select 输出目录。参数 --warehouse-dir 允许您仅指定父目录,而不是直接指定最终目录。

Sqoop 不会将数据写入仓库目录,而是在仓库目录中创建一个与 table 同名的目录,然后将数据导入其中。

这类似于 Sqoop 将数据导入您在 HDFS 上的主目录的默认情况,唯一的例外是 --warehouse-dir 参数允许您使用主目录以外的目录。table目录。请注意,此参数不需要在每次 table 导入时更改,除非您导入的 table 具有相同的名称。

正如我在导入时得到的:

--仓库目录: 它创建一个目录作为数据库目录(sqoop_db_movies)和table名称(如导入命令中给出的)目录自动创建,导入文件在仓库目录中(数据库目录).

示例: sqoop import --options-file /home/cloudera/sqoop/conn --table movies --warehouse-dir /sqoop_db_movies -m 1

输出为:

/sqoop_db_movies/movies

/sqoop_db_movies/movies/_SUCCESS

/sqoop_db_movies/movies/part-m-00000

--目标目录: 它创建一个目录,作为 table 名称 (sqoop_table_movies) 和导入的文件。

示例: sqoop import --options-file /home/cloudera/sqoop/conn --table movies --target-dir /sqoop_table_movies -m 1

输出为:

/sqoop_table_movies/_SUCCESS

/sqoop_table_movies/part-m-00000