我正在尝试将一个表从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中删除了那个文件夹,它工作正常。任何建议。
3条答案
按热度按时间icnyk63a1#
根据文件
默认情况下,导入将转到新的目标位置。如果目标目录已经存在于hdfs中,sqoop将拒绝导入并覆盖该目录的内容。
因此,如果您已经将表导入hdfs,那么
device
目录已经存在将是正常行为。当您添加--hive-import
命令,sqoop将数据复制到hdfs中(在您的情况下,在device
目录)并用数据的布局更新配置单元元存储。您可以使用--hive overwrite选项来告诉sqoop覆盖表:
如果配置单元表已经存在,则可以指定--hive overwrite选项以指示必须替换配置单元中的现有表。
我希望这有帮助。
yrwegjxp2#
使用导入控件参数
--delete-target-dir
. 它将删除导入目标目录(如果存在)。ncecgwcz3#
您需要了解sqoop导入到hive的工作原理。
它分为3个步骤:
将数据导入hdfs(主目录/表名称)
创建配置单元表。。。。
在路径中加载数据。。。
根据文件,
将数据导入hdfs或省略此步骤后,sqoop将生成一个配置单元脚本,其中包含使用配置单元类型定义列的create table操作,以及一个load data inpath语句,用于将数据文件移动到配置单元的仓库目录中。
对你来说,第一步就失败了。