Associe ao Apache Spark

Como administrador do BigQuery, pode criar uma associação para permitir que os analistas de dados executem procedimentos armazenados para o Apache Spark.

Antes de começar

Considerações sobre a localização

Quando escolher uma localização para os seus dados, considere o seguinte:

Várias regiões

Tem de especificar Trusted Cloud recursos localizados na mesma grande área geográfica:

  • Uma ligação na multirregião dos EUA pode fazer referência a um Spark History Server ou a um Dataproc Metastore em qualquer região única na área geográfica dos EUA, como us-central1, us-east4 ou us-west2.

  • Uma ligação na multirregião da UE do BigQuery pode fazer referência a um servidor de histórico do Spark ou a um metastore do Dataproc nos estados membros da União Europeia, como europe-north1 ou europe-west3.

Regiões únicas

Uma associação numa única região só pode fazer referência a Trusted Cloud recursos na mesma região. Por exemplo, uma ligação na única região us-east4 só pode fazer referência a um servidor de histórico do Spark ou a um Dataproc Metastore em us-east4.

Crie associações

Selecione uma das seguintes opções:

Consola

  1. Aceda à página do BigQuery.

    Aceda ao BigQuery

  2. No painel Explorador, clique em Adicionar dados.

    É apresentada a caixa de diálogo Adicionar dados.

  3. No painel Filtrar por, na secção Tipo de origem de dados, selecione Aplicações empresariais.

    Em alternativa, no campo Pesquisar origens de dados, pode introduzir Spark.

  4. Na secção Origens de dados em destaque, clique em Apache Spark.

  5. Clique no cartão da solução Apache Spark: federação do BigQuery.

  6. No painel Origem de dados externa, introduza as seguintes informações:

    • Na lista Tipo de ligação, selecione Apache Spark.

    • No campo ID da associação, introduza um nome para a associação, por exemplo, spark_connection.

    • Na lista Localização dos dados, selecione uma região.

    Pode criar uma ligação em regiões e multirregiões que suportam o BigQuery. Para mais informações, consulte o artigo Considerações sobre a localização.

  7. Clique em Criar associação.

  8. Clique em Aceder à associação.

  9. No painel Informações de associação, copie o ID da conta de serviço para utilização num passo seguinte.

bq

  1. Num ambiente de linha de comandos, use o comando bq mk para criar uma ligação:

    bq mk --connection --connection_type='SPARK' \
     --properties=PROPERTIES \
     --project_id=PROJECT_ID \
     --location=LOCATION
     CONNECTION_ID
    

    Substitua o seguinte:

    • PROPERTIES: um par de chave-valor para fornecer parâmetros específicos da ligação no formato JSON

      Por exemplo:

      --properties='{
      "metastoreServiceConfig": {"metastoreService": "METASTORE_SERVICE_NAME"},
      "sparkHistoryServerConfig": {"dataprocCluster": "DATAPROC_CLUSTER_NAME"}
      }'
      

      Substitua o seguinte:

    • PROJECT_ID: o ID do seu Trusted Cloud projeto

    • LOCATION: a localização onde quer armazenar a associação, por exemplo, US

    • CONNECTION_ID: o ID da associação, por exemplo, myconnection

      Quando vê os detalhes da associação na Trusted Cloud consola, o ID da associação é o valor na última secção do ID da associação totalmente qualificado apresentado em ID da associação, por exemplo, projects/.../locations/.../connections/myconnection

  2. Encontre e copie o ID da conta de serviço, pois vai precisar dele noutro passo:

    bq show --location=LOCATION --connection PROJECT_ID.LOCATION.CONNECTION_ID
    

    O resultado é semelhante ao seguinte:

    Connection myproject.us.myconnection
    
           name           type                    properties
    ---------------------- ------- ---------------------------------------------------
    myproject.us.myconnection  SPARK   {"serviceAccountId": "bqserver@example.s3ns.iam.gserviceaccount.com"}
    

Para obter informações sobre como gerir associações, consulte o artigo Faça a gestão das associações.

Conceda acesso à conta de serviço

Para permitir que um procedimento armazenado para o Apache Spark aceda aos seus Trusted Cloud recursos, tem de conceder à conta de serviço associada à ligação do procedimento armazenado as autorizações do IAM necessárias. Em alternativa, pode usar a sua conta de serviço personalizada para aceder aos dados.

  • Para ler e escrever dados do e para o BigQuery, tem de conceder à conta de serviço as seguintes autorizações de IAM:

    • bigquery.tables.* nas tabelas do BigQuery
    • bigquery.readsessions.* no seu projeto

    A função de IAM roles/bigquery.admin inclui as autorizações de que a conta de serviço precisa para ler e escrever dados de e para o BigQuery.

  • Para ler e escrever dados do e para o Cloud Storage, tem de conceder à conta de serviço a autorização storage.objects.* nos seus objetos do Cloud Storage.

    A função do roles/storage.objectAdmin IAM inclui as autorizações de que a conta de serviço precisa para ler e escrever dados do e para o Cloud Storage.

  • Se especificar o Dataproc Metastore quando criar uma associação, para que o BigQuery obtenha detalhes sobre a configuração do metastore, tem de conceder à conta de serviço a autorização metastore.services.get no Dataproc Metastore.

    A função roles/metastore.metadataViewer predefinida inclui a autorização de que a conta de serviço precisa para obter detalhes sobre a configuração do metastore.

    Também tem de conceder à conta de serviço a função roles/storage.objectAdmin no contentor do Cloud Storage para que o procedimento armazenado possa aceder ao diretório do armazém do Hive do Dataproc Metastore (hive.metastore.warehouse.dir). Se o procedimento armazenado realizar operações no metastore, pode ter de conceder autorizações adicionais. Para mais informações acerca das funções e autorizações da IAM no Dataproc Metastore, consulte o artigo Funções e autorizações predefinidas do Dataproc Metastore.

  • Se especificar um servidor de histórico persistente do Dataproc quando criar uma ligação, tem de conceder à conta de serviço as seguintes funções:

    • A função roles/dataproc.viewer no servidor de histórico persistente do Dataproc que contém a autorização dataproc.clusters.get.
    • A função roles/storage.objectAdmin no contentor do Cloud Storage que especifica para a propriedade spark:spark.history.fs.logDirectory quando cria o servidor de histórico persistente do Dataproc.

    Para mais informações, consulte os artigos Servidor de histórico persistente do Dataproc e Funções e autorizações do Dataproc.

Partilhe ligações com utilizadores

Pode conceder as seguintes funções para permitir que os utilizadores consultem dados e geram ligações:

  • roles/bigquery.connectionUser: permite que os utilizadores usem associações para estabelecer ligação a origens de dados externas e executar consultas nas mesmas.

  • roles/bigquery.connectionAdmin: permite que os utilizadores geram associações.

Para mais informações sobre as funções e as autorizações do IAM no BigQuery, consulte o artigo Funções e autorizações predefinidas.

Selecione uma das seguintes opções:

Consola

  1. Aceda à página do BigQuery.

    Aceda ao BigQuery

    As associações são apresentadas no seu projeto, num grupo denominado Associações externas.

  2. No painel Explorador, clique no nome do projeto > Ligações externas > ligação.

  3. No painel Detalhes, clique em Partilhar para partilhar uma associação. Depois, faça o seguinte:

    1. Na caixa de diálogo Autorizações de ligação, partilhe a ligação com outros responsáveis adicionando ou editando responsáveis.

    2. Clique em Guardar.

bq

Não pode partilhar uma ligação com a ferramenta de linhas de comando bq. Para partilhar uma associação, use a Trusted Cloud consola ou o método da API BigQuery Connections para partilhar uma associação.

API

Use o método projects.locations.connections.setIAM na secção de referência da API REST BigQuery Connections e forneça uma instância do recurso policy.

Java

Antes de experimentar este exemplo, siga as Javainstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Java BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN environment como s3nsapis.fr.

import com.google.api.resourcenames.ResourceName;
import com.google.cloud.bigquery.connection.v1.ConnectionName;
import com.google.cloud.bigqueryconnection.v1.ConnectionServiceClient;
import com.google.iam.v1.Binding;
import com.google.iam.v1.Policy;
import com.google.iam.v1.SetIamPolicyRequest;
import java.io.IOException;

// Sample to share connections
public class ShareConnection {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String location = "MY_LOCATION";
    String connectionId = "MY_CONNECTION_ID";
    shareConnection(projectId, location, connectionId);
  }

  static void shareConnection(String projectId, String location, String connectionId)
      throws IOException {
    try (ConnectionServiceClient client = ConnectionServiceClient.create()) {
      ResourceName resource = ConnectionName.of(projectId, location, connectionId);
      Binding binding =
          Binding.newBuilder()
              .addMembers("group:example-analyst-group@google.com")
              .setRole("roles/bigquery.connectionUser")
              .build();
      Policy policy = Policy.newBuilder().addBindings(binding).build();
      SetIamPolicyRequest request =
          SetIamPolicyRequest.newBuilder()
              .setResource(resource.toString())
              .setPolicy(policy)
              .build();
      client.setIamPolicy(request);
      System.out.println("Connection shared successfully");
    }
  }
}

O que se segue?