스파크 SQL 작업, 하이브 성능 최적화 및 불꽃 ---- 재 인쇄 (46), 스파크 SQL 프로파일 링 및 성능 최적화 작업

첫째, 작동 원리 분석

 

 

둘째, 성능 최적화

1 , 셔플 설정의 과정에서의 평행도 : spark.sql.shuffle.partitions (SQLContext.setConf ())

2 , INT로 설정 될 수있다 같은 하이브 데이터웨어 하우스 구축 방법, 데이터 타입의 적절한 세트는 BIGINT 설정하지 않는다. 데이터 유형에 의한 불필요한 메모리 오버 헤드를 감소시킨다.

3 SQL을 작성할 때, 같은 이름을 선택하면 명확한 열 이름, 제공하기 위해 시도 에서 학생. 쓰기 * 선택하지 마십시오 방법.

4 , 조회 결과의 병렬 처리 : 결과 스파크 SQL 쿼리 예컨대 1000 개 이상의 데이터와 같은, 다량의 후 재 처리하지 일회용 부담 () 드라이버를 마십시오.
foreach는 () 연산자를 사용하여, 조회 결과를 처리 평행.

5 , 캐시 테이블 : 더 테이블에 두 번 이상 사용할 수있는 SQL 문의 경우, 캐시 할 수 있습니다, SQLContext.cacheTable (TABLENAME), 또는 DataFrame.cache ()를 사용 할 수 있습니다.
스파크 SQL은 메모리 저장 형식 테이블 열을 캐시합니다. 메모리 사용 및 오버 헤드 GC를 최소화하기 위해 압축을 다음 스파크 SQL 열은 스캔에만 사용해야 할 수 있으며, 자동으로 최적화 할 수 있습니다.
SQLContext.uncacheTable (TABLENAME)는 캐시 테이블에서 제거 할 수있다. SQLContext.setConf ()를 제공 spark.sql.inMemoryColumnarStorage.batchSize 파라미터 (디폴트 10000), 단위 열을 저장하도록 구성 될 수있다.

6 spark.sql.autoBroadcastJoinThreshold, 기본 10485760 (:, 방송 테이블 조인 (10) 메가 바이트). 충분한 메모리의 경우 크기가 증가 될 수에서의 파라미터 테이블에 참가하는 경우, 소요
훨씬 덜 최대 값보다, 그것은 성능 최적화에 방송 될 수 있습니다.

7 , 텅스텐 계획 : spark.sql.tungsten.enabled 기본적 사실, 자동 메모리 관리입니다.


사실, 네 번째 포인트, 캐시 테이블과 방송 테이블을 조인하는 가장 효과적인도 매우 좋다!

 

三, 스파크에 하이브

하이브에 스파크 배경 :
sparkSQL과 Saprk ON 하이브 :
하이브가 큰 데이터 필드, 사실상의 표준 SQL이다. 기본값은 기본 맵리 듀스 구현을 기반으로되지만, 맵리 듀스 속도가 상대적으로 느리기 때문에이 올해 새로운 SQL 쿼리 엔진의 또 다른 아웃 후.
스파크 SQL, 하이브에 TEZ, 하이브 포함 에 스파크 등등합니다.
스파크 SQL과 하이브에 스파크가 동일하지 않습니다. 스파크 점화 SQL은 하이브, JSON, 마루, JDBC를 포함하여 데이터 소스의 다양한 자신의 밖으로 개발 RDD 그래서 쿼리를 실행할 수 있습니다
스파크 엔진 쿼리 엔진을 기반으로 계산합니다. 그래서 스파크의 프로젝트이지만, 하이브 반대 쿼리를 실행하는 작업 기능을 제공합니다. 일부 대형 데이터 응용 기술 스택 클래스 시스템의 사용에 사용하기에 적합 스파크.
하이브에 스파크, 그것은하지 맵리 듀스를 통해 하나의 쿼리 엔진,하지만 기본 쿼리 엔진과 불꽃으로, 의미, 하이브의 프로젝트입니다. 하이브에 스파크 만 하이브에 적용됩니다.
가까운 미래에 가능성이 하이브 기본 맵리 듀스 엔진이 점화로 전환되는 디폴트합니다. 이것은 큰 전사적 통계 데이터 분석 엔진으로 원래 하이브 데이터웨어 및 통계 분석 장착 점화 엔진 장치.

: 하이브 기본 원칙에 먼저 살펴
하이브 QL 문 =>
구문 분석 => AST =>
생성 로직의 실행 계획 => 연산자 트리 =>
최적화 된 로직 실행 계획 => 최적화 운영자 나무 =>
생성 실제 실행 계획 => 작업 트리 =>
실제 실행 계획을 최적화하기 => 최적화 작업 트리 =>
최적화 수행하는 최적화 작업 트리

하이브에 스파크가 다음 사항이 계산 원리 :
1, 운영하는 등 하이브 스파크 RDD 테이블 : 이것은 의심의 여지가 없다
2 프리미티브 하이브
이러한 GroupByKey에서, sortByKey 등등과 RDD 일부 동작에 대한. 스파크는 변환 작업 및 프리미티브를 사용하지 않습니다. 당신이 할 경우, 당신은 할 필요가 그 원시적 인 하이브의 세트를 다시 구현,
그리고 하이브가 새로운 기능을 추가하는 경우, 새로운 불꽃 프리미티브를 구현해야합니다. 그래서 RDD이 될 수 하이브 원시 포장 작업을 선택합니다.
3, 새로운 물리 실행 계획 생성 메커니즘
SparkCompiler 로직 실행 계획, 즉 운영자 트리를 사용하여이 작업 트리로 변환. 스파크 작업은 스파크에 실행을 위해 제출했다. SparkTask는 DAG가 SparkWork 포장, DAG를 포장.
SparkTask는 DAG SparkWork 표현을 계산 하였다.
4 SparkContext 수명주기
하이브에 스파크는 SparkContext를 작성, 같은 SQL 문을의 구현으로, 각 사용자의 세션을 제공 할 것입니다. 그러나 스파크는 JVM 내에서 여러 SparkContext을 만들 수 없습니다.
따라서, 다음 JVM SparkContext하여 원격 RPC와 통신하는 별도의 JVM에서 SparkContext 각 세션을 시작할 필요가있다.
(5) 로컬 및 원격 조작 모드
하이브에 스파크는 로컬 및 원격의 두 가지 작동 모드를 제공합니다. 스파크 마스터 로컬로 설정되어있는 경우, 이러한 설정 spark.master로 = 지역, 그래서 로컬 모드이며,
클라이언트가 JVM에서 실행하는 SparkContext은. 스파크 마스터는 마스터를 해결하기 위해 설정되어있는 경우 그렇지 않으면, 다음 원격 모드, SparkContext 원격 JVM에서 시작있다.
원격 모드에서 각 사용자는 SparkContext를 만들기위한 RemoteDriver 책임 세션 SparkClient, SparkClient 시작 RemoteDriver를 만듭니다.

하이브에 스파크가 일부 최적화 할 :
1의지도는 가입
가입하는 스파크는 기본 SQL 지원 조인을 수행하는 각 노드에 작은 테이블 방송에 방송 메커니즘의 사용이다. 그러나 문제는이 노동자 드라이버 및 메모리 오버 헤드의 큰 거래를 줄 것입니다.
방송 데이터 드라이버 메모리에 남아 있기 때문에. 그래서 지금 가지고 그것은 즉, 복제 요인의 HDFS 복제 요인을 개선하기 위해, 캐시 메커니즘 분산 맵리 듀스처럼 보인다이며,
데이터를 로컬로 읽을 수 그래서, 데이터가 각 컴퓨팅 노드에서 백업을 가지고 있는지 확인 할 수 있습니다.
2, 캐시 표
일부 장면에 대한 성능을 향상시키기 위해, 메모리에 여러 작업에 대해 최적화 된 하이브에 스파크, 캐시 테이블 안에 테이블에 여러 작업을 수행해야합니다. 그러나 여기서주의 할 점은,
자동으로 수행 모든 경우가있을 것입니다 캐시되지 않습니다. 그래서, 하이브에 스파크는 많은 결점이있다.

 

빌드로 스파크 환경에 하이브

1 , 설치 패키지 hive- 아파치 1.2 . 1 - bin.tar.gz

2 는 / usr / 아래 로컬 압축 해제

3 , conf 디렉토리로, 뮤직 비디오 hive- 기본 .xml.template - 하이브를 site.xml은 hive- 수정 를 site.xml을
 <속성>
  <이름> javax.jdo.option.ConnectionURL </ 이름>
  <값> JDBC한다 : mysql : // spark1 : 3306 / hive_metadata_2 createDatabaseIfNotExist = 사실 </ 값>
</ 속성>
<특성>
  <이름> javax.jdo.option.ConnectionDriverName </ 이름>
  <값> com.mysql.jdbc.Driver </ 값>
</ 속성>
<특성>
  <이름> javax.jdo.option.ConnectionUserName </ 이름>
  <값> 하이브 </ 값>
</ 속성>
<특성>
  <이름> javax.jdo.option.ConnectionPassword </ 이름>
  <값> 하이브 </ 값>
</ 속성>
<특성>
  <이름> hive.metastore.warehouse.dir </ 이름>
  <값> / 사용자 / 하이브 / warehouse2 </ 값>
</ 속성>

4 , conf 디렉토리에
MV 하이브 -env.sh.template hive- env.sh

우리. / 빈 / hive- config.sh
수출 JAVA_HOME =은 / usr / 자바 / 최신
수출 HIVE_HOME 아파치 hive- = / usr / 지방 / 1.2 . 1 - 
수출 HADOOP_HOME = / usr / 지방 / 하둡

5 , cp / USR / 주 / 자바 / MySQL을 커넥터 자바 - 5.1 . 17 의 .jar / usr / 지방 / 아파치 hive-- 1.2 . 1 -bin / lib 디렉토리

6 , MySQL은
데이터베이스를 만드는 경우 하지가 hive_metadata_2 존재;
hive_metadata_2에 모든 권한을 부여합니다. *에 ' 하이브 ' @ ' % ' 식별 ' 하이브 ' ;
hive_metadata_2에 모든 권한을 부여합니다. *에 ' 하이브 ' @ ' localhost를 ' 식별 ' 하이브 ' ;
hive_metadata_2에 모든 권한을 부여합니다. *에 ' 하이브 ' @ ' spark1 ' 식별 ' 하이브 ' ;
플러시 특권;

7 ,启动하이브 CLI / 하이브报错, 상대 경로.  절대 URI : $ {시스템 : java.io.tmpdir을 % 7D / $ % 7Bsystem : user.name %의 7D
폴더를 만듭니다 : / 홈 / 그리드 /를 Apache-을 hive- 1.2 . 1 -  / iotmp
하이브 (가)와 창문, 메모장 ++까지 복사 WinSCP에 하이브-site.xml의 추천 위 디렉토리, 모든 $ -site.xml {java.io.tmpdir을 시스템} 텍스트를 대체하는이 도구 , 더 편리한.

8 , 시작 하이브 CLI는 ,. / 하이브는 오류를 계속 찾을 클래스 jline.Terminal는, 그러나 인터페이스는 예상
CP / usr / 지방 / 아파치 hive-- 1.2 . 1 -bin / LIB / jline- 2.12 의 .jar / usr / 지방 / 하둡 / 공유 / 하둡 / 얀 / LIB
원래 하둡 된 jline - 0.9 . (94) 의 .jar, 이름을 변경하거나 삭제

9 , 시작 CLI 하이브, / usr / 지방 / 하이브 - 아파치 1.2 . . 1 -bin / 빈 / 하이브, 성공적인 시작

사용

테이블 학생 (이름 생성 문자열 , 연령 지능 );
데이터를로드 지역 INPATH ' /usr/local/spark-study/resources/students.txt ' 테이블 학생에;

// 사용 하이브에 스파크 매우 간단
 // 스파크로 설정 hive.execution.engine 하이브 명령 실행 엔진 그냥 세트 수
 // 기본값은 씨입니다 
후 SET hive.execution.engine = 스파크;
 // 여기가 전적으로 가능하다 URL 주소의 불꽃 마스터로 설정 
설정 spark.master = 스파크 : // 192.168.1.107:7077

선택 * 에서 학생들을;

 

: 재현 (46), 스파크 SQL 프로파일 링 및 성능 최적화 작업

 

 

추천

출처www.cnblogs.com/parent-absent-son/p/11804682.html