Como posso aumentar a memória disponível para os nós do executor do Apache spark?
Eu tenho um arquivo de 2 GB adequado para carregar no Apache Spark. Atualmente, estou executando o apache spark em uma máquina, para que o driver e o executor estejam na mesma máquina. A máquina possui 8 GB de memória.
Quando tento contar as linhas do arquivo após definir o arquivo a ser armazenado em cache na memória, recebo os seguintes erros:
2014-10-25 22:25:12 WARN CacheManager:71 - Not enough space to cache partition rdd_1_1 in memory! Free memory is 278099801 bytes.
Eu olhei para a documentação aqui e definir spark.executor.memory
a 4g
em$SPARK_HOME/conf/spark-defaults.conf
A interface do usuário mostra que essa variável está definida no ambiente Spark. Você pode encontrar a captura de tela aqui
No entanto, quando vou para a guia Executor, o limite de memória para meu único Executor ainda está definido para 265,4 MB. Eu também continuo com o mesmo erro.
Tentei várias coisas mencionadas aqui, mas ainda recebo o erro e não tenho uma ideia clara de onde devo alterar a configuração.
Estou executando meu código interativamente a partir do shell de faísca
fonte
Observe também que, no modo local, você deve definir a quantidade de memória do driver antes de iniciar a jvm:
Isso iniciará a JVM com 2G em vez dos 512M padrão.
Detalhes aqui :
fonte
Aparentemente, a pergunta nunca diz para rodar no modo local e não no fio. De alguma forma, não consegui fazer com que a mudança spark-default.conf funcionasse. Em vez disso, tentei isso e funcionou para mim
(não foi possível aumentar a memória do executor para 8g, há alguma restrição na configuração do fio).
fonte
executor-memory
maior quedriver-memory
?A resposta enviada por Grega me ajudou a resolver meu problema. Estou executando o Spark localmente a partir de um script python dentro de um contêiner do Docker. Inicialmente, eu estava recebendo um erro de falta de memória do Java ao processar alguns dados no Spark. No entanto, consegui atribuir mais memória adicionando a seguinte linha ao meu script:
Aqui está um exemplo completo do script python que eu uso para iniciar o Spark:
fonte
Você precisa aumentar a memória do driver. No mac (ou seja, quando executado no mestre local), a memória do driver padrão é 1024M). Por padrão, assim, 380Mb são alocados ao executor.
Ao aumentar [ --driver-memory 2G ], a memória do executor aumentou para ~ 950Mb.
fonte
crie um arquivo chamado spark-env.sh no diretório spark / conf e inclua esta linha
fonte
SPARK_WORKER_MEMORY
.Você pode construir o comando usando o seguinte exemplo
fonte
A memória do executor do Spark é necessária para executar suas tarefas do spark com base nas instruções fornecidas pelo seu programa de driver. Basicamente, requer mais recursos que dependem do seu trabalho enviado.
A memória do executor inclui a memória necessária para executar as tarefas, além da memória indireta, que não deve ser maior que o tamanho da JVM e do tamanho máximo do contêiner do fio.
Adicione os seguintes parâmetros no spark-defaults.conf
Se você estiver usando alguma ferramenta de gerenciamento de cluster, como cloudera manager ou amabari , atualize a configuração do cluster para refletir as configurações mais recentes em todos os nós no cluster.
Como alternativa, podemos passar o núcleo do executor e o valor da memória como argumento enquanto executamos o
spark-submit
comando, juntamente com o caminho da classe e do aplicativo.Exemplo:
fonte
você mencionou que está executando o seu código de maneira interativa no shell de spark; portanto, ao fazer isso se nenhum valor adequado for definido para a memória do driver ou da memória do executor, o spark atribuirá algum valor a ele, que é baseado no arquivo de propriedades (onde o valor padrão é sendo mencionado).
Espero que você esteja ciente do fato de que existe um driver (nó mestre) e nó de trabalho (onde os executores são criados e processados); portanto, basicamente dois tipos de espaço são necessários pelo programa spark, portanto, se você deseja definir memória do driver, em seguida, quando iniciar spark-shell.
spark-shell --driver-memory "seu valor" e para definir a memória do executor: spark-shell --executor-memory "seu valor"
então eu acho que você é bom em ir com o valor desejado da memória que você deseja que seu spark-shell use.
fonte
fonte
No Windows ou Linux, você pode usar este comando:
fonte
Tanto quanto eu sei, não seria possível alterar o
spark.executor.memory
tempo de execução. Se você estiver executando uma versão independente, com pyspark e graphframes, poderá iniciar o pysparkREPL
executando o seguinte comando:Certifique-se de alterar a
SPARK_VERSION
variável de ambiente adequadamente em relação à versão mais recente do Sparkfonte