我的日志文件以文本形式存储在hdfs中。当我将日志文件加载到配置单元表中时,所有文件都会被复制。
我能避免所有文本数据存储两次吗?
编辑:我通过以下命令加载它
LOAD DATA INPATH '/user/logs/mylogfile' INTO TABLE `sandbox.test` PARTITION (day='20130221')
然后,我可以在以下位置找到完全相同的文件:
/user/hive/warehouse/sandbox.db/test/day=20130220
我以为是抄袭的。
4条答案
按热度按时间wbrvyc0a1#
我可以说,不用java应用程序直接将数据复制到hdfs,而是将这些文件放在本地文件系统中,并使用以下命令通过hive将它们导入hdfs。
注意
LOCAL
thtygnil2#
使用外部表:
如果您想对外部表使用分区,您将负责管理分区目录。指定的位置必须是hdfs目录。。
如果删除外部表,配置单元将不会删除源数据。如果要管理原始文件,请使用外部表。如果您希望hive执行此操作,请让hive存储在其仓库路径中。
jk9hmnmh3#
您可以使用ALTERTABLEPARTITION语句来避免数据重复。
bd1hkmkf4#
配置单元(至少在真正的群集模式下运行时)无法引用本地文件系统中的外部文件。配置单元可以在表创建或加载操作期间自动导入文件。这背后的原因可能是hive在内部运行mapreduce作业来提取数据。mapreduce从hdfs读取数据,并将数据写回hdfs,甚至在分布式模式下运行。因此,如果文件存储在本地文件系统中,就不能被分布式基础设施使用。