Может ли Hive рекурсивно спускаться в подкаталоги без разделов или редактирования hive-site.в XML?

у меня есть несколько журналов веб-сервера, которые я хотел бы запросить с помощью 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;

Я видел, как другие сообщения устанавливают эти свойства на уровне таблицы (например,проблема создания внешней таблицы Hive с помощью tblproperties):

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

к сожалению, это не сработало для меня: таблица не возвращает никаких записей, когда я запрашиваю ее. Я понимаю, что можно установить эти свойства в hive-site.xml, но я бы предпочел не вносить никаких изменений, которые могут повлиять на других пользователей, если мне это не нужно.

Q) есть ли способ создать таблицу, которая спускается в подкаталоги без использования разделов, внесения изменений на уровне сайта или выполнения этих 4 команд каждый раз?

4 ответов


используя Hive в HDInsight, я задаю следующие свойства перед созданием внешней таблицы в запросе Hive, и она работает для меня.

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

это не свойства таблицы.

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>

в улье-сайт.в XML


Если вы используете ambari, задайте следующие свойства для Hive advanced config внутри пользовательского сайта-улья.XML.

**- набор улей.вход.dir.рекурсивный=TRUE

установить улей.mapred.поддержки.подкаталоги=TRUE

установить улей.поддержки.подкаталоги=TRUE

набор mapred.вход.dir.рекурсивный=TRUE**

а затем перезапустите затронутые службы. Это будет читать все данные рекурсивно.


настройки из сообщения ozw1z5rd работали на Hortonworks

alter table .... set blproperties (
    "hive.input.dir.recursive" = "TRUE",
    "hive.mapred.supports.subdirectories" = "TRUE",
    "hive.supports.subdirectories" = "TRUE",
    "mapred.input.dir.recursive" = "TRUE");