As aplicações Spark no AnalyticDB for MySQL Enterprise Edition, Basic Edition e Data Lakehouse Edition são descritas no formato JSON. O script de configuração contém todas as informações sobre as aplicações, incluindo nome da aplicação, caminho do pacote JAR e parâmetros de configuração. Este tópico descreve como configurar uma aplicação Spark.
Precauções
O Enterprise Edition, Basic Edition e Data Lakehouse Edition está atualmente em versão canary. Para solicitar um teste do Enterprise Edition, Basic Edition e Data Lakehouse Edition, Envie um ticket.
Aplicações em lote
O Spark suporta aplicações batch, streaming e SQL. A execução de uma aplicação batch exige os pacotes JAR ou arquivos Python que contêm a classe de entrada. Dependendo dos requisitos do seu negócio, também podem ser necessários pacotes JAR adicionais para a aplicação, sandboxes Python e parâmetros da classe de entrada.
Escreva uma aplicação Spark em lote no AnalyticDB for MySQL usando parâmetros de linha de comando semelhantes aos da ferramenta spark-submit.
Exemplo de configuração de aplicação em lote
O exemplo a seguir mostra uma aplicação Spark em lote típica que lê dados do Object Storage Service (OSS). O script de configuração inclui parâmetros como nome da aplicação, pacotes JAR com a classe de entrada, a própria classe de entrada e seus parâmetros, além dos parâmetros de execução. Esse script é escrito no formato JSON. Exemplo:
{
"args": ["oss://${testBucketName}/data/test/test.csv"],
"name": "spark-oss-test",
"file": "oss://${testBucketName/jars/test/spark-examples-0.0.1-SNAPSHOT.jar",
"className": "com.aliyun.spark.oss.SparkReadOss",
"conf": {
"spark.driver.resourceSpec": "medium",
"spark.executor.resourceSpec": "medium",
"spark.executor.instances": 2,
"spark.adb.connectors": "oss"
}
}
A tabela a seguir descreve os parâmetros usados na configuração de aplicações em lote.
Parâmetro | Obrigatório | Exemplo | Descrição |
args | Não |
| Parâmetros de entrada da aplicação Spark. Separe múltiplos parâmetros com vírgulas (,). |
name | Não |
| Nome da aplicação Spark. |
file | Sim, para aplicações escritas em Python, Java ou Scala |
| Caminho onde o arquivo principal da aplicação Spark está armazenado. O arquivo principal pode ser um pacote JAR contendo a classe de entrada ou um arquivo executável de entrada em Python. Nota Os arquivos principais das aplicações Spark devem ser armazenados no OSS. |
className | Sim, para aplicações escritas em Java ou Scala |
| Classe de entrada do programa Java ou Scala. Não é necessária para Python. |
sqls | Sim, para aplicações SQL |
| Instruções SQL usadas para enviar diretamente aplicações SQL em lote, sem necessidade de especificar pacotes JAR ou arquivos Python. Este parâmetro não pode ser usado junto com os parâmetros file, className ou args. É possível especificar várias instruções SQL para uma aplicação Spark, separando-as por vírgulas (,). A execução segue a ordem definida. |
jars | Não |
| Pacotes JAR necessários para a aplicação Spark. Separe múltiplos pacotes JAR com vírgulas (,). Durante a execução da aplicação, esses pacotes são adicionados aos classpaths das máquinas virtuais Java (JVMs) do driver e dos executores. Nota Todos os pacotes JAR necessários para aplicações Spark devem ser armazenados no OSS. |
files | Não |
| Arquivos necessários para a aplicação Spark. Eles são baixados para os diretórios de trabalho do driver e dos executores. É possível configurar aliases para esses arquivos. Exemplo: Separe múltiplos arquivos com vírgulas (,). Nota
|
archives | Não |
| Pacotes compactados necessários para a aplicação Spark, obrigatoriamente no formato .TAR.GZ. A descompactação ocorre no diretório de trabalho do processo Spark. Aliases podem ser configurados para os arquivos dentro do pacote. Exemplo: Separe múltiplos pacotes com vírgulas (,). Nota Todos os pacotes compactados necessários para aplicações Spark devem residir no OSS. Falhas na descompactação causam falha na tarefa. |
pyFiles | Não, para aplicações Python |
| Arquivos Python necessários para a aplicação PySpark, nos formatos ZIP, PY ou EGG. Quando houver vários arquivos, recomenda-se usar ZIP ou EGG. Referencie-os no código Python como módulos. Separe múltiplos pacotes com vírgulas (,). Nota Todos os arquivos Python necessários para aplicações PySpark devem ser armazenados no OSS. |
conf | Sim |
| Parâmetros de configuração necessários para a aplicação Spark, similares aos do Apache Spark. Devem seguir o formato |
Aplicações SQL
O AnalyticDB for MySQL permite enviar aplicações Spark SQL diretamente pelo console, sem precisar empacotar instruções em um arquivo JAR ou escrever código Python. Isso facilita a análise de dados com Spark pelos desenvolvedores. Ao enviar uma aplicação Spark SQL, defina o tipo de aplicação como SQL.
Exemplo de configuração de aplicação SQL
-- Here is just an example of SparkSQL. Modify the content and run your spark program.
conf spark.driver.resourceSpec=medium;
conf spark.executor.instances=2;
conf spark.executor.resourceSpec=medium;
conf spark.app.name=Spark SQL Test;
conf spark.adb.connectors=oss;
-- Here are your sql statements
show databases;
Tipos de instrução suportados pelo Spark SQL
Edite as instruções SQL no editor Spark. Cada instrução individual deve terminar com ponto e vírgula (;).
O Spark SQL suporta os seguintes tipos de instrução:
-
Instruções CONF
Use instruções CONF antes das instruções SQL para definir configurações do Spark.
Cada instrução CONF define o valor de um parâmetro para envio da aplicação Spark. Separe cada instrução CONF individual com ponto e vírgula (;).
Não coloque as chaves e os valores das instruções CONF entre aspas simples (') ou duplas (").
Para mais informações sobre os parâmetros de configuração suportados pelas instruções CONF, consulte a seção "Descrição dos parâmetros conf" deste tópico.
-
Instruções ADD JAR
Insira instruções ADD JAR antes das instruções SQL para adicionar pacotes JAR necessários à execução de comandos Spark SQL, como pacotes de funções definidas pelo usuário (UDFs) e conectores de fontes de dados. Especifique os pacotes JAR usando o formato de caminho do OSS.
Cada instrução ADD JAR aponta para um pacote JAR no formato de caminho do OSS. Não é necessário envolver o caminho com aspas simples (') ou duplas ("). Separe cada instrução ADD JAR com ponto e vírgula (;).
Instruções DDL ou DML suportadas pelo Spark SQL, incluindo
SELECTeINSERT.
Alternar o serviço de metadados
Por padrão, o Spark SQL utiliza o serviço de metadados fornecido pelo AnalyticDB for MySQL. Para mudar para outro serviço de metadados, use um dos métodos abaixo:
-
Catálogo em memória
CONF spark.sql.catalogImplementation = in-memory; -
Hive metastore 2.3.7 ou outras versões integradas ao Spark
CONF spark.sql.catalogImplementation = hive; CONF spark.sql.hive.metastore.version = 2.3.7;NotaPara conectar-se a um Hive metastore autogerenciado, substitua a configuração padrão pela configuração padrão do Apache Spark. Para mais detalhes sobre essa configuração, consulte Configuração do Spark.
Descrição dos parâmetros conf
Os parâmetros de configuração do Spark no AnalyticDB for MySQL assemelham-se aos do Apache Spark. As tabelas a seguir detalham os parâmetros do AnalyticDB for MySQL que diferem do Apache Spark e aqueles exclusivos do AnalyticDB for MySQL.
-
Recursos especificados para driver e executor
ImportanteO uso dos parâmetros descritos na tabela a seguir difere do Apache Spark.
Defina os parâmetros spark.driver.resourceSpec e spark.executor.resourceSpec com o mesmo valor.
Parâmetro
Descrição
Parâmetro correspondente no Apache Spark
spark.driver.resourceSpec
Especificações de recurso do driver Spark. Cada tipo corresponde a uma especificação distinta. Para mais informações, veja a coluna Tipo na seção "Especificações de recursos do Spark" deste tópico.
Exemplo:
CONF spark.driver.resourceSpec = c.small;. Neste exemplo, o driver Spark utiliza 1 núcleo e 2 GB de memória.spark.driver.cores e spark.driver.memory
spark.executor.resourceSpec
Especificações de recurso de cada executor Spark. Cada tipo corresponde a uma especificação distinta. Consulte a coluna Tipo na seção "Especificações de recursos do Spark" deste tópico.
Exemplo:
CONF spark.executor.resourceSpec = c.small;. Aqui, cada executor Spark ocupa 1 núcleo e 2 GB de memória.spark.executor.cores e spark.executor.memory
-
Spark UI
Parâmetro
Valor padrão
Descrição
spark.app.log.rootPath
Nenhum
Diretório onde os logs de eventos da Spark UI e os logs gerados pelas aplicações Spark do AnalyticDB for MySQL são armazenados. Especifique manualmente um caminho do OSS para este parâmetro. Caso contrário, não será possível acessar a Spark UI nem visualizar os logs da aplicação.
-
Operações e manutenção de usuários RAM
Parâmetro
Valor padrão
Descrição
spark.adb.roleArn
Nenhum
Alibaba Cloud Resource Name (ARN) da função do Resource Access Management (RAM) com permissões para enviar aplicações Spark no Console RAM. Para mais informações, consulte Visão geral. Este parâmetro só é necessário ao enviar aplicações Spark como usuário RAM.
-
Conectores de fonte de dados integrados no Spark do AnalyticDB for MySQL
Parâmetro
Valor padrão
Descrição
spark.adb.connectors
Nenhum
Nomes dos conectores integrados no Spark do AnalyticDB for MySQL. Separe os nomes dos conectores com vírgulas (,). Valores válidos: OSS, hbase1.x e tablestore.
spark.hadoop.io.compression.codec.snappy.native
false
Indica se um arquivo Snappy está no formato Snappy padrão. Por padrão, o Hadoop reconhece arquivos Snappy editados nele. Se definido como true, usa-se a biblioteca Snappy padrão para descompressão; caso contrário, utiliza-se a biblioteca Snappy padrão do Hadoop.
-
Acesso VPC e conexão à fonte de dados
Parâmetro
Valor padrão
Descrição
spark.adb.eni.vswitchId
Nenhum
ID do vSwitch associado a uma interface de rede elástica (ENI), usado para acessar uma Virtual Private Cloud (VPC). Se sua instância do Elastic Compute Service (ECS) consegue acessar a fonte de dados de destino, defina este parâmetro como o ID do vSwitch ao qual a instância ECS está conectada.
spark.adb.eni.securityGroupId
Nenhum
ID do grupo de segurança associado a uma ENI, utilizado para acesso à VPC. Caso sua instância ECS tenha acesso à fonte de dados desejada, configure este parâmetro com o ID do grupo de segurança ao qual ela pertence.
spark.adb.eni.extraHosts
Nenhum
Mapeamentos entre endereços IP e hostnames, permitindo que o Spark resolva os hostnames das fontes de dados. Obrigatório ao conectar-se a uma fonte de dados Hive autogerenciada.
NotaSepare endereços IP e hostnames com espaços. Separe múltiplos grupos de IPs e hostnames com vírgulas (,). Exemplo: "ip0 master0, ip1 master1".
-
Conexão do Spark SQL aos metadados do AnalyticDB for MySQL
Parâmetro
Valor padrão
Descrição
spark.sql.hive.metastore.version
Nenhum
Versão do Hive metastore. Se definido como
ADB, permite acessar os metadados do AnalyticDB for MySQL e ler dados de tabelas do AnalyticDB for MySQL. -
Novas tentativas de aplicação
Parâmetro
Valor padrão
Descrição
spark.adb.maxAttempts
1
Número máximo de novas tentativas. O valor padrão é 1, indicando que a aplicação Spark não tenta novamente após falha.
Se definido como 3, a aplicação fará até três novas tentativas dentro de uma janela deslizante.
spark.adb.attemptFailuresValidityInterval
Long.MAX
Duração da janela deslizante, em milissegundos.
Por exemplo, se definido como 6000, o sistema conta as tentativas nos últimos 6.000 milissegundos após uma falha. Se o número de tentativas for menor que o valor de spark.adb.maxAttempts, o sistema continua tentando executar a aplicação.
-
Configuração de origem
Parâmetro
Valor padrão
Descrição
spark.adb.driver.cpu-vcores-ratio
1
Proporção de vCPUs para núcleos de cpu reais usados pelo driver. Por exemplo, se o driver usa especificações de recurso medium (2 núcleos e 8 GB de memória) e você define este parâmetro como 2, ele poderá executar 4 vCPUs em paralelo. Definir spark.driver.cores como 4 produz o mesmo desempenho.
spark.adb.executor.cpu-vcores-ratio
1
Proporção de vCPUs para núcleos de cpu reais usados por um executor. Se a utilização da cpu de uma tarefa estiver baixa, ajuste este parâmetro para aumentá-la. Por exemplo, se um executor usa especificações medium (2 núcleos e 8 GB de memória) e você define este parâmetro como 2, ele executará 4 vCPUs em paralelo, agendando 4 tarefas simultaneamente. Definir spark.executor.cores como 4 alcança o mesmo resultado.
Especificações de recursos do Spark
Tipo | Especificações | |
Núcleos de CPU | Memória (GB) | |
c.small | 1 | 2 |
small | 1 | 4 |
m.small | 1 | 8 |
c.medium | 2 | 4 |
medium | 2 | 8 |
m.medium | 2 | 16 |
c.large | 4 | 8 |
large | 4 | 16 |
m.large | 4 | 32 |
c.xlarge | 8 | 16 |
xlarge | 8 | 32 |
m.xlarge | 8 | 64 |
c.2xlarge | 16 | 32 |
2xlarge | 16 | 64 |
m.2xlarge | 16 | 128 |