hadoop - 可以递归地在没有分区或者编辑配置单元 site.xml的?

  显示原文与译文双语对照的内容
51 3

我有一些web服务器日志,我想用配置单元查询。 在HDFS中,目录结构如下所示:


/data/access/web1/2014/09
/data/access/web1/2014/09/access-20140901.log
[... etc.. .]
/data/access/web1/2014/10
/data/access/web1/2014/10/access-20141001.log
[... etc.. .]
/data/access/web2/2014/09
/data/access/web2/2014/09/access-20140901.log
[... etc.. .]
/data/access/web2/2014/10
/data/access/web2/2014/10/access-20141001.log
[... etc.. .]

我可以创建外部表:


CREATE EXTERNAL TABLE access(
 host STRING,
 identity STRING,
 user STRING,
 time STRING,
 request STRING,
 status STRING,
 size STRING,
 referer STRING,
 agent STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex" ="([^ ]*) ([^ ]*) ([^ ]*) (-|[[^]]*]) ([^"]*|"[^"]*") (-|[0-9]*) (-|[0-9]*)(?: ([^"]*|"[^"]*") ([^"]*|"[^"]*"))?",
"output.format.string" ="%1$s %2$s %3$s %4$s %5$s %6$s %7$s %8$s %9$s")
LOCATION '/data/access/'

"。"。除非在运行配置单元查询之前运行以下命令,否则配置单元不会下降到子文件夹:


set hive.input.dir.recursive=true;
set hive.mapred.supports.subdirectories=true;
set hive.supports.subdirectories=true;
set mapred.input.dir.recursive=true;

我已经看到其他帖子在表级别设置这些属性( 比如 。 使用 TBLPROPERTIES 创建配置单元外部表的问题:


TBLPROPERTIES ("hive.input.dir.recursive" ="TRUE", 
"hive.mapred.supports.subdirectories" ="TRUE",
"hive.supports.subdirectories" ="TRUE", 
"mapred.input.dir.recursive" ="TRUE");

不幸的是,这对我并不适用: 查询时,该表不返回任何记录。 我理解可以在配置单元to中设置这些属性,但我宁愿不会对它的他用户造成任何影响。

Q ) 是有一种方法可以创建一个表,而不使用分区,使站点更改,或者每次运行 4命令。

时间: 原作者:

109 2

在HDInsight中使用 Hive,在配置单元查询中创建外部表之前设置了以下属性,它适用于我。


SET hive.mapred.supports.subdirectories=TRUE;
SET mapred.input.dir.recursive=TRUE;

...