Hadoop 是否可以在不复制数据的情况下将数据导入配置单元表

Hadoop 是否可以在不复制数据的情况下将数据导入配置单元表,hadoop,hive,hdfs,Hadoop,Hive,Hdfs,我将日志文件作为文本存储在HDFS中。当我将日志文件加载到配置单元表中时,将复制所有文件 我可以避免将所有文本数据存储两次吗 编辑:我通过以下命令加载它 LOAD DATA INPATH '/user/logs/mylogfile' INTO TABLE `sandbox.test` PARTITION (day='20130221') 然后,我可以在以下位置找到完全相同的文件: /user/hive/warehouse/sandbox.db/test/day=20130220 我假设它是被

我将日志文件作为文本存储在HDFS中。当我将日志文件加载到配置单元表中时,将复制所有文件

我可以避免将所有文本数据存储两次吗

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

LOAD DATA INPATH '/user/logs/mylogfile' INTO TABLE `sandbox.test` PARTITION (day='20130221')
然后,我可以在以下位置找到完全相同的文件:

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

我假设它是被复制的。

我可以说,不是通过java应用程序将数据直接复制到HDFS,而是将这些文件放在本地文件系统中,并使用以下命令通过配置单元将它们导入HDFS

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

使用外部表:

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目录

如果删除外部表,配置单元将不会删除源数据。
如果要管理原始文件,请使用外部表。如果希望配置单元执行此操作,请让配置单元存储在其仓库路径中。

您可以使用alter table partition语句来避免数据重复

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/';

配置单元(至少在真正群集模式下运行时)无法引用本地文件系统中的外部文件。配置单元可以在表创建或加载操作期间自动导入文件。这背后的原因可能是Hive在内部运行MapReduce作业来提取数据。MapReduce可以从HDFS读取数据,也可以写回HDFS,甚至可以在分布式模式下运行。因此,如果文件存储在本地文件系统中,分布式基础设施将无法使用它

你怎么说,是抄袭的?如何将它们加载到配置单元表中?我通过路径“xxx”中的
将数据加载到表yyy
(请参阅后期编辑),然后在
/user/hive/warehouse
中找到该文件。我想知道它是否可以留在那里(我想我必须在我的目录中强制执行分区结构,但这很好),它是如何存储在HDFS中的?它是一个CSV文本文件。它是通过一个Java应用程序放的。那么,你怎么知道,它是一个HDFS目录,文件存储在这个目录中?你能检查一下你的蜂巢配置中的
hive.metastore.warehouse.dir
属性点在哪里吗?谢谢,那确实可以。另一个(效率较低)选项是删除原始文件。然后我猜答案是:不,你不能告诉hive把数据留在原来的位置,而只是假设它是一个表。由于文件非常大,Java应用程序使用Hadoop库直接写入HDFS。我可以用Java-to-Hive连接器做同样的事情吗?或者,如果我通过HDFS API写入适当的配置单元目录,配置单元会假定它是一个数据文件吗?关于最后一部分。是的,如果您将文件直接放入配置单元仓库,则日期将在配置单元中可用,请记住根据表()的定义调整文件夹结构