복붙노트

[HADOOP] 하나의 테이블에서 select를 실행할 때 전체 데이터베이스를 잠급니다.

HADOOP

하나의 테이블에서 select를 실행할 때 전체 데이터베이스를 잠급니다.

HIVE 0.13은 데이터베이스의 테이블에서 select 문을 실행할 때 전체 데이터베이스를 잠글 것입니다 (Zookeeper의 데이터베이스 노드의 자식으로 LOCK-0000000000과 같은 노드가 보입니다). HIVE는 select 문을 실행할 때도 전체 스키마에 대해 공유 잠금을 작성합니다. 이렇게하면 원래 쿼리가 완료되고 잠금이 해제 될 때까지 데이터베이스의 다른 테이블에서 CREATE / DELETE 문이 고정됩니다.

아무도 이것에 대한 방법을 알고 있습니까? 다음 링크는 동시성이 해제되어 있음을 암시하지만 전체 테이블을 교체 할 때이를 수행 할 수 없으며 전체 내용을 교체하기 전에 테이블에 액세스하는 select 문이 없는지 확인해야합니다.

http://mail-archives.apache.org/mod_mbox/hive-user/201408.mbox/%3C0eba01cfc035$3501e4f0$9f05aed0$@com%3E

use mydatabase;
select count(*) from large_table limit 1;     # this table is very large and hive.support.concurrency=true`

다른 하이브 셸에서 첫 번째 쿼리가 실행되는 동안 :

use mydatabase;
create table sometable (id string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'  STORED AS TEXTFILE ;

문제는 첫 번째 쿼리 (선택)가 완료 될 때까지“테이블 만들기”가 실행되지 않는다는 것입니다.

최신 정보: Cloudera의 Hive CDH-5.2.1-1 배포판을 사용하고 있으며이 문제가 있습니다.

해결법

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

    1.나는 그들이 Hive 0.13에서 그렇게하지 않았다고 생각합니다. 리소스 관리자를 확인하고 여러 Hive 쿼리를 실행할 때 충분한 메모리가 있는지 확인하십시오.

    나는 그들이 Hive 0.13에서 그렇게하지 않았다고 생각합니다. 리소스 관리자를 확인하고 여러 Hive 쿼리를 실행할 때 충분한 메모리가 있는지 확인하십시오.

    아시다시피 각 Hive 쿼리는 맵 감소 작업을 트리거하고 YARN에 충분한 리소스가 없으면 이전 실행중인 작업이 완료 될 때까지 기다립니다. 메모리 관점에서 문제에 접근하십시오.

    모든 최고!

  2. from https://stackoverflow.com/questions/27894955/hive-locks-entire-database-when-running-select-on-one-table by cc-by-sa and MIT license