sqoop配置单元导入

jxct1oxe  于 2021-06-03  发布在  Sqoop
关注(0)|答案(3)|浏览(401)

我正在尝试将一个表从mysql数据库导入配置单元表,以了解配置单元导入的工作原理。表名是我已经在hdfs的主目录hdfs中导入的设备。我使用下面的语句在配置单元中创建了一个表。

create table device_hive (device_num int,device_name varchar(255));

现在我执行下面的sqoop import语句来从 device mysql数据库中的表到配置单元

sqoop import --connect jdbc:mysql://localhost/loudacre --table device
--username training --password training --hive-import --hive-table device_hive 
--hive-database hadoopexam --hive-table device_hive --fields-terminated-by '\001' 
--table device --columns "device_num,device_name"

无法说明输出目录设备已存在。错误消息中的位置指向 device 我之前使用sqoop导入的hdfs中的文件夹。
我的问题是为什么sqoop要访问基本目录并检查该文件夹。这是一个配置单元导入,所以sqoop不应该直接转到配置单元/仓库目录吗?我从hdfs中删除了那个文件夹,它工作正常。任何建议。

icnyk63a

icnyk63a1#

根据文件
默认情况下,导入将转到新的目标位置。如果目标目录已经存在于hdfs中,sqoop将拒绝导入并覆盖该目录的内容。
因此,如果您已经将表导入hdfs,那么 device 目录已经存在将是正常行为。当您添加 --hive-import 命令,sqoop将数据复制到hdfs中(在您的情况下,在 device 目录)并用数据的布局更新配置单元元存储。
您可以使用--hive overwrite选项来告诉sqoop覆盖表:
如果配置单元表已经存在,则可以指定--hive overwrite选项以指示必须替换配置单元中的现有表。
我希望这有帮助。

yrwegjxp

yrwegjxp2#

使用导入控件参数 --delete-target-dir . 它将删除导入目标目录(如果存在)。

ncecgwcz

ncecgwcz3#

您需要了解sqoop导入到hive的工作原理。
它分为3个步骤:
将数据导入hdfs(主目录/表名称)
创建配置单元表。。。。
在路径中加载数据。。。
根据文件,
将数据导入hdfs或省略此步骤后,sqoop将生成一个配置单元脚本,其中包含使用配置单元类型定义列的create table操作,以及一个load data inpath语句,用于将数据文件移动到配置单元的仓库目录中。
对你来说,第一步就失败了。

相关问题