복붙노트

[HADOOP] Hive가 파티션없이 또는 hive-site.xml을 편집하여 서브 디렉토리로 재귀 적으로 내려갈 수 있습니까?

HADOOP

Hive가 파티션없이 또는 hive-site.xml을 편집하여 서브 디렉토리로 재귀 적으로 내려갈 수 있습니까?

내가 하이브로 쿼리하고 싶은 웹 서버 로그가 있습니다. 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;

다른 게시물이 테이블 수준에서 이러한 속성을 설정하는 것을 보았습니다 (예 : 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) 파티션을 사용하지 않고 하위 디렉토리로 내려가는 테이블을 만들거나 사이트 전체를 변경하거나 매번 네 개의 명령을 실행하는 방법이 있습니까?

해결법

  1. ==============================

    1.HDInsight에서 하이브를 사용하여, 하이브 쿼리에서 외부 테이블을 생성하기 전에 다음 속성을 설정합니다.

    HDInsight에서 하이브를 사용하여, 하이브 쿼리에서 외부 테이블을 생성하기 전에 다음 속성을 설정합니다.

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

    2.이들은 표 속성이 아닙니다.

    이들은 표 속성이 아닙니다.

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

    가) 추가

      <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에서

  3. ==============================

    3.ambari를 사용하는 경우 사용자 정의 hive-site.xml 내에 고급 구성을 하이브하기 위해 다음 등록 정보를 설정하십시오.

    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 **

    영향을받은 서비스를 다시 시작하십시오. 이렇게하면 모든 데이터가 반복적으로 읽혀집니다.

  4. ==============================

    4.ozw1z5rd의 게시물 설정이 Hortonworks에서 작동했습니다.

    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");    
    
  5. from https://stackoverflow.com/questions/26767713/can-hive-recursively-descend-into-subdirectories-without-partitions-or-editing-h by cc-by-sa and MIT license