我有一些我想用Hive查询的网络服务器日志。 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/'
...虽然Hive不会进入子文件夹,除非我在运行Hive查询之前运行以下命令:
set hive.input.dir.recursive=true;
set hive.mapred.supports.subdirectories=true;
set hive.supports.subdirectories=true;
set mapred.input.dir.recursive=true;
我已经看到其他帖子在表级设置了这些属性(例如Issue creating Hive External table using tblproperties):
TBLPROPERTIES ("hive.input.dir.recursive" = "TRUE",
"hive.mapred.supports.subdirectories" = "TRUE",
"hive.supports.subdirectories" = "TRUE",
"mapred.input.dir.recursive" = "TRUE");
不幸的是,这对我来说并不起作用:当我查询表时,表格不会返回任何记录。我了解可以在hive-site.xml中设置这些属性,但如果我不需要,我不会做任何可能影响其他用户的更改。
问)有没有办法创建一个下载到子目录中的表而不使用分区,进行站点范围的更改,或每次都运行这4个命令?
答案 0 :(得分:14)
在HDInsight中使用Hive,我在Hive查询中创建外部表之前设置了以下属性,它对我有用。
SET hive.mapred.supports.subdirectories=TRUE;
SET mapred.input.dir.recursive=TRUE;
答案 1 :(得分:2)
这些不是表格属性。
TBLPROPERTIES ("hive.input.dir.recursive" = "TRUE",
"hive.mapred.supports.subdirectories" = "TRUE",
"hive.supports.subdirectories" = "TRUE",
"mapred.input.dir.recursive" = "TRUE");
A)添加
<property>
<name>mapred.input.dir.recursive</name>
<value>true</value>
</property>
<property>
<name>hive.mapred.supports.subdirectories</name>
<value>true</value>
</property>
在hive-site.xml中
答案 2 :(得分:1)
如果您正在使用ambari,请设置以下属性以在自定义hive-site.xml中配置高级配置。
** - SET hive.input.dir.recursive = TRUE
SET hive.mapred.supports.subdirectories = TRUE
SET hive.supports.subdirectories = TRUE
SET mapred.input.dir.recursive = TRUE **
然后重新启动受影响的服务。这将以递归方式读取所有数据。
答案 3 :(得分:0)
alter table .... set blproperties (
"hive.input.dir.recursive" = "TRUE",
"hive.mapred.supports.subdirectories" = "TRUE",
"hive.supports.subdirectories" = "TRUE",
"mapred.input.dir.recursive" = "TRUE");