복붙노트

[HADOOP] 어떻게 하이브 저장 데이터 (HDFS에서로드)?

HADOOP

어떻게 하이브 저장 데이터 (HDFS에서로드)?

나는 하둡 (HDFS와 HBase와)과 하둡 에코 시스템 (하이브, 돼지, 임팔라 등)에 상당히 새로운입니다. 나는 그런 NamedNode, 데이터 노드, 작업 트래커, 태스크 트래커 그들이 어떻게 효율적으로 데이터를 저장하는 탠덤에서 작업 하둡 구성 요소의 좋은 이해를 가지고있다.

같은 하이브 등의 데이터 액세스 계층의 기초를 이해하려고 노력하는 동안, 나는 정확히 어디에 (하이브에서 만든) 테이블의 데이터가 저장됩니다 이해할 필요가? 우리는 하이브에서 외부 및 내부 테이블을 만들 수 있습니다. 외부 테이블웨어 하우스의 같은 테이블에 HDFS 또는 다른 파일 시스템, 하이브 나던 데이터를 저장 될 수있는 것처럼. 무엇 내부 테이블에 대한? 이 테이블은 하둡 클러스터의 데이터 노드 중 하나의 디렉토리로 생성됩니다. 거기에 더 파일은 하이브에서 만든 테이블의 데이터를 저장하기 위해 만들어지고 우리가 로컬 또는 HDFS 파일 시스템에서 이러한 테이블에 데이터를로드하면된다?

예를 들어 말 :

하이브는 emp_feedback 디렉토리에있는 파일의 복사본을 만들 예정? 그것은 데이터 중복의 원인이 실 거예요?

해결법

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

    1.관리되는 테이블을 작성하면 메타 스토어 (RDBMS / HCat에서 만든) 하이브웨어 하우스 디렉토리 (보통 /user/hive/warehouse/dbname/tablename).Also 테이블 구조 (하이브 메타 데이터에서의 테이블 이름과 같은 이름의 디렉토리를 생성합니다 ).

    관리되는 테이블을 작성하면 메타 스토어 (RDBMS / HCat에서 만든) 하이브웨어 하우스 디렉토리 (보통 /user/hive/warehouse/dbname/tablename).Also 테이블 구조 (하이브 메타 데이터에서의 테이블 이름과 같은 이름의 디렉토리를 생성합니다 ).

    당신이 테이블에 데이터를로드하기 전에, (하이브웨어 하우스에서 테이블 이름과 같은 이름)이 디렉토리가 비어 있습니다.

    두 가지 시나리오가있을 수 있습니다.

    주의 : 그것은 항상 데이터 만 하이브에서 사용하지 않는 외부 테이블을 작성하는 것이 좋습니다. 관리 테이블을 제거하면 HDFS (HIVE의 창고)에서 데이터를 삭제합니다.

    HadoopGig

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

    2.그것은 데이터 중복이 발생하지 것이다. 관리 (외부되지 않음) 테이블의 경우 하이브는 창고 디렉토리에 데이터를 이동합니다. 당신의 예에서, 데이터에 '/ 사용자 / big_data / 하이브 / emp_feedback'HDFS에 원래 위치에서 이동합니다. 관리 테이블의 제거에주의, 그것은 또한 HDFS에 제거 데이터로 이어질 것입니다.

    그것은 데이터 중복이 발생하지 것이다. 관리 (외부되지 않음) 테이블의 경우 하이브는 창고 디렉토리에 데이터를 이동합니다. 당신의 예에서, 데이터에 '/ 사용자 / big_data / 하이브 / emp_feedback'HDFS에 원래 위치에서 이동합니다. 관리 테이블의 제거에주의, 그것은 또한 HDFS에 제거 데이터로 이어질 것입니다.

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

    3.당신은 이틀 만에 데이터를 보낼 수 있습니다

    당신은 이틀 만에 데이터를 보낼 수 있습니다

    A) 표 emp_feedback에로드 자료 INPATH 'file_location_of_csv'를 사용;  이 명령은 소스 디렉토리에서 컨텐츠를 제거하고 내부 테이블을 생성 않습니다

    또는)

    B)를 사용 copyFromLocal 또는 HDFS에 로컬 파일을 복사 한 다음 외부 테이블을 만들고 테이블에 데이터를 복사 명령을 넣어. 이제 데이터 소스에서 이동되지 않습니다. 당신은 외부 테이블을 삭제할 수 있지만 여전히 소스 데이터를 사용할 수 있습니다.

    EG

    create external table emp_feedback (
      emp_id int,
      emp_name string
    )
    location '/location_in_hdfs_for_csv file';
    

    외부 테이블을 삭제할 때, 그것은 단지 HIVE 테이블의 메타 데이터를 삭제합니다. 데이터는 여전히 HDFS 파일 위치에 존재한다.

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

    4.알았다. 이것은 내가 지금까지 이해 할 수 있었다 것입니다.

    알았다. 이것은 내가 지금까지 이해 할 수 있었다 것입니다.

    그것은 모든 파일이 포착됩니다에서하는시 테이블의 유형이 작성 어디에되고있다 따라 달라집니다. 다음은 가능한 사용 사례는

    여기에 이미지 설명을 입력

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

    5.당신이 질문에 대답하려면 :

    당신이 질문에 대답하려면 :

    외부 테이블의 경우 :

    하이브는 창고 디렉토리에 데이터를 이동하지 않습니다. 외부 테이블이 삭제되면, 테이블 메타 데이터는 데이터를 삭제하지만,하지 않습니다.

    내부 테이블의 경우

    하이브는 창고 디렉토리에 데이터를 이동합니다. 테이블이 삭제되면, 테이블 메타 데이터와 데이터가 삭제됩니다.

    참고로

    내부 및 외부 테이블 간의 차이 :

    외부 테이블에 대한

    외부 테이블에는 상기 HDFS 서버에있는 파일 만 테이블은 완전히 소스 파일에 연결되어 있지 않습니다.

    외부 테이블을 삭제하면 파일이 여전히 HDFS 서버에 남아 있습니다.

    예를 들어 당신은 다음 HIVE에서 "table_test는"HDFS에서 "파일"을 삭제하지 않습니다 삭제 HIVE-QL을 사용하여 HIVE에서 "table_test"라는 외부 테이블을 생성하고 "파일"파일에 테이블을 연결합니다.

    외부 테이블 파일은 HDFS 파일 구조에 액세스 할 수 있으므로 보안이 HDFS 파일 / 폴더 수준에서 관리 할 필요가 누군가에 액세스 할 수 있습니다.

    메타 데이터는 마스터 노드에서 유지하고, 하이브 외부 테이블 삭제 만 아니라 메타 데이터 / 파일을 삭제한다.

    내부 테이블에 대한

    기본 내부 테이블로, hive.metastore.warehouse.dir의 설정을 기반으로 디렉토리에 저장하면 설정 파일의 위치를 ​​업데이트하여 변경할 수 있습니다 다음 디렉토리 / 사용자 / 하이브 / 창고에 저장됩니다.

    테이블을 삭제하면, 각각의 마스터 노드와 HDFS로부터 메타 데이터를 삭제한다. 내부 테이블 파일 보안은 HIVE를 통해 단독으로 제어됩니다. 보안 아마 스키마 수준에서, HIVE 내에서 관리해야합니다 (조직에 따라 다름).

    하이브는 내부 또는 외부 테이블을 가질 수있다,이 데이터가로드 제어 및 관리 방식에 영향을 미치는 선택입니다.

    때 외부 테이블을 사용합니다 :

    데이터는 또한 하이브 외부 사용된다. 예를 들어, 데이터 파일 판독 및 파일을 잠그지 않고 기존의 프로그램에 의해 처리된다. 데이터는 심지어 DROP 표 후 기본 위치에 남아 있어야합니다. 다양한 가능한 스키마를 반복하는 경우 또는 단일 데이터 집합에 여러 스키마 (테이블 또는 뷰)를 가리키는 경우에 적용 할 수 있습니다. 하이브는 당신이 그 일을 할 것입니다 다른 프로그램이나 프로세스를 가질 수 등 데이터 및 제어 설정, 디렉토리를 소유하지 않아야합니다. 당신은 (SELECT AS) 기존 테이블을 기반으로 테이블을 생성하지 않습니다.

    때 내부 테이블을 사용합니다 :

    데이터는 일시적입니다. 당신은 하이브 완전히 테이블과 데이터의 라이프 사이클을 관리 할.

  6. from https://stackoverflow.com/questions/33401143/how-hive-stores-the-data-loaded-from-hdfs by cc-by-sa and MIT license