[hadoop] Hive 내부 테이블과 외부 테이블의 차이점은 무엇입니까?

누구든지 Hive의 외부 테이블과 내부 테이블의 차이점을 말할 수 있습니까? 테이블을 떨어 뜨릴 때 차이가 있다는 것을 알고 있습니다. 데이터와 메타 데이터가 내부에서 삭제되고 외부 테이블에서 메타 데이터 만 삭제된다는 의미를 이해하지 못합니다. 누구든지 노드 측면에서 나를 설명해 주시겠습니까?



답변

Hive는 상태를 추적하는 데 사용하는 마스터 노드에 관계형 데이터베이스를 가지고 있습니다. 예를 들어, CREATE TABLE FOO(foo string) LOCATION 'hdfs://tmp/';이 테이블 스키마는 데이터베이스에 저장됩니다.

파티션 된 테이블이있는 경우 파티션은 데이터베이스에 저장됩니다 (이를 통해 하이브는 파일 시스템으로 이동하여 파티션을 찾지 않고도 파티션 목록을 사용할 수 있습니다). 이런 것들이 ‘메타 데이터’입니다.

내부 테이블을 삭제하면 데이터가 삭제되고 메타 데이터도 삭제됩니다.

외부 테이블을 삭제하면 메타 데이터 만 삭제됩니다. 즉, 하이브는 이제 해당 데이터를 알지 못합니다. 데이터 자체를 건드리지 않습니다.


답변

Hive 테이블은 EXTERNAL 또는 INTERNAL로 만들 수 있습니다. 이것은 데이터가로드, 제어 및 관리되는 방법에 영향을주는 선택입니다.

다음과 같은 경우 EXTERNAL 테이블을 사용합니다.

  1. 데이터는 Hive 외부에서도 사용됩니다. 예를 들어, 데이터 파일은 파일을 잠그지 않는 기존 프로그램에서 읽고 처리합니다.
  2. 데이터는 DROP TABLE 후에도 기본 위치에 남아 있어야합니다. 이는 단일 데이터 세트에서 여러 스키마 (테이블 또는 뷰)를 가리 키거나 가능한 다양한 스키마를 반복하는 경우에 적용될 수 있습니다.
  3. ASV와 같은 사용자 지정 위치를 사용하려고합니다.
  4. Hive는 데이터 및 제어 설정, 디렉토리 등을 소유해서는 안되며 이러한 작업을 수행 할 다른 프로그램이나 프로세스가 있습니다.
  5. 기존 테이블 (AS SELECT)을 기반으로 테이블을 작성하지 않습니다.

다음과 같은 경우 내부 테이블을 사용합니다.

데이터는 일시적입니다.

Hive가 테이블 및 데이터의 수명주기를 완전히 관리하기를 원합니다.


답변

질문에 대답하려면 :

외부 테이블의 경우 Hive는 테이블 생성 중에 지정된 LOCATION에 데이터를 저장합니다 (일반적으로웨어 하우스 디렉토리가 아님). 외부 테이블이 삭제되면 테이블 메타 데이터는 삭제되지만 데이터는 삭제되지 않습니다.

내부 테이블의 경우 Hive는웨어 하우스 디렉터리에 데이터를 저장합니다. 테이블이 삭제되면 테이블 메타 데이터와 데이터가 모두 삭제됩니다.


참고로

내부 테이블과 외부 테이블의 차이점 :

외부 테이블의 경우-

  • 외부 테이블은 HDFS 서버에 파일을 저장하지만 테이블은 소스 파일에 완전히 연결되지 않습니다.

  • 외부 테이블을 삭제해도 파일은 HDFS 서버에 남아 있습니다.

    예를 들어 HIVE-QL을 사용하여 HIVE에서 “table_test” 라는 외부 테이블 을 만들고 테이블을 “file” 파일에 연결하는 경우 , 다음 HDFS에서 “파일”을 삭제하지 않습니다 HIVE에서 “table_test”을 삭제 .

  • 외부 테이블 파일은 HDFS 파일 구조에 대한 액세스 권한이있는 모든 사용자가 액세스 할 수 있으므로 HDFS 파일 / 폴더 수준에서 보안을 관리해야합니다.

  • 메타 데이터는 마스터 노드에 유지되며 HIVE에서 외부 테이블을 삭제하면 데이터 / 파일이 아닌 메타 데이터 만 삭제됩니다.


내부 테이블 용

  • 의 설정에 따라 디렉토리에 저장 hive.metastore.warehouse.dir,
    기본 내부 테이블로 저장되어 다음 디렉토리에 “/ 사용자 / 하이브 / 창고” 당신은 설정 파일의 위치를 업데이트하여 변경할 수 있습니다.
  • 테이블을 삭제하면 마스터 노드와 HDFS에서 각각 메타 데이터와 데이터가 삭제됩니다.
  • 내부 테이블 파일 보안은 HIVE를 통해서만 제어됩니다. 보안은 아마도 스키마 수준 (조직에 따라 다름)에서 HIVE 내에서 관리되어야합니다.

Hive에는 내부 또는 외부 테이블이있을 수 있으며 이는 데이터로드, 제어 및 관리 방법에 영향을주는 선택입니다.

다음과 같은 경우 EXTERNAL 테이블을 사용합니다.

  • 데이터는 하이브 사용될 밖에 . 예를 들어, 데이터 파일은 파일을 잠그지 않는 기존 프로그램에서 읽고 처리합니다.
  • 데이터는 DROP TABLE 후에도 기본 위치에 남아 있어야합니다. 이는 단일 데이터 세트에서 여러 스키마 (테이블 또는 뷰)를 가리 키거나 가능한 다양한 스키마를 반복하는 경우에 적용될 수 있습니다.
  • Hive는 데이터를 소유하고 설정, 디렉토리 등을 제어해서는 안됩니다 . 이러한 작업을 수행하는 다른 프로그램이나 프로세스가있을 수 있습니다.
  • 기존 테이블 (AS SELECT)을 기반으로 테이블을 작성하지 않습니다.

다음과 같은 경우 내부 테이블을 사용합니다.

  • 데이터는 임시 .
  • Hive가 테이블 및 데이터의 수명주기를 완전히 관리하기를 원합니다 .

출처 :

HDInsight : Hive 내부 및 외부 테이블 소개

Hadoop- HIVE의 내부 및 외부 테이블


답변

내부 테이블 데이터는웨어 하우스 폴더에 저장되는 반면 외부 테이블 데이터는 테이블 생성시 언급 한 위치에 저장됩니다.

따라서 내부 테이블을 삭제하면웨어 하우스 폴더 아래의 데이터뿐만 아니라 스키마도 삭제되지만 외부 테이블의 경우 손실되는 스키마 만 삭제됩니다.

따라서 외부 테이블을 삭제 한 후 다시 되돌리려면 동일한 스키마로 테이블을 다시 만들고 원래 데이터 위치를 가리킬 수 있습니다. 이제 분명해지기를 바랍니다.


답변

지금까지 제한된 연구 및 테스트 (Hive 1.1.0 -cdh5.12.0 사용)를 기반으로 한 동작 (의도 된 용도가 아님)의 유일한 차이점은 테이블이 삭제 될 때

  • 내부 (관리) 테이블의 데이터가 HDFS 파일 시스템에서 삭제됩니다.
  • 외부 테이블의 데이터는 HDFS 파일 시스템에서 삭제되지 않습니다.

(참고 : https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL의 ‘관리 및 외부 테이블’섹션을 참조하십시오. 여기에는 제가 완전히 이해하지 못한 다른 차이점이 나열 되어 있습니다. )

Hive는 위에서 아래로 다음 우선 순위에 따라 테이블을 생성해야하는 위치를 선택한다고 생각합니다.

  1. 테이블 생성 중에 정의 된 위치
  2. 테이블이 생성되는 데이터베이스 / 스키마 생성에 정의 된 위치입니다.
  3. 기본 Hive웨어 하우스 디렉토리 (hive.site.xml의 hive.metastore.warehouse.dir 등록 정보)

“하이브 테이블 생성”중에 “위치”옵션을 사용하지 않으면 위의 우선 순위 규칙이 사용됩니다. 이는 내부 및 외부 테이블 모두에 적용됩니다. 이는 내부 테이블이 반드시웨어 하우스 디렉토리에 상주 할 필요는 없으며 다른 곳에 상주 할 수 있음을 의미합니다.

참고 : 일부 시나리오를 놓쳤을 수 있지만 제한된 탐색을 기반으로 할 때 내부 및 외부 테이블의 동작은 위에서 설명한 한 가지 차이점 (데이터 삭제)을 제외하고는 동일한 것으로 보입니다. 내부 및 외부 테이블 모두에 대해 다음 시나리오를 시도했습니다.

  1. 위치 옵션이 있거나없는 테이블 만들기
  2. 파티션 옵션이 있거나없는 테이블 생성
  3. Hive Load 및 Insert 문을 사용하여 새 데이터 추가
  4. Hive 외부의 테이블 위치에 데이터 파일 추가 (HDFS 명령 사용) 및 “MSCK REPAIR TABLE 명령을 사용하여 테이블 새로 고침
  5. 테이블 삭제

답변

외부 테이블에서 드롭하면 테이블의 스키마 만 삭제되며 테이블 데이터는 물리적 위치에 존재합니다. 따라서 데이터를 삭제하려면 hadoop fs-rmr tablename을 사용하십시오. 관리되는 테이블 하이브는 테이블에 대한 모든 권한을 갖습니다. 외부 테이블에서는 사용자가 제어 할 수 있습니다.


답변

내부 테이블은 Hive가 삭제를 포함하여 데이터의 전체 수명주기를 관리하도록하려는 경우 유용하지만 외부 테이블은 파일이 Hive 외부에서 사용되는 경우 유용합니다.