Como definir / obter o tamanho da pilha do Spark (via bloco de notas Python)

7

Estou usando o Spark (1.5.1) de um notebook IPython em um macbook pro. Após a instalação de ignição e Anaconda, eu começo IPython de um terminal executando: IPYTHON_OPTS="notebook" pyspark. Isso abre uma página da Web listando todos os meus notebooks IPython. Eu posso selecionar um deles, abrindo-o em uma segunda página da web. O SparkContext (sc) já está disponível, e meu primeiro comando no notebook é o help(sc)que funciona bem. O problema que estou tendo é que estou recebendo um erro de espaço de heap Java que não sei como resolver. Como visualizo minha configuração de heap Java atual e como a aumento no contexto da minha instalação. A mensagem de erro que estou recebendo é a seguinte:

Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.collectAndServe.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 19 in stage 247.0 failed 1 times, most recent failure: Lost task 19.0 in stage 247.0 (TID 953, localhost): java.lang.OutOfMemoryError: Java heap space
Kai
fonte
quando você está tendo o erro? tentando fazer o que?
Eliasah 23/1015
Crie um RDD do LabeledPoint. Não é particularmente grande, 100K observações x2K característica vector.
Kai #

Respostas:

17

Você pode gerenciar os limites de memória Spark programaticamente (pela API).

Como o SparkContext já está disponível no seu Notebook:

sc._conf.get('spark.driver.memory')

Você também pode definir, mas primeiro encerre o SparkContext existente:

conf = SparkConf().setAppName("App")
conf = (conf.setMaster('local[*]')
        .set('spark.executor.memory', '4G')
        .set('spark.driver.memory', '45G')
        .set('spark.driver.maxResultSize', '10G'))
sc = SparkContext(conf=conf)

Se sua carga de trabalho for a mesma para todas as análises, a edição do spark-defaults.conf, conforme citado acima, é o caminho a percorrer.

noleto
fonte
6

Eu o resolvi criando um spark-defaults.confarquivo apache-spark/1.5.1/libexec/conf/e adicionando a seguinte linha: spark.driver.memory 14g

Isso resolveu meu problema. Mas então eu encontrei outra questão de exceeding max result size of 1024MB. A solução foi adicionar outra linha no arquivo acima: spark.driver.maxResultSize 2g

Kai
fonte
14g não é muito ??? Não é grande volume de dados, mas é realmente muito!
Eliasah # 23/15
Ótima resposta e a única que funcionou para mim. Obrigado.
Francesco Boi
1

Basta usar a configopção ao configurar o SparkSession (a partir do 2.4)

MAX_MEMORY = "5g"

spark = SparkSession \
    .builder \
    .appName("Foo") \
    .config("spark.executor.memory", MAX_MEMORY) \
    .config("spark.driver.memory", MAX_MEMORY) \
    .getOrCreate()
LaSul
fonte
Eu recebo o erro: Este SparkContext pode ser um existente.
Arash
Apenas substitua seu código por este, em vez de adicioná-lo. A mensagem dizia que você já criou uma sessão.
LaSul 21/07/19