Este tópico apresenta as perguntas frequentes sobre o uso do Spark.
Como verificar o projeto?
Verifique os seguintes itens:
-
Verifique o arquivo pom.xml.
<dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_${scala.binary.version}</artifactId> <version>${spark.version}</version> <scope>provided</scope> // spark-xxxx_${scala.binary.version} 依赖scope必须是provided。 </dependency> -
Verifique o parâmetro spark.master da classe principal.
val spark = SparkSession .builder() .appName("SparkPi") .config("spark.master", "local[4]") // 如果是以yarn-cluster方式提交,代码中如果有local[N]的配置,将会报错。 .getOrCreate() -
Verifique o código Scala da classe principal.
object SparkPi { // 必须是object,如果在IDEA创建文件的时候写为class,main函数是无法加载的。 def main(args: Array[String]) { val spark = SparkSession .builder() .appName("SparkPi") .getOrCreate() -
Verifique as configurações no código da classe principal.
val spark = SparkSession .builder() .appName("SparkPi") .config("key1", "value1") .config("key2", "value2") .config("key3", "value3") ... // 如果执行local测试时,将MaxCompute配置在hard-code代码里,部分配置是无法生效的。 .getOrCreate()NotaAo submeter tarefas no modo yarn-cluster, defina todas as configurações no arquivo spark-defaults.conf.
Quais são as etapas para executar um nó ODPS Spark no DataWorks?
Edite e empacote o código Spark em seu ambiente Python local. A versão do Python local deve ser a 2.7.
Faça upload do pacote de recursos para o DataWorks. Para mais detalhes, consulte Crie e use recursos do MaxCompute.
Crie um nó ODPS Spark no DataWorks. Para mais detalhes, consulte Criar um nó ODPS Spark.
Escreva o código e execute o nó. Visualize os resultados diretamente no console do DataWorks.
Como depurar o Spark on MaxCompute localmente?
Use o IntelliJ IDEA para depuração local. Para mais detalhes, consulte Defina um ambiente de desenvolvimento Linux.
Como acessar serviços em uma VPC usando o Spark?
Para informações sobre como acessar serviços em uma VPC usando o Spark, consulte Acessar instâncias VPC com Spark.
Como referenciar pacotes JAR como recursos?
Use o parâmetro spark.hadoop.odps.cupid.resources para especificar os recursos a serem referenciados. Como os recursos podem ser compartilhados entre vários projetos, configure as permissões adequadas para garantir a segurança dos dados. Veja o exemplo abaixo.
spark.hadoop.odps.cupid.resources = projectname.xx0.jar,projectname.xx1.jar
Como passar parâmetros via Spark?
Para detalhes sobre a passagem de parâmetros, consulte Spark on DataWorks.
Como gravar dados do DataHub lidos via streaming pelo Spark no MaxCompute?
Para exemplos de código, consulte DataHub.
Como migrar código Spark open source para o Spark on MaxCompute?
Escolha o plano de migração adequado ao cenário do seu job:
-
O job não precisa acessar tabelas do MaxCompute nem o OSS.
Execute diretamente o pacote JAR existente. Para mais detalhes, consulte Defina um ambiente de desenvolvimento Linux. Defina as dependências do Spark ou Hadoop como provided.
-
O job precisa acessar tabelas do MaxCompute.
Configure as dependências relevantes e reempacote o projeto. Para mais detalhes, consulte Defina um ambiente de desenvolvimento Linux.
-
O job precisa acessar o OSS.
Obtenha os pacotes necessários para acesso ao OSS e configure a conectividade de rede. Após concluir, recompile e empacote o aplicativo para implantação e execução. Para mais detalhes, consulte Defina um ambiente de desenvolvimento Linux.
Como processar dados de tabelas no MaxCompute usando o Spark?
O Spark on MaxCompute suporta os modos de execução Local, Cluster e DataWorks. As configurações variam conforme o modo escolhido. Para mais detalhes, consulte Modos de execução.
Como definir o paralelismo de recursos do Spark?
O paralelismo de recursos do Spark é determinado pela quantidade de Executors e pelo número de núcleos de CPU por Executor. O número máximo de Tasks que podem ser executadas em paralelo é calculado por Executor数量 * Executor CPU核数.
-
Quantidade de Executors
Parâmetro:
spark.executor.instances.Descrição: Define a quantidade de Executors solicitada pelo job.
-
Núcleos de CPU do Executor
Parâmetro:
spark.executor.cores.Descrição: Define o número de núcleos de CPU para cada processo Executor, determinando sua capacidade de executar Tasks em paralelo. Cada núcleo de CPU executa apenas uma Task por vez. Geralmente, recomenda-se configurar entre
2~4núcleos por Executor.
Como resolver problemas de memória insuficiente?
-
Erros comuns:
java.lang.OutOfMemoryError: Java heap space.java.lang.OutOfMemoryError: GC overhead limit exceeded.Cannot allocate memory.The job has been killed by "OOM Killer", please check your job's memory usage.
-
Soluções:
-
Defina a memória do Executor.
Parâmetro:
spark.executor.memory.Descrição: Representa a memória de cada Executor. Mantenha uma proporção de
1:4em relação ao parâmetrospark.executor.cores. Por exemplo, sespark.executor.coresfor1, definaspark.executor.memorycomo4 GB. Aumente este valor caso o Executor lance a exceçãojava.lang.OutOfMemoryError.
-
Defina a memória off-heap do Executor.
Parâmetro:
spark.executor.memoryOverhead.Descrição: Representa a memória adicional de cada Executor, usada principalmente pela JVM, strings e buffers NIO. O valor padrão é
spark.executor.memory * 0.1, com mínimo de 384 MB. Normalmente não requer configuração extra, mas aumente este valor se os logs do Executor mostraremCannot allocate memoryou erros do OOM Killer.
-
Defina a memória do Driver.
Parâmetro:
spark.driver.memory.Descrição: Representa o tamanho da memória do Driver. Mantenha uma proporção de
1:4em relação ao parâmetrospark.driver.cores. Aumente este valor se o Driver precisar coletar grandes volumes de dados ou se lançar a exceçãojava.lang.OutOfMemoryError.
-
Defina a memória off-heap do Driver.
Parâmetro:
spark.driver.memoryOverhead.Descrição: Representa a memória adicional do Driver. O valor padrão é
spark.driver.memory * 0.1, com mínimo de 384 MB. Aumente este valor se os logs do Driver apresentarem o erroCannot allocate memory.
-
Como resolver problemas de espaço em disco insuficiente?
-
Sintoma
Erro exibido:
No space left on device. Causa: Este erro indica falta de espaço no disco local. Geralmente ocorre no Executor e causa seu encerramento.
-
Solução:
-
Aumente o tamanho do disco.
Parâmetro:
spark.hadoop.odps.cupid.disk.driver.device_size.Valor padrão: 20 GB.
Descrição: Por padrão, o Driver e o Executor recebem 20 GB de disco local cada. Aumente este parâmetro se o espaço for insuficiente. Esta configuração só entra em vigor se definida no arquivo
spark-defaults.confou nas configurações do DataWorks.
-
Aumente a quantidade de Executors.
Se o erro persistir mesmo após aumentar o disco local para 100 GB, os dados de Shuffle de um único Executor podem ter excedido o limite devido a skew de dados. Nesse caso, reparticione os dados. Se o volume de dados for realmente muito grande, ajuste o parâmetro
spark.executor.instancespara adicionar mais Executors.
-
Como referenciar recursos em um projeto do MaxCompute?
Atualmente, o Spark on MaxCompute oferece duas formas de acessar recursos no MaxCompute:
-
Referencie recursos do MaxCompute diretamente via configuração de parâmetros.
Parâmetro:
spark.hadoop.odps.cupid.resources.Formato:
<projectname>.<resourcename>[:<newresourcename>].Descrição: Especifica os recursos do MaxCompute necessários para a execução da tarefa. Para mais detalhes, consulte Gerencie recursos. Os recursos especificados serão baixados para o diretório de trabalho atual do Driver e dos Executors. É possível referenciar múltiplos recursos separados por vírgula. Após o download, o nome padrão do recurso é
<projectname>.<resourcename>. Para renomeá-lo, use o formato<projectname>.<resourcename>:<newresourcename>na configuração. Esta configuração só entra em vigor se definida no arquivospark-default.confou nas configurações do DataWorks.-
Exemplo:
## 以下配置必须在DataWorks配置项/spark-defaults.conf文件中添加 ## 同时引用多个资源:同时引用public.python-python-2.7-ucs4.zip和public.myjar.jar spark.hadoop.odps.cupid.resources=public.python-python-2.7-ucs4.zip,public.myjar.jar ## 重命名示例:引用并将public.myjar.jar重命名为myjar.jar spark.hadoop.odps.cupid.resources=public.myjar.jar:myjar.jar
-
Referencie recursos no DataWorks.
Adicione recursos do MaxCompute aos fluxos de trabalho no painel de desenvolvimento de dados do DataWorks. Para mais detalhes, consulte Gerencie recursos do MaxCompute.
Selecione recursos do tipo jar, file ou archive no nó ODPS Spark do DataWorks.
NotaEste método faz upload dos recursos durante a execução da tarefa. Para recursos grandes, use o primeiro método de referência.
Como acessar uma VPC?
O Spark on MaxCompute suporta o acesso a serviços em VPCs da Alibaba Cloud pelos seguintes métodos:
-
Acesso via linha dedicada ENI
-
Limitações de uso
Uma linha dedicada ENI conecta o MaxCompute a uma VPC na mesma região. Se o job precisar acessar múltiplas VPCs, estabeleça conexões adicionais entre a VPC já conectada via ENI e as demais VPCs desejadas.
-
Procedimento:
Ative a linha dedicada ENI. Para mais detalhes, consulte Acessar instâncias VPC com Spark.
-
Adicione regras de whitelist no serviço de destino para autorizar o grupo de segurança do MaxCompute (fornecido na etapa anterior) a acessar portas específicas.
Por exemplo, para acessar o ApsaraDB RDS, adicione uma regra permitindo o acesso do grupo de segurança criado na etapa 1. Se o serviço não aceitar grupos de segurança e exigir endereços IP, adicione todos os intervalos de CIDR dos vSwitches usados na primeira etapa.
-
Configure os parâmetros
spark.hadoop.odps.cupid.eni.infoespark.hadoop.odps.cupid.eni.enableno job.Veja o exemplo abaixo. Substitua os valores de RegionID e VPCID pelos valores reais.
## 以下配置必须在DataWorks配置项/spark-defaults.conf文件中添加 spark.hadoop.odps.cupid.eni.enable = true spark.hadoop.odps.cupid.eni.info = [regionid]:[vpcid]
-
Como acessar a internet pública?
O Spark on MaxCompute oferece dois métodos para acessar serviços na internet pública:
-
Acesso via linha dedicada ENI
Ative a linha dedicada ENI. Para mais detalhes, consulte Acessar instâncias VPC com Spark.
Garanta que a VPC da linha dedicada tenha acesso à internet pública. Para mais detalhes, consulte Use the SNAT feature of an Internet NAT gateway to access the Internet.
-
Configure a whitelist de acesso à internet e ative a ENI no nível do job Spark usando o exemplo abaixo. Substitua os valores de RegionID e VPCID pelos valores reais.
## 以下配置必须在DataWorks配置项/spark-defaults.conf文件中添加 spark.hadoop.odps.cupid.internet.access.list=aliyundoc.com:443 spark.hadoop.odps.cupid.eni.enable=true spark.hadoop.odps.cupid.eni.info=[region]:[vpcid]
-
Acesso via SmartNAT
Limitação: Este método não suporta Spark 3.4 ou versões superiores.
Suponha que você precise acessar
https://aliyundoc.com:443. Siga o fluxo abaixo.busque pelo grupo DingTalk (ID: 11782920) para entrar na comunidade de desenvolvedores do MaxCompute. Entre em contato com a equipe de suporte técnico do MaxCompute para adicionar
https://aliyundoc.com:443à listaodps.security.outbound.internetlist.Configure a whitelist de acesso à internet pública e ative o SmartNAT no nível do job Spark usando o exemplo abaixo.
## 以下配置必须在DataWorks配置项/spark-defaults.conf文件中添加 spark.hadoop.odps.cupid.internet.access.list=aliyundoc.com:443 spark.hadoop.odps.cupid.smartnat.enable=true
Como acessar o OSS?
O Spark on MaxCompute utiliza o Jindo SDK para acessar o OSS da Alibaba Cloud. Configure as seguintes informações:
-
Configure o Jindo SDK e o endpoint do OSS.
Veja o exemplo de comando abaixo.
## 引用JindoSDK Jar。以下配置必须在DataWorks配置项/spark-defaults.conf文件中添加 spark.hadoop.odps.cupid.resources=public.jindofs-sdk-3.7.2.jar ## 设置OSS实现类。 spark.hadoop.fs.AbstractFileSystem.oss.impl=com.aliyun.emr.fs.oss.OSS spark.hadoop.fs.oss.impl=com.aliyun.emr.fs.oss.JindoOssFileSystem ## 设置OSS Endpoint spark.hadoop.fs.oss.endpoint=oss-[YourRegionId]-internal.aliyuncs.com ## 通常无需设置OSS endpoint网络白名单,若作业运行过程中发现网络不通,可以通过以下参数添加白名单。 ## 以下配置必须在DataWorks配置项/spark-defaults.conf文件中添加 spark.hadoop.odps.cupid.trusted.services.access.list=[YourBucketName].oss-[YourRegionId]-internal.aliyuncs.comNotaNo modo cluster do Spark on MaxCompute, apenas endpoints internos do OSS são suportados; endpoints públicos não funcionam. Para o mapeamento entre regiões e endpoints do OSS, consulte Regions and Endpoints.
-
Configure a autenticação do OSS. O Jindo SDK suporta dois métodos de autenticação:
-
Autenticação via AccessKey. Exemplo de configuração:
val conf = new SparkConf() .setAppName("jindo-sdk-demo") # 配置access-key鉴权参数 .set("spark.hadoop.fs.oss.accessKeyId", "<YourAccessKeyId>") .set("spark.hadoop.fs.oss.accessKeySecret", "<YourAccessKeySecret>") -
Autenticação via STS Token. Siga o procedimento abaixo:
-
Clique em Autorização com um clique para conceder acesso direto aos recursos OSS da conta atual ao projeto MaxCompute via StsToken.
NotaA autorização com um clique só pode ser executada quando o proprietário do projeto MaxCompute for a própria conta de nuvem proprietária do OSS.
-
Ative o serviço HTTP local.
Veja o exemplo de comando abaixo.
## 以下配置必须在DataWorks配置项/spark-defaults.conf文件中添加 spark.hadoop.odps.cupid.http.server.enable = true -
Configure as informações de autenticação.
Veja o exemplo de comando abaixo.
val conf = new SparkConf() .setAppName("jindo-sdk-demo") # 配置云服务角色鉴权 # ${aliyun-uid}是阿里云用户UID # ${role-name}是角色名称 .set("spark.hadoop.fs.jfs.cache.oss.credentials.provider", "com.aliyun.emr.fs.auth.CustomCredentialsProvider") .set("spark.hadoop.aliyun.oss.provider.url", "http://localhost:10011/sts-token-info?user_id=${aliyun-uid}&role=${role-name}")
-
-
Como referenciar bibliotecas Python de terceiros?
Sintoma: O job PySpark lança a exceção
No module named 'xxx'durante a execução.Causa: O job PySpark depende de bibliotecas Python de terceiros que não estão instaladas no ambiente Python padrão da plataforma MaxCompute.
-
Solução: Adicione dependências de bibliotecas de terceiros usando uma das opções abaixo.
-
Use o ambiente Python público do MaxCompute.
Adicione as configurações abaixo nas configurações do DataWorks ou no arquivo
spark-defaults.conf, conforme a versão do Python:-
Configuração para Python 2
## Python 2.7.13 配置 ## 以下配置必须在DataWorks配置项/spark-defaults.conf文件中添加 spark.hadoop.odps.cupid.resources = public.python-2.7.13-ucs4.tar.gz spark.pyspark.python = ./public.python-2.7.13-ucs4.tar.gz/python-2.7.13-ucs4/bin/python ## 三方库列表 https://odps-repo.oss-cn-hangzhou.aliyuncs.com/pyspark/py27/py27-default_req.txt -
Configuração para Python 3
## Python 3.7.9 配置 ## 以下配置必须在DataWorks配置项/spark-defaults.conf文件中添加 spark.hadoop.odps.cupid.resources = public.python-3.7.9-ucs4.tar.gz spark.pyspark.python = ./public.python-3.7.9-ucs4.tar.gz/python-3.7.9-ucs4/bin/python3 ## 三方库列表 https://odps-repo.oss-cn-hangzhou.aliyuncs.com/pyspark/py37/py37-default_req.txt
-
-
Faça upload de um pacote WHEEL individual.
Ideal para cenários simples com poucas dependências Python de terceiros. Veja o exemplo de comando abaixo.
##需要将wheel包重命名为zip包,例如将pymysql的wheel包重命名为pymysql.zip ##将重命名后的zip包上传(文件类型为archive) ##在Dataworks spark节点引用该zip包(archive类型) ##在spark-defaults.conf或dataworks配置项中添加以下配置后即可import ## 配置 spark.executorEnv.PYTHONPATH=pymysql spark.yarn.appMasterEnv.PYTHONPATH=pymysql ## 上传代码 import pymysql -
Faça upload de um ambiente Python personalizado completo.
Indicado para dependências complexas ou quando é necessária uma versão específica do Python. Empacote e faça upload do ambiente Python completo usando contêineres Docker. Para mais detalhes, consulte Empacotar dependências.
-
Como resolver conflitos de dependência de JAR?
Sintoma: A execução lança a exceção
NoClassDefFoundError ou NoSuchMethodError.Causa: Geralmente ocorre devido a conflitos entre dependências de terceiros no pacote JAR e as dependências do Spark. Verifique o JAR principal enviado e as bibliotecas de terceiros para excluir as dependências conflitantes.
-
Solução:
-
Verifique o arquivo Pom.
Defina as dependências da edição comunitária do Spark como Provided.
Defina as dependências da edição comunitária do Hadoop como Provided.
Defina as dependências Odps/Cupid como Provided.
Exclua as dependências conflitantes.
Use
maven-shade-plugin relocationpara resolver conflitos de pacotes.
-
Como usar o modo Local para depuração?
-
Spark 2.3.0
-
Adicione as seguintes configurações ao arquivo spark-defaults.conf.
spark.hadoop.odps.project.name =<Yourprojectname> spark.hadoop.odps.access.id =<YourAccessKeyID> spark.hadoop.odps.access.key =<YourAccessKeySecret> spark.hadoop.odps.end.point =<endpoint> -
Execute a tarefa no modo Local.
./bin/spark-submit --master local spark_sql.py
-
-
Spark 2.4.5/Spark 3.1.1
-
Crie o arquivo
odps.confe adicione as seguintes configurações.odps.access.id=<YourAccessKeyID> odps.access.key=<YourAccessKeySecret> odps.end.point=<endpoint> odps.project.name=<Yourprojectname> -
Adicione uma variável de ambiente apontando para a localização do arquivo
odps.conf.export ODPS_CONF_FILE=/path/to/odps.conf -
Execute a tarefa no modo Local.
./bin/spark-submit --master local spark_sql.py
-
-
Erros comuns
-
Erro 1:
-
Mensagem de erro:
Incomplete config, no accessId or accessKey.Incomplete config, no odps.service.endpoint.
Causa: O EventLog está ativado no modo Local.
Solução: Remova o parâmetro
spark.eventLog.enabled=truedo arquivospark-defaults.conf.
-
-
Erro 2:
Mensagem de erro:
Cannot create CupidSession with empty CupidConf.Causa: O Spark 2.4.5 ou Spark 3.1.1 não consegue ler informações como
odps.access.id.Solução: Crie o arquivo
odps.conf, adicione a variável de ambiente e execute a tarefa novamente.
-
Erro 3:
Mensagem de erro:
java.util.NoSuchElementException: odps.access.id.Causa: O Spark 2.3.0 não consegue ler informações como
odps.access.id.Solução: Adicione configurações como
spark.hadoop.odps.access.idno arquivospark-defaults.conf.
-
Como resolver o erro "User signature does not match" ao executar jobs Spark?
-
Sintoma
A execução do job Spark retorna o seguinte erro:
Stack: com.aliyun.odps.OdpsException: ODPS-0410042: Invalid signature value - User signature does not match -
Causa
Falha na autenticação. O AccessKey ID ou AccessKey Secret está incorreto.
-
Solução
Verifique se o AccessKey ID e o AccessKey Secret fornecidos no arquivo spark-defaults.conf correspondem aos valores exibidos na página Gerenciamento de Informações do Usuário do console oficial da Alibaba Cloud. Compare especificamente os campos AccessKey ID e AccessKey Secret. Caso haja divergência, corrija as credenciais.
Como resolver o erro "You have NO privilege" ao executar jobs Spark?
-
Sintoma
A execução do job Spark retorna o seguinte erro:
Stack: com.aliyun.odps.OdpsException: ODPS-0420095: Access Denied - Authorization Failed [4019], You have NO privilege 'odps:CreateResource' on {acs:odps:*:projects/*} -
Causa
Permissões insuficientes. É necessário solicitar acesso.
-
Solução
O proprietário do projeto deve conceder permissões de Leitura e Criação de Recursos. Para mais informações sobre autorização, consulte MaxCompute permissions.
Como resolver o erro "Access Denied" ao executar jobs Spark?
-
Sintoma
A execução do job Spark retorna o seguinte erro:
Exception in thread "main" org.apache.hadoop.yarn.exceptions.YarnException: com.aliyun.odps.OdpsException: ODPS-0420095: Access Denied - The task is not in release range: CUPID -
Causa
Causa 1: O AccessKey ID ou AccessKey Secret configurado no arquivo Spark-defaults.conf está incorreto.
Causa 2: A região do projeto não oferece o serviço Spark on MaxCompute.
-
Solução
Para a Causa 1: Verifique as configurações no arquivo Spark-defaults.conf e insira o AccessKey ID e AccessKey Secret corretos. Para mais informações, consulte Defina um ambiente de desenvolvimento Linux.
Para a Causa 2: Confirme se a região do projeto já disponibiliza o serviço Spark on MaxCompute ou entre no grupo DingTalk 21969532 (Grupo de Suporte Spark on MaxCompute) para obter assistência.
Como resolver o erro "No space left on device" ao executar jobs Spark?
O Spark utiliza discos de rede para armazenamento local. Tanto os dados de Shuffle quanto os dados despejados pelo BlockManager são armazenados nesses discos. O tamanho do disco é controlado pelo parâmetro spark.hadoop.odps.cupid.disk.driver.device_size, cujo valor padrão é 20 GB e o máximo é 100 GB. Se o erro persistir mesmo após ajustar para 100 GB, analise a causa raiz. Frequentemente, isso se deve a skew de dados, onde os dados se concentram em blocos específicos durante o Shuffle ou Cache. Nesse cenário, reduza o número de núcleos por Executor (spark.executor.cores) e aumente a quantidade total de Executors (spark.executor.instances).
Como resolver o erro "Table or view not found" ao executar jobs Spark?
-
Sintoma
A execução do job Spark retorna o seguinte erro:
Table or view not found:xxx -
Causa
Causa 1: A tabela ou visualização não existe.
Causa 2: A configuração de catálogo do Hive está ativada.
-
Solução
Para a Causa 1: Crie a tabela necessária.
-
Para a Causa 2: Remova a configuração de catálogo. No exemplo de erro abaixo, remova a chamada
enableHiveSupport().spark = SparkSession.builder.appName(app_name).enableHiveSupport().getOrCreate()
Como resolver o erro "Shutdown hook called before final status was reported" ao executar jobs Spark?
-
Sintoma
A execução do job Spark retorna o seguinte erro:
App Status: SUCCEEDED, diagnostics: Shutdown hook called before final status was reported. -
Causa
O método main do usuário submetido ao cluster não solicitou recursos via AM (ApplicationMaster). Isso ocorre, por exemplo, quando o usuário não cria um SparkContext ou define spark.master como local no código.
Como resolver erros de conflito de versão de pacotes JAR ao executar jobs Spark?
-
Sintoma
A execução do job Spark retorna o seguinte erro:
User class threw exception: java.lang.NoSuchMethodError -
Causa
Conflito de versões de pacotes JAR ou erro de classe.
-
Solução
-
Localize o JAR contendo a classe problemática no caminho $SPARK_HOME/jars e execute o comando abaixo para identificar as coordenadas e a versão da biblioteca de terceiros.
grep <异常类类名> $SPARK_HOME/jars/*.jar -
No diretório raiz do job Spark, execute o comando abaixo para listar todas as dependências do projeto.
mvn dependency:tree -
Após identificar a dependência correspondente, execute o comando abaixo para excluir o pacote conflitante.
maven dependency exclusions Recompile e envie o código novamente.
-
Como resolver o erro "ClassNotFound" ao executar jobs Spark?
-
Sintoma
A execução do job Spark retorna o seguinte erro:
java.lang.ClassNotFoundException: xxxx.xxx.xxxxx -
Causa
A classe não existe ou há erro na configuração de dependências.
-
Solução
-
Execute o comando abaixo para verificar se a definição da classe existe no pacote JAR enviado.
jar -tf <作业JAR包> | grep <类名称> Verifique se as dependências no arquivo pom.xml estão corretas.
Envie o pacote JAR usando o método Shade.
-
Como resolver o erro "The task is not in release range" ao executar jobs Spark?
-
Sintoma
A execução do job Spark retorna o seguinte erro:
The task is not in release range: CUPID -
Causa
O serviço Spark on MaxCompute não está disponível na região do projeto.
-
Solução
Selecione uma região onde o serviço Spark on MaxCompute esteja ativado.
Como resolver o erro "java.io.UTFDataFormatException" ao executar jobs Spark?
-
Sintoma
A execução do job Spark retorna o seguinte erro:
java.io.UTFDataFormatException: encoded string too long: 2818545 bytes -
Solução
Ajuste o valor do parâmetro spark.hadoop.odps.cupid.disk.driver.device_size no arquivo spark-defaults.conf. O valor padrão é 20 GB, com suporte máximo de 100 GB.
Como resolver caracteres ilegíveis em chinês nos logs ao executar jobs Spark?
Adicione as seguintes configurações:
"--conf" "spark.executor.extraJavaOptions=-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8"
"--conf" "spark.driver.extraJavaOptions=-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8"
Como resolver erros ao chamar tarefas externas de terceiros via Spark?
O Spark não consegue chamar diretamente tarefas externas de terceiros devido à falta de conectividade de rede.
Configure um proxy reverso Nginx dentro da VPC para acessar a rede externa através dele. O Spark suporta acesso direto a VPCs. Para mais detalhes, consulte Acessar instâncias VPC com Spark.