복붙노트

[HADOOP] 중첩 된 하위 디렉토리의 입력이있는 하이브 만들기 테이블

HADOOP

중첩 된 하위 디렉토리의 입력이있는 하이브 만들기 테이블

나는 /data/logs/[foldername]/[filename].avro와 같은 파일 경로의 HDFS에 Avro 형식의 데이터를 가지고 있습니다. 이 모든 로그 파일, 즉 / data / logs / * / * 형식의 모든 파일에 대해 Hive 테이블을 만들고 싶습니다. (모두 동일한 Avro 스키마를 기반으로합니다.)

mapred.input.dir.recursive = true 플래그로 아래의 쿼리를 실행하고 있습니다.

CREATE EXTERNAL TABLE default.testtable
  ROW FORMAT SERDE
  'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
  STORED AS INPUTFORMAT
  'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
  OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
  LOCATION 'hdfs://.../data/*/*'
  TBLPROPERTIES (
    'avro.schema.url'='hdfs://.../schema.avsc') 

LOCATION이 덜 중첩되도록 변경하지 않으면 (즉, 특정 폴더 이름이 포함 된 'hdfs : //.../data/ [foldername] /') 테이블이 비어있게됩니다. LOCATION의 중첩 경로가 적 으면 아무런 문제가 발생하지 않았습니다.

이러한 모든 [foldername] 폴더의 데이터를 원본으로 할 수 있기를 바랍니다. 재귀 적 입력 선택을 내 중첩 된 디렉토리에 추가로 적용하려면 어떻게합니까?

해결법

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

    1.재귀 디렉토리를 활성화하려면이 하이브 설정을 사용하십시오.

    재귀 디렉토리를 활성화하려면이 하이브 설정을 사용하십시오.

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

    외부 테이블을 생성하고 루트 디렉토리를 위치로 지정하십시오 :

    LOCATION 'hdfs://.../data'
    

    테이블 위치 및 모든 하위 디렉토리에서 데이터를 쿼리 할 수 ​​있습니다.

  2. ==============================

    2.문제를 해결할 수있는 한 가지 방법은 폴더 이름을 외부 테이블에 파티션 열로 추가하는 것입니다. 그런 다음 데이터 디렉토리에서 작성하는 것처럼 테이블을 작성할 수 있습니다. 또는 이러한 중첩 된 파일을 단일 디렉토리에서 병합 할 수 있습니다.

    문제를 해결할 수있는 한 가지 방법은 폴더 이름을 외부 테이블에 파티션 열로 추가하는 것입니다. 그런 다음 데이터 디렉토리에서 작성하는 것처럼 테이블을 작성할 수 있습니다. 또는 이러한 중첩 된 파일을 단일 디렉토리에서 병합 할 수 있습니다.

    나는 당신이 하이브에게 1 개의 테이블로 간주되는 모든 폴더들의 입력을 요구할 수 없을 것이라고 생각합니다.

    이 질문은 비슷한 문제를 해결하는 것 같습니다. 하이브에 외부 테이블을 생성 할 때 위치를 특정 파일의 디렉토리로 지정할 수 있습니까?

    동일한 문맥에서 열린 jira 문제가 있습니다. https://issues.apache.org/jira/browse/HIVE-951

    더 많이 브라우징 나는이 게시물을 보았습니다. SimlinkInputTextFormat을 대안으로 사용하는 것이 좋습니다. 나는 이것이 당신의 Avro 포맷으로 얼마나 잘 날지 모르겠다. https://hive.apache.org/javadocs/r0.10.0/api/org/apache/hadoop/hive/ql/io/SymlinkTextInputFormat.html

  3. from https://stackoverflow.com/questions/24438148/hive-create-table-with-inputs-from-nested-sub-directories by cc-by-sa and MIT license