Sqoop:强制Sqoop制作目标目录
Sqoop: Force Sqoop to make the target directory
对整个Hadoop系统还是个新手。顾名思义,有没有办法让Sqoop在导入的时候创建目标目录呢?或者目标目录在发送到 HDFS 之前是否总是必须存在。
谢谢。
如果目标目录不存在,sqoop 会根据您在 sqoop 命令中指定的路径创建一个目标目录
--target-dir <dir>
如果您已经有一个目录并且如果您尝试 运行 sqoop 命令,它会失败并且为了避免您必须指定以下选项并且它将删除该目录(如果存在)。
--delete-target-dir
一个来自 cloudera vm box 的例子,它有默认 mysql 和样本数据
sqoop import \
--connect jdbc:mysql://localhost:3306/retail_db \
--username root \
--password cloudera \
--target-dir /user/cloudera/sqoop_import/orders \
--delete-target-dir \
--num-mappers 2 \
--query "select * from orders " \
--split-by order_id
或者,您也可以指定父目录,所有 table 文件夹都将使用 table 名称创建。在这种情况下 --target-dir 与 --warehouse-dir
不兼容
sqoop import \
--connect jdbc:mysql://localhost:3306/retail_db \
--username root \
--password cloudera \
--table orders \
--warehouse-dir /user/cloudera/sqoop_import/
对整个Hadoop系统还是个新手。顾名思义,有没有办法让Sqoop在导入的时候创建目标目录呢?或者目标目录在发送到 HDFS 之前是否总是必须存在。
谢谢。
如果目标目录不存在,sqoop 会根据您在 sqoop 命令中指定的路径创建一个目标目录
--target-dir <dir>
如果您已经有一个目录并且如果您尝试 运行 sqoop 命令,它会失败并且为了避免您必须指定以下选项并且它将删除该目录(如果存在)。
--delete-target-dir
一个来自 cloudera vm box 的例子,它有默认 mysql 和样本数据
sqoop import \
--connect jdbc:mysql://localhost:3306/retail_db \
--username root \
--password cloudera \
--target-dir /user/cloudera/sqoop_import/orders \
--delete-target-dir \
--num-mappers 2 \
--query "select * from orders " \
--split-by order_id
或者,您也可以指定父目录,所有 table 文件夹都将使用 table 名称创建。在这种情况下 --target-dir 与 --warehouse-dir
不兼容sqoop import \
--connect jdbc:mysql://localhost:3306/retail_db \
--username root \
--password cloudera \
--table orders \
--warehouse-dir /user/cloudera/sqoop_import/