2016-09-22 2 views
4

성능 향상 (예 : 조인)을 위해 먼저 테이블 통계를 계산하는 것이 좋습니다.하이브 또는 임팔라의 컴퓨팅 테이블 통계가 아파치 스파크를 가속화합니까?

하이브에서 내가 할 수있는 ::

analyze table <table name> compute statistics; 

을 임팔라에서 :

compute stats <table name>; 

(하이브 테이블에서 읽는) 나의 불꽃 응용 프로그램은 미리 계산 된 통계의 혜택을합니까? 그렇다면 어떤 것을 실행해야합니까? 그들은 하이브 전이에 통계를 저장하고 있습니까? 매개 변수 spark.sql.autoBroadcastJoinThreshold에 대한 스파크 1.6.1 (https://spark.apache.org/docs/1.6.1/sql-programming-guide.html)의 문서에서 내가 힌트를 발견 : 나는 클라우 데라에 5.5.4

주 스파크 1.6.1을 사용하고

참고가 현재 통계 Hive Metastore 테이블에 대해서만 지원됩니다.이 테이블은 ANALYZE TABLE COMPUTE STATISTICS noscan이 실행되었습니다.

답변

0

임팔라의 계산 통계가 최신 구현이므로 하이브 설정을 조정할 필요가 없습니다. 공식 문서에서

:

는 통계 수집의 하이브 기반 방법을 사용하는 경우, 하이브 측에서 필요한 구성에 대한 자세한 내용은 하이브 위키를 참조하십시오. Cloudera는 에 임팔라 COMPUTE STATS 문을 사용하여 통계 수집 프로세스의 잠재적 인 구성 및 확장 성 문제를 방지 할 것을 권장합니다.

테이블이 분할되지 않은 경우 Impala는 COLUMNS에 COLUMNS에 대한 ANALYZE TABLE COMPUTE STATISTICS 분석을 실행하면 결과 열 통계 만 사용할 수 있습니다. Impala는 Hive가 생성 한 열 통계를 분할 된 테이블에 사용할 수 없습니다.

유용한 링크 : 난 당신이 하이브 컨텍스트와 스파크 (또는) 불꽃-SQL에 하이브를 사용하는 가정입니다 https://www.cloudera.com/documentation/enterprise/5-5-x/topics/impala_perf_stats.html

1

. 그렇다면 하이브로 분석을 실행해야합니다.

분석 테이블 < ...> 일반적으로 테이블을 만든 후 또는 중요한 삽입/변경이있는 경우 실행해야합니다. MR 또는 스파크 작업 인 경우로드 단계 자체가 끝날 때이 작업을 수행 할 수 있습니다.

스파크에서 하이브를 사용하는 경우 분석시 다음 링크의 구성도 사용하십시오. 이 값은 각 쿼리의 세션 수준에서 설정할 수 있습니다. 나는 생산에서이 링크 https://cwiki.apache.org/confluence/display/Hive/Hive+on+Spark%3A+Getting+Started의 매개 변수를 사용하고 잘 작동합니다.

0

여기에 곧 출시 될 Spark 2.3.0이 있습니다 (일부 기능은 2.2.1 또는 이전 버전에서 이미 릴리스되었을 수 있습니다).

내 스파크 애플리케이션 (하이브 테이블에서 읽기)도 사전 계산 된 통계의 이점을 줍니까?

그것은 수 임팔라 또는 하이브는 테이블 통계를 기록하는 경우 (예를 들어, 테이블의 크기 또는 행 수) 스파크에서 읽고 (및 쿼리 계획에 대한 자신의 스파크 통계로 변환) 할 수있는 테이블 메타 데이터의 하이브 메타 스토어한다.

DESCRIBE EXTENDEDspark-shell의 SQL 명령을 사용하여 쉽게 확인할 수 있습니다.

scala> spark.version 
res0: String = 2.4.0-SNAPSHOT 

scala> sql("DESC EXTENDED t1 id").show 
+--------------+----------+ 
|info_name  |info_value| 
+--------------+----------+ 
|col_name  |id  | 
|data_type  |int  | 
|comment  |NULL  | 
|min   |0   | 
|max   |1   | 
|num_nulls  |0   | 
|distinct_count|2   | 
|avg_col_len |4   | 
|max_col_len |4   | 
|histogram  |NULL  | 
+--------------+----------+ 

ANALYZE TABLE COMPUTE STATISTICS noscan

스파크가 사용하는 하나의 통계치, 즉 테이블의 총 크기를 계산한다 (NO 행으로 인해 noscan 옵션 메트릭 계산). Impala와 Hive가 "적절한"위치에 기록했다면 Spark SQL은 DESC EXTENDED으로 표시합니다.

표 수준 통계에는 DESC EXTENDED tableName을 사용하고 임팔라 또는 하이브에 의해 생성 된 통계를 찾았는지 확인하십시오. 그들이 DESC EXTENDED의 출력에 있다면 조인을 최적화하는 데 사용됩니다 (그리고 집계 및 필터의 경우에도 비용 기반 최적화를 사용).


열 통계는 테이블 속성에서 (불꽃 특정 직렬 형식으로) 저장되고 난 정말 임팔라 또는 하이브는 통계를 계산하고 스파크 SQL 호환 형식으로 저장할 수 있다는 것을 의심한다.