Crie um pacote manualmente

Neste tutorial, o senhor cria um Databricks ativo Bundle do zero. Esse pacote simples consiste em dois notebooks e na definição de um Databricks Job para executar esses notebooks. Em seguida, o senhor valida, implanta e executa o Job em seu Databricks workspace. Esses passos automatizam o início rápido intitulado Create your first fluxo de trabalho with a Databricks Job.

Requisitos

o passo 1: Criar o pacote

Um pacote contém os artefatos que o senhor deseja implantar e as configurações do recurso que deseja executar.

  1. Crie ou identifique um diretório vazio na sua máquina de desenvolvimento.

  2. Mude para o diretório vazio em seu terminal ou abra-o em seu IDE.

Dica

O senhor também pode usar um diretório que contenha um repositório clonado de um provedor Git. Isso permite que o senhor gerencie seu pacote com controle de versão externo e colabore mais facilmente com outros desenvolvedores e profissionais do IT em seu projeto.

Se o senhor optar por clonar um repo para esta demonstração, o site Databricks recomenda que o repo esteja vazio ou tenha apenas arquivos básicos, como README e .gitignore. Caso contrário, qualquer arquivo pré-existente no repo poderá ser sincronizado desnecessariamente com o seu Databricks workspace.

passo 2: Adicionar Notebook ao projeto

Neste passo, o senhor adiciona dois Notebook ao seu projeto. O primeiro Notebook obtém uma lista de nomes de bebês em alta desde 2007 da fonte pública de dados do New York State Department of Health. Consulte Nomes de bebês: tendências por nome: início de 2007 no site do departamento. Em seguida, o primeiro Notebook salva esses dados no volume Databricks Unity Catalog chamado my-volume em um esquema chamado default em um catálogo chamado main. O segundo Notebook consulta os dados salvos e exibe contagens agregadas dos nomes de bebês por primeiro nome e sexo para 2014.

  1. Na raiz do diretório, crie o primeiro Notebook, um arquivo chamado retrieve-baby-names.py.

  2. Adicione o código a seguir ao arquivo retrieve-baby-names.py:

    # Databricks notebook source
    import requests
    
    response = requests.get('http://health.data.ny.gov/api/views/jxy9-yhdk/rows.csv')
    csvfile = response.content.decode('utf-8')
    dbutils.fs.put("/Volumes/main/default/my-volume/babynames.csv", csvfile, True)
    
  3. Crie o segundo Notebook, um arquivo chamado filter-baby-names.py, no mesmo diretório.

  4. Adicione o código a seguir ao arquivo filter-baby-names.py:

    # Databricks notebook source
    babynames = spark.read.format("csv").option("header", "true").option("inferSchema", "true").load("/Volumes/main/default/my-volume/babynames.csv")
    babynames.createOrReplaceTempView("babynames_table")
    years = spark.sql("select distinct(Year) from babynames_table").toPandas()['Year'].tolist()
    years.sort()
    dbutils.widgets.dropdown("year", "2014", [str(x) for x in years])
    display(babynames.filter(babynames.Year == dbutils.widgets.get("year")))
    

o passo 3: Adicionar um arquivo de esquema de configuração de pacote ao projeto

Se estiver usando um IDE, como o Visual Studio Code, o PyCharm Professional ou o IntelliJ IDEA Ultimate, que ofereça suporte a arquivos YAML e arquivos de esquema JSON, o usuário poderá usar o IDE não apenas para criar o arquivo de esquema de configuração do pacote, mas também para verificar a sintaxe e a formatação do arquivo de configuração do pacote do projeto. Embora o arquivo de configuração do pacote que o senhor criará mais tarde no passo 5 seja baseado em YAML, o arquivo de esquema de configuração do pacote neste passo é baseado em JSON.

  1. Adicione o suporte do servidor de linguagem YAML ao Visual Studio Code, por exemplo, instalando a extensão YAML do Visual Studio Code Marketplace.

  2. Gere o arquivo de esquema de configuração do Databricks ativo Bundle JSON usando o Databricks CLI para executar o comando bundle schema e redirecionar a saída para um arquivo JSON. Por exemplo, gere um arquivo chamado bundle_config_schema.json no diretório atual, da seguinte forma:

    databricks bundle schema > bundle_config_schema.json
    
  3. No passo 5, o senhor adicionará o seguinte comentário ao início do arquivo de configuração do pacote, que associa o arquivo de configuração do pacote ao arquivo de esquema JSON especificado:

    # yaml-language-server: $schema=bundle_config_schema.json
    

    Observação

    No comentário anterior, se o arquivo de esquema Databricks ativo Bundle configuration JSON estiver em um caminho diferente, substitua bundle_config_schema.json pelo caminho completo do arquivo de esquema.

  1. Gere o arquivo de esquema de configuração do Databricks ativo Bundle JSON usando o Databricks CLI para executar o comando bundle schema e redirecione a saída para um arquivo JSON. Por exemplo, gere um arquivo chamado bundle_config_schema.json no diretório atual, da seguinte forma:

    databricks bundle schema > bundle_config_schema.json
    
  2. Configure o PyCharm para reconhecer o arquivo de esquema JSON de configuração do pacote e, em seguida, conclua o mapeamento do esquema JSON, seguindo as instruções em Configurar um esquema JSON personalizado.

  3. No passo 5, o senhor usará o site PyCharm para criar ou abrir um arquivo de configuração de pacote. Por convenção, esse arquivo tem o nome databricks.yml.

  1. Gere o arquivo de esquema de configuração do Databricks ativo Bundle JSON usando o Databricks CLI para executar o comando bundle schema e redirecionar a saída para um arquivo JSON. Por exemplo, gere um arquivo chamado bundle_config_schema.json no diretório atual, da seguinte forma:

    databricks bundle schema > bundle_config_schema.json
    
  2. Configure o IntelliJ IDEA para reconhecer o arquivo de esquema JSON de configuração do pacote e, em seguida, conclua o mapeamento do esquema JSON, seguindo as instruções em Configurar um esquema JSON personalizado.

  3. No passo 5, o senhor usará o site IntelliJ IDEA para criar ou abrir um arquivo de configuração de pacote. Por convenção, esse arquivo tem o nome databricks.yml.

passo 4: configurar a autenticação

Neste passo, o senhor configura a autenticação entre o Databricks CLI em sua máquina de desenvolvimento e o Databricks workspace. Este artigo pressupõe que o senhor deseja usar a autenticação OAuth user-to-machine (U2M) e um perfil de configuração Databricks correspondente denominado DEFAULT para autenticação.

Observação

A autenticação U2M é adequada para experimentar esses passos em tempo real. Para fluxo de trabalho totalmente automatizado, o site Databricks recomenda que o senhor use a autenticação máquina a máquina (M2M) OAuth. Consulte as instruções de configuração da autenticação M2M em Autenticação.

  1. Use a CLI do Databricks para iniciar o gerenciamento de tokens OAuth localmente executando o seguinte comando para cada workspace de destino.

    No comando a seguir, substitua <workspace-url> pelo URL da instância do seu workspace do Databricks, por exemplo https://dbc-a1b2345c-d6e7.cloud.databricks.com.

    databricks auth login --host <workspace-url>
    
  2. O site Databricks CLI solicita que o senhor salve as informações inseridas como um Databricks perfil de configuração. Pressione Enter para aceitar o nome de perfil sugerido ou insira o nome de um perfil novo ou existente. Qualquer perfil existente com o mesmo nome é substituído pelas informações que o senhor inseriu. O senhor pode usar perfis para alternar rapidamente o contexto de autenticação em vários espaços de trabalho.

    Para obter uma lista de todos os perfis existentes, em um terminal ou prompt de comando separado, use a CLI do Databricks para executar o comando databricks auth profiles. Para visualizar as configurações existentes de um perfil específico, execute o comando databricks auth env --profile <profile-name>.

  3. No navegador da web, conclua as instruções na tela para fazer log in no workspace do Databricks.

  4. Para visualizar o valor atual do token OAuth de um perfil e o registro de data e hora de expiração do token, execute um dos seguintes comandos:

    • databricks auth token --host <workspace-url>

    • databricks auth token -p <profile-name>

    • databricks auth token --host <workspace-url> -p <profile-name>

    Se você tiver vários perfis com o mesmo valor --host, talvez seja necessário especificar as opções --host e -p juntas para ajudar a CLI do Databricks a encontrar as informações de token OAuth correspondentes corretas.

o passo 5: Adicionar um arquivo de configuração de pacote ao projeto

Neste passo, o senhor define como implantar e executar os dois Notebook. Para esta demonstração, o senhor deseja usar um Databricks Job para executar o primeiro Notebook e, em seguida, o segundo Notebook. Como o primeiro Notebook salva os dados e o segundo Notebook consulta os dados salvos, o senhor deseja que o primeiro Notebook termine de ser executado antes de o segundo Notebook começar. Você modela esses objetivos em um arquivo de configuração de pacote em seu projeto.

  1. Na raiz do diretório, crie o arquivo de configuração do pacote, um arquivo chamado databricks.yml.

  2. Adicione o seguinte código ao databricks.yml arquivo , substituindo <workspace-url> pelo URL do seu espaço de trabalho , por exemplo,https://dbc-a1b2345c-d6e7.cloud.databricks.com. Esse URL deve corresponder ao do seu arquivo .databrickscfg:

Dica

A primeira linha, começando com # yaml-language-server, é necessária somente se seu IDE a suportar. Consulte o passo 3 anteriormente para obter detalhes.

# yaml-language-server: $schema=bundle_config_schema.json
bundle:
  name: baby-names

resources:
  jobs:
    retrieve-filter-baby-names-job:
      name: retrieve-filter-baby-names-job
      job_clusters:
        - job_cluster_key: common-cluster
          new_cluster:
            spark_version: 12.2.x-scala2.12
            node_type_id: i3.xlarge
            num_workers: 1
      tasks:
        - task_key: retrieve-baby-names-task
          job_cluster_key: common-cluster
          notebook_task:
            notebook_path: ./retrieve-baby-names.py
        - task_key: filter-baby-names-task
          depends_on:
            - task_key: retrieve-baby-names-task
          job_cluster_key: common-cluster
          notebook_task:
            notebook_path: ./filter-baby-names.py

targets:
  development:
    workspace:
      host: <workspace-url>

Para personalizar o trabalho, os mapeamentos em uma declaração de trabalho correspondem à carga útil da solicitação, expressa no formato YAML, das operações de criação de trabalho, conforme documentado em POST /api/2.1/Job/create na referência REST API .

Dica

Você pode definir, combinar e substituir as configurações de novos clusters de jobs em pacotes usando as técnicas descritas em Substituir configurações de cluster nos Pacotes de Ativos do Databricks.

o passo 6: Validar o arquivo de configuração do pacote do projeto

Neste passo, o senhor verifica se a configuração do pacote é válida.

  1. Use o endereço Databricks CLI para executar o comando bundle validate, como segue:

    databricks bundle validate
    
  2. Se um resumo da configuração do pacote for retornado, a validação foi bem-sucedida. Se algum erro for retornado, corrija os erros e repita este passo.

Se o senhor fizer alguma alteração no pacote após esse passo, deverá repetir esse passo para verificar se a configuração do pacote ainda é válida.

passo 7: aprimorar o projeto local para o espaço de trabalho remoto

Neste passo, o senhor implantou os dois Notebooks locais no seu Databricks workspace remoto e criou o Databricks Job no seu workspace.

  1. Use o endereço Databricks CLI para executar o comando bundle deploy da seguinte forma:

    databricks bundle deploy -t development
    
  2. Verifique se os dois Notebook locais foram implantados: Na barra lateral do workspace do Databricks, clique em workspace.

  3. Clique na pasta Users > <your-username> > .bundle > baby-names > development > files. Os dois Notebooks devem estar nessa pasta.

  4. Verifique se o Job foi criado: Na barra lateral do workspace do Databricks, clique em fluxo de trabalho.

  5. Em Jobs tab, clique em retrieve-filter-baby-names-Job.

  6. Clique na tarefa tab. Deve haver duas tarefas: retrieve-baby-names-tarefa e filter-baby-names-tarefa.

Se o senhor fizer alguma alteração no pacote após esse passo, deverá repetir os passos 6 a 7 para verificar se a configuração do pacote ainda é válida e, em seguida, reimplantar o projeto.

passo 8: execução do projeto implantado

Nesta passo, você executa o Job do Databricks em seu workspace.

  1. Use o endereço Databricks CLI para executar o comando bundle run, como segue:

    databricks bundle run -t development retrieve-filter-baby-names-job
    
  2. Copie o valor de Run URL que aparece no terminal e cole-o no navegador da Web para abrir o site Databricks workspace.

  3. No site Databricks workspace, depois que as duas tarefas forem concluídas com êxito e mostrarem barras de título verdes, clique na tarefa filter-baby-names-tarefa para ver os resultados da consulta.

Se o senhor fizer alguma alteração no pacote após esse passo, deverá repetir os passos 6-8 para verificar se a configuração do pacote ainda é válida, reimplantar o projeto e executar o projeto reimplantado.

passo 9: Limpar

Nesta passo, você exclui os dois Notebook implantados e o Job do seu workspace.

  1. Use o endereço Databricks CLI para executar o comando bundle destroy, como segue:

    databricks bundle destroy
    
  2. Confirme a solicitação de exclusão do trabalho: Quando solicitado a destruir permanentemente o recurso, digite y e pressione Enter.

  3. Confirme a solicitação de exclusão do Notebook: Quando solicitado a destruir permanentemente a pasta implantada anteriormente e todos os seus arquivos, digite y e pressione Enter.

A execução do comando bundle destroy exclui apenas o Job implantado e a pasta que contém os dois Notebooks implantados. Esse comando não exclui nenhum efeito colateral, como o arquivo babynames.csv que o primeiro Notebook criou. Para excluir o arquivo babybnames.csv, faça o seguinte:

  1. Na barra lateral do site Databricks workspace, clique em Catalog (Catálogo).

  2. Clique em Browse DBFS.

  3. Clique na pasta FileStore.

  4. Clique na seta dropdown ao lado de babynames.csv, e clique em Excluir.

  5. Se o senhor também quiser excluir o pacote da máquina de desenvolvimento, poderá excluir o diretório local do passo 1.