我无法理解sqoop中以下命令之间的区别。如果有人可以用小例子来解释,那会更好。
--warehouse-dir and --target-dir
由于
答案 0 :(得分:14)
下面的参数指向默认的hive表位置。它可以用于开发目的,你只想在内部表上执行一些测试。
- warehouse-dir
下面的参数指向一些hdfs位置,您可以在其中安装外部配置单元表。这在生产环境中非常有用,您希望每个数据都可用于某些外部目录和外部表。
- target-dir
答案 1 :(得分:6)
我在进口时遇到了:
- 仓库 - 目录: 它创建了一个目录,用作数据库目录( sqoop_db_movies )和表名(在import命令中给出)目录,该目录是使用仓库目录(数据库目录)中的导入文件自动创建的。
<强> - 目标-DIR:强> 它创建了一个目录,该目录用作导入文件的表名( sqoop_table_movies )。
示例:强>
1。 sqoop import --options-file /home/cloudera/sqoop/conn --table movies --warehouse-dir /sqoop_db_movies -m 1
输出为:
/ sqoop_db_movies /电影
/ sqoop_db_movies /电影/ _SUCCESS
/ sqoop_db_movies /电影/部分-M-00000
2。 sqoop import --options-file /home/cloudera/sqoop/conn --table movies --target-dir /sqoop_table_movies -m 1
输出为:
/ sqoop_table_movies / _SUCCESS
/ sqoop_table_movies /部分-M-00000
答案 2 :(得分:3)
--warehouse-dir
通常在使用sqoop导入所有表时使用此选项。 此目录可以是任何内容,可以是您的hive / data / warehouse目录或其他一些父目录。所有表都将导入此父目录。
--target-dir
当您使用导入表工具导入单个表时,将使用此选项。 对于每个表,您都要提及该目录,并且该路径不得存在。
答案 3 :(得分:1)
如果要为多个表运行多个Sqoop作业,则需要在每次调用时更改--target-dir参数。
作为替代方案,Sqoop提供了另一个参数来选择输出目录。参数--warehouse-dir允许您仅指定父目录。
,而不是直接指定最终目录Sqoop不是将数据写入仓库目录,而是创建一个与仓库目录中的表名相同的目录,并在那里导入数据。
这类似于Sqoop将数据导入HDFS上的主目录的默认情况,但明显的例外是--warehouse-dir参数允许您使用主目录以外的目录。请注意,除非您要导入具有相同名称的表,否则不需要对每个表导入更改此参数。
答案 4 :(得分:0)
- 仓库目录指向Hive文件夹以导入数据(我在批量导入表时使用了它),而在通过查询导入Hive时需要--target-dir(sqoop errs要求它)。在后一种情况下,它被用作映射器的临时区域,后面是LOAD INPATH。我设置--target-dir与--warehouse-dir相同(从整个表切换到查询导入之后)并且正在获取空表。从sqoop命令中删除了--warehouse-dir,并将--target -dir更改为/ tmp / newfolder,我对Hive的导入很高兴。
答案 5 :(得分:0)
我们通常使用仓库目录,即使仓库目录多表或单表工作正常。
另一个优点是,当您希望外部表数据存储在s3中时,只有Warehouse-dir与S3一起使用,这一点非常重要。