是否有可能将数据导入到蜂巢表而不复制数据(Is it possible to import data

2019-08-17 08:52发布

我登录存储在HDFS的文本文件。 当我在日志文件加载到蜂巢表,所有的文件都复制。

我可以避免存储两次我所有的文本数据?

编辑:我通过以下命令加载它

LOAD DATA INPATH '/user/logs/mylogfile' INTO TABLE `sandbox.test` PARTITION (day='20130221')

然后,我可以找到完全相同的文件:

/user/hive/warehouse/sandbox.db/test/day=20130220

我以为它被复制。

Answer 1:

使用外部表:

CREATE EXTERNAL TABLE sandbox.test(id BIGINT, name STRING) ROW FORMAT
              DELIMITED FIELDS TERMINATED BY ','
              LINES TERMINATED BY '\n' 
              STORED AS TEXTFILE
              LOCATION '/user/logs/';

如果你想使用分区与外部表,你将负责管理该分区的目录。 指定的位置必须是一个HDFS目录..

如果你把一个外部表蜂巢不会删除源数据。 如果想管理你的原始文件,使用外部表。 如果你想蜂巢做吧,让蜂巢店其仓库路径内。



Answer 2:

我可以说,而不是由你的Java应用程序直接向HDFS复制数据,在本地文件系统中的文件,并使用以下命令他们通过蜂巢导入到HDFS。

LOAD DATA LOCAL INPATH '/your/local/filesystem/file.csv' INTO TABLE `sandbox.test` PARTITION (day='20130221')

注意LOCAL



Answer 3:

您可以使用ALTER TABLE语句的分区,以避免数据重复。

create External table if not exists TestTable (testcol string) PARTITIONED BY (year INT,month INT,day INT) row format delimited fields terminated by ',';

ALTER table TestTable partition (year='2014',month='2',day='17') location 'hdfs://localhost:8020/data/2014/2/17/';


Answer 4:

蜂巢(在真正的集群模式下运行ATLEAST时)不能指在本地文件系统中的外部文件。 蜂房表创建或加载操作过程中自动导入文件。 这背后的原因可能是配置单元运行MapReduce作业内部提取数据。 MapReduce的从HDFS读取和写回HDFS,甚至在分布式模式下运行。 因此,如果文件存储在本地文件系统,它不能由分布式基础架构上使用。



文章来源: Is it possible to import data into Hive table without copying the data
标签: hadoop hive hdfs