복붙노트

[HADOOP] 내 간단한 스파크 응용 프로그램이 너무 느리게 작동합니다 이유는 무엇입니까?

HADOOP

내 간단한 스파크 응용 프로그램이 너무 느리게 작동합니다 이유는 무엇입니까?

나는 스파크 API를 사용하여 mllib의 FP의 성장에 의해 발생하는 빈번한 아이템 세트를 계산하려합니다. 내 스파크는 버전 1.5.1입니다. 다음은 내 코드입니다 :

#!/usr/bin/python 
from pyspark.mllib.fpm import FPGrowth
from pyspark import SparkContext,SparkConf
from pyspark import HiveContext
import os
os.environ['PYSPARK_PYTHON']='/usr/bin/python'
appName = "FP_growth"
sc = SparkContext()
sql_context = HiveContext(sc)

def read_spu(prod):#prod_code):
    sql = """
        select 
        t.orderno_nosplit, 
        t.prod_code, 
        t.item_code, 
        sum(t.item_qty) as item_qty
        from ioc_fdm.fdm_dwr_ioc_fcs_pk_spu_item_f_chain t
        where t.prod_code='%s'
        group by t.prod_code, t.orderno_nosplit, t.item_code  """%prod
    spu_result = sql_context.sql(sql)
    return spu_result.cache()

if __name__ == '__main__':
    spu=read_spu('6727780')  
    conf=0.7             
    trans=spu.rdd.repartition(100).map(lambda x: (x[0],x[2])).groupByKey().mapValues(list).values().cache()
    model = FPGrowth.train(trans, 0.01, 100) 
    freq_count = model.freqItemsets().count()
    print 'freq_count:',freq_count  
    sc.stop()

입력 데이터는 하둡에서 읽기, 데이터는 약 20000 행이 매우 큰되지 않습니다. 그러나, 스크립트는 .count의 단계에서 매우 매우 느리게 작동합니다. 난 이유를 모르겠어. 성능에서, 그것 때문에 데이터 왜곡으로 보인다. 그러나 출력 데이터 (전용 작업 당 100킬로바이트에 대해) 큰되지 않습니다.

클러스터는 320 개 코어와 1.56 T 총 메모리 (뿐만 아니라 하나의 사용자)의 8 개 노드가 있습니다. 내 스파크 제출 스크립트 - 스파크 제출 --master 실 클러스터 --executor 메모리 30g의 --num-집행을 20 --executor 코어 5 FP_growth.py입니다

실행할 때 첨부 성능의 스크린 인쇄 있습니다 :

자원 사용

활동 단계

작업

해결법

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

    1.재분할 (100)는 단계는 가장 많은 시간이 소요되는 확인하실 수 있습니다, 좋은 생각처럼 보이지 않는다. 이후에만 20000 기록이있다. 송환은 각 파티션 (200 개) 레코드로 분할한다.

    재분할 (100)는 단계는 가장 많은 시간이 소요되는 확인하실 수 있습니다, 좋은 생각처럼 보이지 않는다. 이후에만 20000 기록이있다. 송환은 각 파티션 (200 개) 레코드로 분할한다.

    데이터 크기가 큰없는 경우 모든 송환 할 필요가 없습니다. 또는 40-60 파티션 (2 또는 3) 집행의 * 아니오보십시오.

  2. from https://stackoverflow.com/questions/50523055/why-my-simple-spark-application-works-so-slow by cc-by-sa and MIT license