如何在不删除源文件的情况下从HDFS加载数据到hive?
当使用命令将数据从 HDFS 加载到 Hive 时
LOAD DATA INPATH 'hdfs_file' INTO TABLE tablename;
,看起来像是将 hdfs_file 移动到 hive/warehouse
目录。 是否可以(如何?)复制它而不是移动它,以便该文件被另一个进程使用。
When load data from HDFS to Hive, using
LOAD DATA INPATH 'hdfs_file' INTO TABLE tablename;
command, it looks like it is moving the hdfs_file to hive/warehouse
dir.
Is it possible (How?) to copy it instead of moving it, in order, for the file, to be used by another process.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
从你的问题来看,我假设你的数据已经存在于 hdfs 中。
因此,您不需要
LOAD DATA
,这会将文件移动到默认配置单元位置/user/hive/warehouse
。您可以使用external
关键字简单地定义表,这会将文件保留在原位,但会在 hive 元存储中创建表定义。参见这里:创建表 DDL
例如:
请注意,您使用的格式可能与默认格式不同(如 JigneshRawal 在评论中提到的)。您可以使用自己的分隔符,例如使用 Sqoop 时:
from your question I assume that you already have your data in hdfs.
So you don't need to
LOAD DATA
, which moves the files to the default hive location/user/hive/warehouse
. You can simply define the table using theexternal
keyword, which leaves the files in place, but creates the table definition in the hive metastore. See here:Create Table DDL
eg.:
Please note that the format you use might differ from the default (as mentioned by JigneshRawal in the comments). You can use your own delimiter, for example when using Sqoop:
我发现,当您同时使用 EXTERNAL TABLE 和 LOCATION 时,Hive 会创建表,并且最初不会出现任何数据(假设您的数据位置与 Hive 'LOCATION' 不同)。
当您使用 'LOAD DATA INPATH' 命令时,数据从数据位置移动(而不是复制)到您在创建 Hive 表时指定的位置。
如果创建 Hive 表时未指定位置,它将使用内部 Hive 仓库位置,并且数据将从源数据位置移动到内部 Hive 数据仓库位置(即 /user/hive/warehouse/)。
I found that, when you use EXTERNAL TABLE and LOCATION together, Hive creates table and initially no data will present (assuming your data location is different from the Hive 'LOCATION').
When you use 'LOAD DATA INPATH' command, the data get MOVED (instead of copy) from data location to location that you specified while creating Hive table.
If location is not given when you create Hive table, it uses internal Hive warehouse location and data will get moved from your source data location to internal Hive data warehouse location (i.e. /user/hive/warehouse/).
可以使用“加载数据”的替代方案,其中数据不会从现有源位置移动到 Hive 数据仓库位置。
您可以使用带有“LOCATION”选项的 ALTER TABLE 命令。下面是所需的命令
,这里唯一的条件是,位置应该是目录而不是文件。
希望这能解决问题。
An alternative to 'LOAD DATA' is available in which the data will not be moved from your existing source location to hive data warehouse location.
You can use ALTER TABLE command with 'LOCATION' option. Here is below required command
The only condition here is, the location should be a directory instead of file.
Hope this will solve the problem.