복붙노트

[HADOOP] Hive는 HDFS에 파일을 어디에 저장합니까?

HADOOP

Hive는 HDFS에 파일을 어디에 저장합니까?

하이브 테이블과 실제 HDFS 파일 (또는 오히려 디렉터리) 간의 매핑을 찾는 방법을 알고 싶습니다. 테이블 파일에 직접 액세스해야합니다.

Hive는 HDFS에서 파일을 어디에 저장합니까?

해결법

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

    1.그들이 HDFS에 저장되는 위치는 어디를보아야하는지 쉽게 알 수 있습니다. :)

    그들이 HDFS에 저장되는 위치는 어디를보아야하는지 쉽게 알 수 있습니다. :)

    브라우저에서 http : // NAMENODE_MACHINE_NAME : 50070 /으로 이동하면 Browse the fileystem 링크가있는 페이지로 이동합니다.

    $ HIVE_HOME / conf 디렉토리에는 hive.metastore.warehouse.dir 속성이있는 hive-default.xml 및 / 또는 hive-site.xml이 있습니다. 이 값은 파일 시스템 찾아보기 링크를 클릭 한 후 탐색하려는 위치입니다.

    광산에서는 / usr / hive / warehouse입니다. 해당 위치로 이동하면 테이블 이름이 표시됩니다. 테이블 이름 (그냥 폴더)을 클릭하면 테이블의 파티션이 노출됩니다. 제 경우에는 현재 날짜별로 분할되어 있습니다. 이 레벨의 폴더를 클릭하면 파일을 볼 수 있습니다 (더 많은 파티셔닝은 더 많은 레벨을가집니다). 이 파일들은 실제로 데이터가 HDFS에 저장되는 곳입니다.

    나는이 파일들을 직접 접근하려고 시도하지 않았다. 나는 그것이 수행 될 수 있다고 가정하고있다. 편집에 대해 생각하는 경우 큰 도움이됩니다. :) 필자는 디스크의 하이브 데이터에 직접 액세스하지 않고 필요한 작업을 수행 할 수있는 방법을 찾아 냈습니다. 원시 데이터에 액세스해야하는 경우 하이브 쿼리를 사용하여 결과를 파일에 출력 할 수 있습니다. 이것들은 HDFS의 파일과 똑같은 구조 (열 사이의 구분자 등)를 갖게됩니다. 나는 항상 이와 같은 질문을하고 CSV로 변환합니다.

    디스크에서 쿼리로 데이터를 쓰는 방법은 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML#LanguageManualDML-Writingdataintfilesystemfromqueries를 참조하십시오.

    최신 정보

    Hadoop 3.0.0 - Alpha 1 이후에는 기본 포트 번호가 변경되었습니다. NAMENODE_MACHINE_NAME : 50070이 NAMENODE_MACHINE_NAME : 9870으로 변경됩니다. Hadoop 3.x에서 실행중인 경우 후자를 사용하십시오. 포트 변경 사항의 전체 목록은 HDFS-9427에 설명되어 있습니다.

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

    2.하이브 테이블은웨어 하우스에 반드시 저장되는 것은 아닙니다 (HDFS의 어느 위치 에나 테이블을 만들 수 있기 때문에).

    하이브 테이블은웨어 하우스에 반드시 저장되는 것은 아닙니다 (HDFS의 어느 위치 에나 테이블을 만들 수 있기 때문에).

    DESCRIBE FORMATTED 명령을 사용해야합니다.

    hive -S -e "describe formatted <table_name> ;" | grep 'Location' | awk '{ print $NF }'
    

    파티션을 다른 위치에 저장하고 뒤에 파티션을 추가해야하는 alpha = foo / beta = bar 파티션의 위치를 ​​가져올 수 있습니다 (alpha = 'foo', beta = 'bar').

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

    3.하이브 터미널 유형 :

    하이브 터미널 유형 :

    hive> set hive.metastore.warehouse.dir;
    

    (경로를 인쇄합니다)

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

    4.또한 하이브리드 테이블에 show create table 을 입력하면 하이브 테이블의 정확한 위치를 알 수 있습니다.

    또한 하이브리드 테이블에 show create table 을 입력하면 하이브 테이블의 정확한 위치를 알 수 있습니다.

  5. ==============================

    5.형식화 된 을 설명합니다. 하이브 쉘 안쪽에.

    형식화 된 을 설명합니다. 하이브 쉘 안쪽에.

    테이블의 위치를 ​​나타내는 "위치"값을 확인하십시오.

  6. ==============================

    6.이전에 게시 된 몇 가지 요약을 요약하면, hive-site.xml에서 property hive.metastore.warehouse.dir은 hadoop HDFS 아래에있는 파일의 위치를 ​​지정합니다

    이전에 게시 된 몇 가지 요약을 요약하면, hive-site.xml에서 property hive.metastore.warehouse.dir은 hadoop HDFS 아래에있는 파일의 위치를 ​​지정합니다

    <property>
       <name>hive.metastore.warehouse.dir</name>
       <value>/user/hive/warehouse</value>
    </property>
    

    파일을 보려면 다음 명령을 사용하십시오.

    hadoop fs -ls /user/hive/warehouse
    

    또는

    http://localhost:50070
    Utilities > Browse the file system
    or
    http://localhost:50070/explorer.html#/
    

    hadoop-2.7.3, hive-2.1.1에서 테스트되었습니다.

  7. ==============================

    7.hive-site.xml 파일을 보면 다음과 같은 내용을 볼 수 있습니다.

    hive-site.xml 파일을 보면 다음과 같은 내용을 볼 수 있습니다.

    <property>
       <name>hive.metastore.warehouse.dir</name>
       <value>/usr/hive/warehouse </value>
       <description>location of the warehouse directory</description>
     </property>
    

    / usr / hive / warehouse는 모든 관리 테이블의 기본 위치입니다. 외부 테이블은 다른 위치에 저장 될 수 있습니다.

    형식화 된 설명은 하이브 셸 명령으로 더 일반적으로 하이브 테이블과 관련된 데이터의 위치를 ​​찾을 수 있습니다.

  8. ==============================

    8.하이브에서 테이블은 실제로 몇 군데에 저장됩니다. 특히, 테이블을 매우 크게 또는 커지면 파티션을 사용하면 각 파티션마다 자체 저장 영역을 가질 수 있습니다.

    하이브에서 테이블은 실제로 몇 군데에 저장됩니다. 특히, 테이블을 매우 크게 또는 커지면 파티션을 사용하면 각 파티션마다 자체 저장 영역을 가질 수 있습니다.

    테이블 데이터 또는 파티션을 기본 HIVE 명령을 사용하여 만들면 기본 위치를 표시하려면 다음과 같이하십시오. (덮어 쓰기 ... 파티션 ... 등) :

    describe formatted dbname.tablename
    

    HIVE 테이블에서 특정 파티션의 실제 위치를 표시하려면 대신 다음을 수행하십시오.

    describe formatted dbname.tablename partition (name=value)
    

    테이블이 "있어야"하는 파일 시스템을보고 그곳에 파일이 없다면 새로운 파티션을 만들고 그 파티션을 다른 위치로 가리켜 테이블이 생성 될 가능성이 높습니다. 이는 제 3 자 등의 일일 수입품과 같은 것들로부터 테이블을 만드는 훌륭한 방법입니다. 따라서 파일을 다른 곳으로 복사하거나 다른 장소에 두 번 이상 저장하지 않아도됩니다.

  9. ==============================

    9.특정 테이블이 저장되는 위치를 확인하는 또 다른 방법은 하이브 대화식 인터페이스에서이 쿼리를 실행하는 것입니다.

    특정 테이블이 저장되는 위치를 확인하는 또 다른 방법은 하이브 대화식 인터페이스에서이 쿼리를 실행하는 것입니다.

    show create table table_name;
    

    여기서 table_name은 주제 테이블의 이름입니다.

    'customers'테이블에 대한 위 쿼리의 예는 다음과 같습니다.

    CREATE TABLE `customers`(
      `id` string, 
      `name` string)
    COMMENT 'Imported by sqoop on 2016/03/01 13:01:49'
    ROW FORMAT DELIMITED 
      FIELDS TERMINATED BY ',' 
      LINES TERMINATED BY '\n' 
    STORED AS INPUTFORMAT 
      'org.apache.hadoop.mapred.TextInputFormat' 
    OUTPUTFORMAT 
      'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
    LOCATION
      'hdfs://quickstart.cloudera:8020/user/hive/warehouse/
       sqoop_workspace.db/customers'
    TBLPROPERTIES (
      'COLUMN_STATS_ACCURATE'='true', 
      'numFiles'='4', 
      'totalSize'='77', 
      'transient_lastDdlTime'='1456866115')
    

    위의 예에서 LOCATION은 집중해야하는 부분입니다. 그것은 하이브 창고의 hdfs 위치입니다.

    이 솔루션을 원한다면 좋아하는 것을 잊지 마십시오. 건배!

  10. ==============================

    10.샌드 박스에서는 / apps / hive / warehouse / 및 일반 클러스터 / 사용자 / 하이브 /웨어 하우스로 이동해야합니다.

    샌드 박스에서는 / apps / hive / warehouse / 및 일반 클러스터 / 사용자 / 하이브 /웨어 하우스로 이동해야합니다.

  11. ==============================

    11.하이브 데이터베이스는 .db 확장자를 가진 HDFS 내의 디렉토리 일뿐입니다.

    하이브 데이터베이스는 .db 확장자를 가진 HDFS 내의 디렉토리 일뿐입니다.

    따라서 HDFS에 연결된 Unix 또는 Linux 호스트에서 HDFS 배포 유형에 따라 다음을 검색하십시오.

    hdfs dfs -ls -R / 2> / dev / null | grep db 또는 hadoop fs -ls -R / 2> / dev / null | grep db

    .db 데이터베이스 디렉토리의 전체 경로가 표시됩니다. 모든 테이블은 각각의 .db 데이터베이스 디렉토리 아래에 상주합니다.

  12. from https://stackoverflow.com/questions/5058400/where-does-hive-store-files-in-hdfs by cc-by-sa and MIT license