Hive:从多级目录加载数据
Posted
技术标签:
【中文标题】Hive:从多级目录加载数据【英文标题】:Hive : Load data from Multi-level directory 【发布时间】:2016-09-23 08:52:20 【问题描述】:我想将多级目录中的数据加载到我的配置单元表中。但错误是:
hive> LOAD DATA INPATH 'hdfs://hadoop1:9000/logClassify/unLock' INTO
TABLE unLock;
失败:SemanticException Line 1:17 路径无效 ''hdfs://hadoop1:9000/logClassify/unLock'':源包含目录: hdfs://hadoop1:9000/logClassify/unLock/2016
我已经在 hive-site.xml 文件中设置了参数:
<property>
<name>mapred.input.dir.recursive</name>
<value>true</value>
</property>
<property>
<name>hive.mapred.supports.subdirectories</name>
<value>true</value>
</property>
不知道为什么?
【问题讨论】:
您的 hdfs://hadoop1:9000/logClassify/unLock 目录中似乎有年度数据。更好地使用 hive 分区并创建分区列年份。 【参考方案1】:如果你想从本地存储中获取数据
LOAD DATA LOCAL INPATH '/home/data' INTO TABLE table_name;
如果你想从 hdfs 中获取数据,只需删除 LOCAL
LOAD DATA LOCAL INPATH '/user/data' INTO TABLE table_name;
【讨论】:
无需在路径中添加主机名 (hdfs://hadoop1:9000) 并且您的上述错误“源包含目录:hdfs://hadoop1:9000/logClassify/unLock/2016”表示此位置包含目录,因此请为其提供文件的正确目标路径。跨度> 我要递归子目录,因为不同子目录下的文件很多。 因此您必须提供该子目录路径,因为这里 hive 无法找到您要加载的正确文件。【参考方案2】:试试这个:
在 Hive 命令行界面输入:
设置 hive.input.dir.recursive=true;
设置 hive.mapred.supports.subdirectories=true;
设置 hive.supports.subdirectories=true;
之后,加载数据。例如,如果您有一级目录:
LOAD DATA INPATH "/data/testdata/" INTO TABLE testtable;*
对于两级目录:
LOAD DATA INPATH '/data/testdata/ /' INTO TABLE 测试表;
希望这会有所帮助。
【讨论】:
【参考方案3】:试试这个:
在 Hive 命令行界面输入:
set hive.input.dir.recursive=true;
set hive.mapred.supports.subdirectories=true;
set hive.supports.subdirectories=true;
之后,加载数据。例如,如果您有一级目录:
LOAD DATA INPATH "/data/testdata/*" INTO TABLE testtable;
对于两级目录:
LOAD DATA INPATH '/data/testdata/* /*' INTO TABLE testtable;
希望这会有所帮助。
【讨论】:
以上是关于Hive:从多级目录加载数据的主要内容,如果未能解决你的问题,请参考以下文章