2017-09-12 2 views
-1

나는 두 개의 하이브 테이블을 가지고있다.
레코드 수 (함께 aprox) : 5,779,062,484
두 테이블이 3 키가 : LOC_ID (INT), ITEM_ID (INT), week_detail (문자열)
내가 가입하고 (내부 조인) 위의 키를 기준으로 두 테이블 및 결과 데이터의 크기가 같습니다. 예 : 5779062484
참여할 전체 시간은 aprox입니다. 3 시간.
나는 테이블을 버킷으로 묶고 성능을 향상시키기 위해 결합하려고합니다.
버킷의 개수 및 버킷을 사용해야하는 열 수는 얼마나됩니까?
내부 조인을 기준으로 두 테이블의 데이터 만 직접 선택합니다.
성능 향상을 위해 클러스터의 특정 설정을 사용할 수 있습니까? 명심해야 할하이브 테이블의 버킷 수를 결정 하시겠습니까?

답변

1

몇 가지 (내 자신의 경험을 바탕으로) :

  • 은 (최신 DIST에 128메가바이트) 소형의 HDP 블록 크기보다 바람직하게는 더 큰에 버킷을하지 마십시오.
  • 즉, item_id가 1-1000 범위에 있고 크기가 5MB 이상인 1000 개의 버킷을 가질 수 있습니다. 이는 "hdp 작은 파일 문제"에 추가되므로 바람직하지 않습니다. (요약하면, hdfs에 작은 파일이 많을 때 namenode는 큰 부담이 될 것입니다.)
  • 약 40 개의 버킷이 있어야합니다.
  • 기본 키를 모두 기반으로 버킷을 선택할 수도 있지만 키 하나만을 기준으로 효율/속도가 향상되는지 여부는 알 수 없습니다. 어쩌면 당신은 그것을 시험해 볼 수 있습니다. 매우 결과에 관심이 있습니다. 나는 당신이 모든 키 (버킷 ~ 40 개)를 버킷으로 묶어서 가장 빠른 속도 향상을 얻을 것이라고 생각하지만 이것은 이론적 인 추측에 불과합니다.
  • 설정을 위해 Tez을 켭니다. 이 내 옵션 (또는이 클러스터에 따라/노드 크기의 다수)입니다 hive.tez.container.size = 10240 --hiveconf hive.tez.java.opts = -Xmx8192m (!) 참고가

: 나는 것 일반적으로 대부분의 Hive 작업에 Spark SQL을 사용하지만 Spark은 현재 버전에서 버킷 또는 트랜잭션 테이블을 지원하지 않습니다.

+0

두 개의 테이블에 대한 내 조인은 32 개의 버킷으로 최적화되었지만이 두 테이블의 로딩 시간은 삽입시 32 개의 축소 기가 추가되어 증가했습니다. 어떤 방법이나 설정도 최적화 할 수 있습니까? –

+0

이경 소켓, 스레드 및 병렬 실행에 대한 자세한 내용은 여기를 참조하십시오. https://community.hortonworks.com/articles/22419/hive-on-tez-performance-tuning-determining-reducer.html – bigdatadev

관련 문제