스파크 기울기 데이터 솔루션

스파크 기울기 데이터 솔루션

해결책 하나 하이브 ETL 데이터를 사용하여 전처리

프로그램 응용 프로그램 시나리오 :

하이브 원인 데이터 테이블이 기울어있다. 데이터 하이브 테이블 자체 (예 : 키 데이터 (10)에 대응하는 유일한 다른 키 데이터를 백만에 대응)을 불균일이며, 모두 비즈니스 시나리오 스파크 하이브 테이블에 분석 작업을 수행 자주 사용되는 경우, 비교기 이러한 솔루션에 적합.

아이디어의 프로그램 실현 :

이 때 (즉, 데이터를 통해 미리 키 하이브 ETL 중합, 또는 사전에 다른 테이블 및 가입에 따라), 그 작업에 대한 데이터 소스가 원래 스파크없는 데이터 하이브로 전처리 할 수 ​​있는지 여부를 평가할 수있다 테이블의 하이브하지만, 전처리 하이브 테이블 후. 데이터는 이전 중합을 실시하거나 결합 조작 되었기 때문에,이 시점에서, 다음 원본 클래스 스파크 셔플 동작이 연산 조작을 수행 사용할 필요가 없다.

프로그램 구현 원리 :

완전히 스파크 클래스 연산자의 실행 shuffle을 피할 수 있기 때문에이 프로그램 주소 데이터 스큐의 근본 원인은, 다음, 반드시 데이터가없는 왜곡 문제가있을 것입니다. 이 방법은 완화 속한 그러나 여기에서 우리는 모든 사람을 생각 나게한다. 모든 데이터 자체 후에는 하이브 ETL 가입 또는 그룹 다른 셔플 동작에 의해 때 수행되는 데이터는 여전히 매우 느린 하이브 ETL 결과 기울일 것 불규칙적 분포의 문제가있는 것입니다. 데이터가 왜곡으로 우리는 앞으로 하이브 ETL 발생 스큐 데이터의 스파크 프로그램은 발생을 방지 할 수 있습니다.

프로그램 혜택 :

효과도 매우 좋은, 간단하고 편리한 구현, 완전히 데이터 스큐, 스파크 작업 성능이 크게 향상 될 것입니다 피할.

프로그램의 단점 :

임시 솔루션, 데이터 스큐 하이브 ETL은 여전히 ​​발생합니다.

프로그램 경험 :

일부 Java 시스템 스파크 프로젝트의 사용과 함께, 자바 코드가 자주 스파크 작업 현장라고 표시되지만, 스파크 작업의 실행 성능을 요구하고,이 프로그램의 사용에 대한 더 적합합니다. 하이브의 ETL 상류에 사전에 경사 데이터는 각 호출 자바 스파크 작업 실행 속도 직후 더 나은 사용자 경험을 제공 할 수있을 것입니다 동안 시간이 상대적으로 느린 것만 만 하루에 한 번 수행.

프로젝트 경험 :

미국 군 · 댓글 대화 형 사용자 행동 분석에서이 제도에 사용 된 시스템은, 시스템은 사용자가 자바 웹 시스템, 자바는 통계 분석 스파크 작업 데이터에 의해 제출 된 백 엔드를 통해 통계 데이터 분석 작업을 제출 할 수 있도록 주로. 스파크는 달리 너무 느린 사용자 경험이 가난한 것, 지금까지 10 분 이내에 가능한 한 속도를 운영하는 것은 빨라야 필요합니다. 우리가 하이브 ETL에 진출하게됩니다 일부 스파크 작업 동작을 셔플 그래서, 테이블의 사전 하이브 중간의 직접 사용을 허용하는 불꽃이, 셔플 동작 불꽃이 크게 성능을 향상, 가능한 한 줄이고, 일부 작업의 성능은 6 향상 번 이상.

해결 방법 2 : 필터 결과 몇 가지 주요 기울기

프로그램 응용 프로그램 시나리오 :

당신이 몇 가지 주요 기울기 결과 발견하고 계산 자체에 미치는 영향이 크지 않으면,이 프로그램을 사용하는 것이 적합하다. 예를 들어, 99 개의 데이터에 대응하는 키를, 10 %, 그러나 데이터 스큐 결과 만 데이터에 대응하는 전용 키.

아이디어의 프로그램 실현 :

우리는 데이터 키의 특히 많은 양의 소수, 실행의 작업 결과가 특히 중요하지 않은 것으로 판단되면, 단순히 몇 가지 키를 필터링도록 지시. 예를 들면, 절은 RDD의 스파크 코어의 키 조작 걸러 키 필터링을 수행하거나 필터링 할 수있다 스파크 SQL. 잡 실행에 따라 필요한 경우, 데이터 량은 동적으로 키를 결정하는 한 다음 여과 후 작업자는 샘플 RDD 샘플에 대해 사용될 수 있으며, 각 키의 개수, 키 여과 최대 데이터 량을 계산 할 수 있습니다.

프로그램 구현 원리 :

키의 기울기가 계산에 참여하지 않을이 키 필터링에 데이터를 유발 한 후, 자연 성향은 데이터를 생성하는 것은 불가능합니다.

프로그램 혜택 :

간단하지만 매우 효과적인, 완전히 회피 할 수있는 데이터가 왜곡.

프로그램의 단점 :

해당 장면이 많은, 대부분의 경우, 키를 기울 선도 여전히뿐만 아니라 몇 가지의 많은입니다.

프로그램 경험 :

이 프로젝트에서 우리는 데이터 스큐에이 솔루션을 사용하고 있습니다. 일단 갑자기 실행 OOM에 작업을 스파크 어느 날 발견 및 추적 후 발견, 하이브 테이블은 데이터 볼륨 급증의 결과로, 데이터의 하루에 하나 개의 키 예외입니다. 따라서, 제 샘플링 여러 샘플 키의 최대 데이터 량마다 계산하기 전에 수행 한 후, 그 키는 프로그램에 직접 필터링한다.

해결 방법 3 : 병렬 셔플 동작의 정도

프로그램 응용 프로그램 시나리오 :

우리는 데이터 스큐의 쐐기풀을 파악해야하는 경우는 치료 계획 데이터 스큐의 가장 간단한 종류이기 때문에,이 프로그램의 우선 순위를 사용하는 것이 좋습니다.

아이디어의 프로그램 실현 :

셔플을 수행하는 셔플 사업자의 수가 태스크를 읽을 때 RDD는 reduceByKey (1000)과 같은 파라미터를 전달하는, 셔플 카운트 중성자 셔플 연산자를 행하고,이 파라미터 세트이다. 등의 가입에 의해 그룹, 매개 변수를 설정해야합니다, 즉 spark.sql.shuffle.partitions로 셔플 클래스에서 스파크 SQL 문의 경우, 매개 변수가 많은 장면에 대한 기본 값 200 병렬 셔플 정도 읽을 작업을 나타냅니다 그것은 조금 너무 작습니다.

프로그램 구현 원리 :

셔플 읽기 작업의 수를 증가하는 것은 여러 작업에 할당 된 작업의 원본이, 각각의 작업이 덜 원본 데이터보다 처리되도록하는 것이 여러 키에 할당 할 수 있습니다. 예를 들어, 다섯 개 본래의 키, 각 키가 있는지 태스크의 다섯 키에 할당 된 데이터에 대응한다 (10)는, 태스크는 데이터 (50)를 처리한다. 셔플 태스크를 읽은 후 증가, 각 작업은 키에 할당 될 수 있으며, 즉, 데이터의 각 공정 작업 (10)은, 각 태스크의 실행 시간의 특성상 짧은 것이다. 도에 나타내는 바와 같이 원칙적 상세한.

프로그램 혜택 :

구현이 비교적 간단하고 효과적으로 완화 및 데이터 스큐의 영향을 완화 할 수 있습니다.

프로그램의 단점 :

이 데이터를 쉽게하기 위해 그냥 기울기, 완전히 실제 경험을 바탕으로 문제를 근절하지, 효과가 제한됩니다.

프로그램 경험 :

이 프로그램은 완전히 같은 데이터의 양 등 일부 극단적 인 상황은, 핵심 다음에 상관없이 얼마나 당신이 작업의 수를 증가, 백만에 해당하는 경우 때문에 데이터가 키 데이터의 1,000,000 여전히 할당해야합니다으로,이 대응을 왜곡 해결되지 일반적으로 작업 처리로 이동하기 때문에 발생하거나 데이터가 왜곡 운명. 따라서이 방식은 첫 번째 데이터가 왜곡 될 때 방법을 찾으려고 노력에 데이터가 왜곡 완화 입 간단한 방법을 시도하고, 사용, 또는 다른 프로그램과 함께 사용하는 것을 말할 수 있습니다.

해결 방법 4 : 2 단계 중합 (글로벌 + 로컬 중합 중합)

프로그램 응용 프로그램 시나리오 :

이 방식으로 점화 SQL 패킷 응집에 RDD 또는 문장을 사용하여 그룹에 기초하여 셔플 운영자 등 reduceByKey 중합을 수행 할 때 더 적합하다.

아이디어의 프로그램 실현 :

이 프로그램의 핵심 아이디어는 두 단계 중합을 달성하는 것입니다. (가) 제와 같이, 본래의 키는 다른 동일하게이 시점에서, 이하 10보다 그러한 난수와 같은 임의의 숫자로 표시되어, 각 키를 제공하는 부분 중합이다 (헬로 1) (헬로 1) 해질 것이다 (헬로 1) (헬로, 1), (1_hello 1) (1_hello 1) (2_hello 1) (2_hello 1). 이어서 난수 및 기타 중합 실행 표시된 데이터 reduceByKey 부분적인 중합을 수행 부분 중합 결과, 그것은 (2_hello 2) (1_hello 2)가 될 것이다. 다시 전역 (안녕하세요 2) (헬로 2)가되며, 각 키에 중합 조작 프리픽스 제거 최종 결과 (헬로 4) 예를 들어, 획득 될 수있다.

프로그램 구현 원리 :

원래는 데이터 처리 작업은 중합을 수행하는 로컬 작업 다수 분산되고, 그리고 나서 하나의 태스크 처리 데이터의 초과 량을 해결할 수 그래서, 다른 키의 복수의 랜덤 방식을 부가함으로써 동일한 키 원래 프리픽스 문제. 이어서 랜덤 프리픽스 다시 전체적으로 중합을 제거 최종 결과를 얻을 수있다. 구체적인 원리는 다음과 같이.

프로그램 혜택 :

효과의 기울기 데이터 셔플 동작 계 중합 결과 매우 좋다. 당신은 일반적으로 데이터 스큐 제거, 또는 적어도 크게 데이터 스큐, 여러 번에 걸쳐 불꽃 작업의 성능 향상을 완화 할 수 있습니다.

프로그램의 단점 :

클래스는 중합 셔플 동작, 비교적 좁은 범위에 대해서만 적합하다. 셔플 작업이 수업에 참여하는 경우, 우리는 다른 솔루션을 사용했다.

솔루션 다섯 : 가입 맵에 가입 줄이기 위해

프로그램 응용 프로그램 시나리오 :

사용시에는 RDD에 기초하여 동작에 참여하거나, 이러한 실시 예 (예 수백 열두 G 또는 M 같이) 스파크 SQL 문에서 합류하고 RDD 테이블 또는 데이터의 비교적 작은 양의 연산을 조인 더 적합 사용.

아이디어의 프로그램 실현 :

연산자를 사용하지 않고 접속 작업을 조인 변수는 결합 조작 달성 방송 사업자 클래스 맵을 사용함으로써 완전히 회피 셔플 동작 클래스 완전히 경사의 발생을 방지하고 데이터를 보인다. 작은 데이터 RDD 직접 드라이버에 메모리의 단부를 수집 한 후 방송을 그 변수를 생성하기 위해 운전자에 의해 끌려; RDD 다음에, 다른 사업자가 수행 기반지도 조작자 함수, 변수 방송에서 데이터의 작은 RDD 전액, 연결, 데이터는 당신이 연결해야하는 방식에 두 RDD 될 경우 연결 키, 동일한 키에 따라 정렬 된 현재 RDD와 데이터의 각 조각을 얻는다.

프로그램 구현 원리 :

공통 다음 셔플 읽기 작업으로 데이터를 가져에 가입하고 가입 줄일에서 것 같은 키에 해당 셔플 번 셔플 과정을, 갈 것입니다 가입 할 수 있습니다. RDD가 상대적으로 작은 경우 가입으로하지만, 같은 효과를 달성하기 위해 작은 RDD +지도 연산자 데이터 방송의 전액을 사용할 수 있습니다, 즉지도에 가입, 셔플 동작이 시간에 발생하지 않습니다, 데이터는 경사가 발생하지 않습니다 . 도에 나타내는 바와 같이 원칙적 상세한.

프로그램 혜택 :

연산 결과에 가입 기울기 데이터, 효과가 발생 셔플 없기 때문에,이 데이터 왜곡을 발생하지 않은, 아주 좋은 것입니다.

프로그램의 단점 :

적은 적용 시나리오,이 프로그램은 큰 테이블과 작은 테이블에 적용하기 때문이다. 결국, 우리는 작은 테이블 방송을해야합니다,이 시간은 상대적으로 메모리 리소스를 소모 드라이버 메모리 집행 인 각 상주 데이터의 전체 양이 작은 RDD 될 것입니다 될 것입니다. 우리는 10G 이상 그대로 비교적 큰 RDD 데이터를 방송하면, 메모리 오버 플로우가 발생할 수있다. 그러므로 둘 다 큰 테이블의 경우에는 적합하지 않습니다.

솔루션 육 : 샘플링 틸트 및 회전은 키 조작 가입

프로그램 응용 프로그램 시나리오 :

두 RDD / 하이브 테이블에 가입하면, 데이터의 비교적 많은 양이 아닌 "솔루션 다섯", 다음 시간이 두 가지 핵심 RDD / 하이브 테이블의 분포를 볼 수있는 경우. 그것은 몇 가지 주요 RDD / 하이브 테이블 데이터의 하나이기 때문에 왜곡이 발생해서 데이터를보다 고르게 분포되어 너무 큰, 그리고 다른 모든 키 RDD / 하이브 테이블의 경우,이 솔루션의 사용이 더 적절한입니다 가.

아이디어의 프로그램 실현 :

도 1은 RDD 키는 시료 샘플 연산자를 샘플링하여 대량의 데이터의 소수를 포함하고, 각 키의 수에 대한 통계, 몇몇 키의 가장 큰 데이터 량을 계산 하였다.
  도 2는, 다음 원본 RDD 아웃에서 이러한 여러 키 분할에 대응하는 데이터는 단일 RDD를 형성하고, 각 키에 대해 가장 기울어 진 키를 발생시키지 않고, 이하와 같은 접두사 n보다 난수가 표시된 또 RDD을 형성한다.
  3 다른 RDD 아니라 몇 번의 형태 RDD에 대응하는 키 데이터를 여과 경사, 데이터는 데이터의 N 개의 각으로 확장하고, 데이터의 N 개의 순차적으로 부착되는 0 ~ 가입 후 필요 접두사 N, 가장 키가 또 다른 경사 RDD 형성되는 발생하지 않습니다.
  4 독립 RDD위한 추가적인 임의의 프리픽스가 서로 독립적으로 n 회 RDD 확장 가입 일본어 케이스 조인 수행하는 작업을 복수의 분산, 동일한 N 개의 주요 부분으로 나누어 질 수있다.
  5, 다른 두 가지 일반적인 RDD는 평소에 가입 할 수있다.
  도 6에서, 마지막 2 개는 가입의 최종 결과이며, 병합 될 수 결합 연산자를 사용하여 결과를 합류한다.

프로그램 구현 원리 :

경사에 기인하는 데이터 가입 경사에 불과 키 리드, 몇 가지 주요 별개 RDD으로 분할하고, 추가로 임의의 프리픽스가 될 수있는 경우로 세분화 될 N 부분이 때 여러 키에 대응 조인 데이터는 몇 가지 작업에 집중하지만, 여러 걸쳐 작업이 수행에 참여하지 않습니다. 구체적인 원리는 다음과 같이.

프로그램 혜택 :

데이터가 발생하는 스큐를 들어 경사에 몇 키 리드, 이러한 방식으로 가입에 대한 키를 깰 수있는 가장 효과적인 방법이 될 수 있다면, 가입 할 수 있습니다. 그리고 단지 확장을 필요로하지 않는 데이터의 총량에 해당하는 몇 가지 경사 확장 키 데이터의 N 배 할 필요가있다. 너무 많은 메모리를 사용하지 않도록합니다.

프로그램의 단점 :

등 수십 키 데이터의 수천 같은 단어의 특히 많은 수의 주요 결과의 경사가 경사에지도 한 경우, 이러한 방식은 적합하지 않습니다.

해결 방법 7 : 무작위 접두사와 결합 할 확장 RDD

프로그램 응용 프로그램 시나리오 :

(가) 키 데이터의 많은 수의 동작, RDD 리드에 참여하는 동안이 왜곡되면, 이해가되지 후 스핀 오프 키를 누른 다음, 당신은 단지 문제를 해결하기 위해 지난 솔루션을 사용할 수 있습니다.

아이디어의 프로그램 실현 :

도 1은, 기본 프로그램의 개념과 유사하게, 첫 번째 뷰는 데이터 분배 RDD / 하이브 테이블은, 예를 들면 10,000보다 다수의 키에 대응로서 결과 데이터 스큐 RDD / 하이브 테이블을 찾아 "여섯 용액"을 달성 데이터 조각.
  도 2에서, 각각의 데이터는 N RDD 내의 임의 접두어로 표시된다.
  (3) 확장을위한 다른 통상 RDD는 데이터의 N 개에 각 데이터의 확장은, 팽창 출력 데이터의 각각은 순차적으로 ~ 프리픽스 n은 0으로 표시되어있다.
  (4) 마지막 두 RDD 처리에 가입 할 수있다.

프로그램 구현 원리 :

원래 동일한 키가 접두사를 추가하여 다른 임의의 키가되고, 당신은 갈 다중 처리 작업에서 이러한 프로세스 후 "다른 키"할 수있다, 오히려 작업보다 같은 키의 큰 숫자를 처리합니다. 계획은 처리 능력이 RDD 필요로되기 때문에, "용액 여섯"차이, 하나 개의 솔루션은, 단지 경사 우대 대응 키 데이터의 소수에 가능하다는 것이다 확장 메모리 RDD 후 반응 용액 인원은 크지 키이 다수 대해 경사져 용액 키 부분은 별도의 프로세스이므로 단지 전체 데이터 RDD 확장 까다로운 메모리 자원을 분할 할 수 없다.

프로그램 혜택 :

데이터 유형에 가입하는 경향이 실질적으로 처리 할 수 ​​있고, 효과가 상대적으로 중요한 매우 좋은 성능이다.

프로그램의 단점 :

이 프로그램은보다 완벽 스큐 데이터를 피하기보다는, 데이터를 쉽게하는 경향된다. 그리고 전체 RDD의 확장에 대한 필요성은 메모리 자원이 요구.

프로그램 경험 :

데이터 요구 사항을 개발, 그들은 스큐 데이터를 결합하는 단서를 발견했다. 최적화 이전에, 잡 실행 시간은 약 60 분 후,이 프로그램을 이용하여 최적화 된 실행 시간은 약 10 분, 성능의 6 배의 증가로 단축된다.

솔루션 팔 : 다양한 프로그램의 조합

I는 많은 경우에 비교적 간단한 처리 데이터 스큐 시나리오 경우, 상술 한 실시 예 중 하나, 기본적으로 해결할 수를 사용하는 것이 실제로 알았다. 더 복잡한 데이터 스큐 시나리오를 처리하는 경우, 다양한 프로그램의 조합을 사용하는 것이 바람직 할 수있다. 예를 들어, 우리는 스파크 작업 틸트 여러 데이터 링크의 출현에 초점을 맞추고, 당신은 I 및 II, 데이터 사전 처리의 부분과 데이터의 일부 완화하기 위해 필터링 솔루션을 사용할 수 있으며, 둘째, 특정 셔플 작업에 대한 병렬 처리 수준을 향상시킬 수를 최적화의 성능은, 마지막으로, 또한 서로 다른 고분자 또는 조인 작업의 성능을 최적화 할 수있는 솔루션을 선택합니다. 그리고 우리는 서로 다른 상황, 자신의 데이터 스큐 문제를 해결하기 위해 다양한 프로그램의 유연한 사용의 다양한에 따라, 실제로 철저한 이해를 가지고 아이디어와이 프로그램의 원칙이 필요합니다.

출시 사 원저 · 원의 칭찬 0 · 조회수 515

추천

출처blog.csdn.net/The_Inertia/article/details/104055932