Como executar o RStudio® Server em um cluster do Dataproc

Neste tutorial, mostramos como executar o RStudio Server (em inglês) em um cluster do Dataproc e acessar a interface do usuário da Web do RStudio na máquina local.

Para seguir este tutorial, espera-se que você tenha familiaridade com a linguagem R e com a IU da Web do RStudio, além de noções básicas sobre o uso do Apache Spark, de túneis do Secure Shell (SSH) e do Apache Hadoop em execução no Dataproc.

Objetivos

Neste tutorial, apresentamos os procedimentos a seguir:

  • conectar R com o Apache Spark ao Apache Hadoop YARN em execução em um cluster do Dataproc;
  • Conecte seu navegador por meio de um túnel SSH para acessar as IUs do RStudio, Spark e YARN.
  • executar uma consulta de exemplo no Dataproc usando o RStudio.

Custos

Neste tutorial, usamos os seguintes componentes faturáveis do Google Cloud:

Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços. Novos usuários do Google Cloud podem ser qualificados para uma avaliação gratuita.

Antes de começar

  1. Faça login na sua conta do Google.

    Se você ainda não tiver uma, inscreva-se.

  2. No Console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar a página do seletor de projetos

  3. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como confirmar se o faturamento está ativado para o projeto.

  4. Ative as APIs Dataproc and Cloud Storage.

    Ative as APIs

  5. Instale e inicialize o SDK do Cloud..

Ao concluir este tutorial, exclua os recursos criados para evitar o faturamento contínuo. Para mais informações, veja Limpeza.

Como criar um cluster do Dataproc

  1. No Console do Cloud, acesse a página Clusters do Dataproc:

    Acessar clusters do Dataproc

  2. Clique em Criar cluster:

    Criar um cluster

  3. Nomeie o cluster e clique em Criar.

Para este tutorial, os tamanhos de cluster padrão são adequados. Observe a zona em que você criou o cluster, porque essas informações serão necessárias em etapas posteriores.

Como instalar o RStudio Server e as dependências correspondentes no nó controlador (mestre)

Linux ou macOS

  1. Na máquina local, conecte-se por meio do SSH ao nó mestre do cluster do Dataproc:

    gcloud compute ssh \
        --zone=CLUSTER_ZONE \
        --project=PROJECT_ID \
        CLUSTER_NAME-m
    

    Em que:

    • CLUSTER_ZONE é a zona onde o cluster foi criado;
    • PROJECT_ID é o ID do projeto;
    • CLUSTER_NAME é o nome do cluster;
    • CLUSTER_NAME-m é o nome do nó controlador do cluster;
  2. No nó mestre, instale os pacotes e as respectivas dependências necessárias:

    sudo apt-get update
    sudo apt-get install -y \
        r-base r-base-dev \
        libcurl4-openssl-dev libssl-dev libxml2-dev
    
  3. Siga as instruções no site do RStudio para fazer o download e instalar a versão mais recente do RStudio Server para o Linux Debian de 64 bits.

Windows

  1. Na máquina local, conecte-se por meio do SSH ao nó mestre do cluster do Dataproc:

    gcloud compute ssh ^
        --zone=CLUSTER_ZONE ^
        --project=PROJECT_ID ^
        CLUSTER_NAME-m
    

    Em que:

    • CLUSTER_ZONE é a zona em que o cluster foi criado;
    • PROJECT_ID é o ID do projeto;
    • CLUSTER_NAME é o nome do cluster;
    • CLUSTER_NAME-m é o nome do nó controlador do cluster;
  2. No nó mestre, instale os pacotes e as respectivas dependências necessárias:

    sudo apt-get update
    sudo apt-get install -y \
        r-base r-base-dev \
        libcurl4-openssl-dev libssl-dev libxml2-dev
    
  3. Siga as instruções no site do RStudio para fazer o download e instalar a versão mais recente do RStudio Server para o Linux Debian de 64 bits.

Como criar uma conta de usuário no nó mestre

Para criar uma conta de usuário e fazer o login na IU do RStudio, siga estas etapas.

  1. Crie uma nova conta, substituindo USER_NAME pelo novo nome de usuário:

    sudo adduser USER_NAME
  2. Digite uma senha para o novo usuário quando for solicitado.

    É possível criar diversas contas de usuário no nó controlador para oferecer aos usuários o próprio ambiente RStudio. Para cada usuário criado, siga as etapas de instalação do sparklyr e do Spark.

Como conectar-se à IU da Web no RStudio

O RStudio Server é executado no nó controlador do Dataproc e é acessível apenas pela rede interna do Google Cloud. Para acessar o servidor, você precisa de um caminho de rede entre a máquina local e o nó controlador na rede interna do Google Cloud.

Conectar-se por encaminhamento de porta com túnel SSH é mais seguro do que abrir uma porta de firewall para o nó mestre. O uso de um túnel SSH faz a criptografia da conexão com a IU da Web, mesmo que o servidor use HTTP simples.

Há duas opções para o encaminhamento de portas: por TCP ou de forma dinâmica usando SOCKS (ambos em inglês).

Usando SOCKS, é possível visualizar todas as interfaces da Web internas em execução no nó controlador do Dataproc. No entanto, você precisará usar uma configuração de navegador personalizada para redirecionar todo o tráfego do navegador pelo proxy SOCKS.

O encaminhamento de porta TCP não requer uma configuração de navegador personalizada, mas você só consegue visualizar a interface da Web do RStudio.

Conectar-se por meio de um túnel SSH SOCKS

Para criar um túnel SSH SOCKS e conectar-se mediante um perfil de navegador especialmente configurado, siga as etapas em Como se conectar às interfaces da web.

Após a conexão, use os URLs abaixo para acessar as interfaces da Web.

  • Para carregar a IU da Web do RStudio, conecte seu navegador especialmente configurado http://CLUSTER_NAME-m:8787. Em seguida, faça login usando o nome de usuário e a senha criados por você.

  • Para carregar a IU da Web do gerenciador de recursos YARN, conecte seu navegador especialmente configurado ao http://CLUSTER_NAME-m:8088.

  • Para carregar a IU da Web do HDFS NameNode, conecte seu navegador especialmente configurado ao http://CLUSTER_NAME-m:9870.

Conectar-se por encaminhamento de portas SSH

Linux ou macOS

  1. Na máquina local, conecte-se ao nó controlador do Dataproc:

    gcloud compute ssh \
        --zone=CLUSTER_ZONE \
        --project=PROJECT_ID \
        CLUSTER_NAME-m -- \
        -L 8787:localhost:8787
    

    O parâmetro -- separa argumentos para o comando gcloud dos argumentos enviados para o comando ssh (em inglês). A opção -L configura o encaminhamento de portas TCP da porta 8787 na máquina local para a porta 8787 no nó mestre do cluster, que o RStudio Server está escutando.

  2. Para carregar a IU da Web do RStudio, conecte seu navegador a http://localhost:8787 (em inglês).

  3. Faça login usando o nome de usuário e a senha que você criou.

Windows

  1. Na máquina local, conecte-se ao nó controlador do Dataproc:

    gcloud compute ssh ^
        --zone=CLUSTER_ZONE ^
        --project=PROJECT_ID ^
        CLUSTER_NAME-m -- ^
        -L 8787:localhost:8787
    

    O parâmetro -- separa argumentos para o comando gcloud dos argumentos enviados para o comando ssh (em inglês). A opção -L configura o encaminhamento de portas TCP da porta 8787 na máquina local para a porta 8787 no nó mestre do cluster, que o RStudio Server está escutando.

  2. Para carregar a IU da Web do RStudio, conecte seu navegador a http://localhost:8787 (em inglês).

  3. Faça login usando o nome de usuário e a senha que você criou.

Como instalar o pacote sparklyr e o Spark

No console do RStudio R, execute os comandos abaixo para instalar o pacote sparklyr e o Spark:

install.packages("sparklyr")
sparklyr::spark_install()

Esses comandos fazem o download, compilam e instalam os pacotes R necessários e uma instância Spark compatível. Cada comando leva vários minutos para ser concluído.

Como conectar R ao Spark no YARN

Sempre que reiniciar uma sessão R, siga estas etapas:

  1. Carregue as bibliotecas e configure as variáveis de ambiente necessárias:

    library(sparklyr)
    library(dplyr)
    spark_home_set()
    Sys.setenv(HADOOP_CONF_DIR = '/etc/hadoop/conf')
    Sys.setenv(YARN_CONF_DIR = '/etc/hadoop/conf')
    
  2. No YARN, conecte-se ao Spark usando as configurações padrão:

    sc <- spark_connect(master = "yarn-client")

    O objeto sc faz referência à sua conexão Spark, que pode ser usada para gerenciar dados e executar consultas em R.

    Se o comando for bem-sucedido, passe para a seção Como verificar o status da conexão Spark..

    Se o comando falhar e exibir uma mensagem de erro começando com:

    Error in force(code) :
    Failed during initialize_connection: java.lang.NoClassDefFoundError: com/sun/jersey/api/client/config/ClientConfig

    Então, há uma incompatibilidade (em inglês) entre a versão de YARN e a de Spark usada pelo RStudio. Para evitar essa incompatibilidade, desative o serviço de tempo do YARN.

  3. No menu da IU da Web do RStudio, acesse Tools > Shell para criar uma nova guia "Terminal".

  4. Na guia "Terminal", digite o seguinte comando para desativar o serviço que está causando a incompatibilidade.

    echo "spark.hadoop.yarn.timeline-service.enabled false" \
        >> $SPARK_HOME/conf/spark-defaults.conf
  5. Feche a guia "Terminal" e acesse Session > Restart R. no menu

Agora repita as etapas 1 e 2 para se conectar ao Spark com êxito.

Como verificar o status da conexão Spark

O objeto sc criado acima é a referência à sua conexão Spark. Execute o comando a seguir para confirmar se a sessão R está conectada:

spark_connection_is_open(sc)

Se a conexão for estabelecida, o comando retornará o seguinte:

[1] TRUE

É possível ajustar os parâmetros de conexão usando um objeto de configuração que pode ser transmitido para spark_connect().

Para mais detalhes sobre os parâmetros de conexão do sparklyr e como ajustar o Spark no YARN, veja o seguinte:

Opcional: como verificar a instalação

Para verificar se tudo está funcionando, carregue uma tabela no cluster do Dataproc e realize uma consulta.

  1. No console do R, instale um exemplo de conjunto de dados: uma lista de todos os voos de Nova York em 2013 e os copie para o Spark:

    install.packages("nycflights13")
    flights_tbl <- copy_to(sc, nycflights13::flights, "flights")
    
  2. Caso você não esteja usando o encaminhamento de porta SOCKS, pule para a etapa 3. Caso contrário, use a IU do Spark para verificar se a tabela foi criada.

    1. No navegador que você configurou, carregue o gerenciador de recursos YARN:

      http://CLUSTER_NAME-m:8088

      Na lista de aplicativos, será exibida na tabela uma linha para o aplicativo sparklyr.

      linha para o aplicativo sparklyr

    2. Na coluna IU de rastreamento à direita da tabela, clique no link ApplicationMaster para acessar a IU do Spark.

      Na guia Jobs da IU do Spark, você verá entradas para os jobs que copiaram os dados para o Spark. Na guia Armazenamento, você verá uma entrada para 'voos' da tabela na memória.

      Guia "Storage" com entrada para voos da tabela na memória

  3. No console R, execute a seguinte consulta:

    flights_tbl %>%
      select(carrier, dep_delay) %>%
      group_by(carrier) %>%
      summarize(count = n(), mean_dep_delay = mean(dep_delay)) %>%
      arrange(desc(mean_dep_delay))
    

    Essa consulta cria uma lista do atraso médio de partidas por voo por companhia aérea em ordem decrescente e produz o seguinte resultado:

    # Source:     lazy query [?? x 3]
    # Database:   spark_connection
    # Ordered by: desc(mean_dep_delay)
       carrier  count mean_dep_delay
       <chr>    <dbl>          <dbl>
     1 F9        685.           20.2
     2 EV      54173.           20.0
     3 YV        601.           19.0
     4 FL       3260.           18.7
     5 WN      12275.           17.7
    ...
    

Ao voltar para a guia Jobs na IU do Spark, você verá os jobs usados para executar essa consulta. Para jobs mais longos, é possível usar essa guia para monitorar o progresso.

Agradecimentos

Agradecemos à Mango Solutions pela assistência no preparo de determinados conteúdos técnicos para este artigo.

Limpeza

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados neste tutorial, exclua o projeto que contém os recursos ou mantenha o projeto e exclua os recursos individuais.

  • Exclua o cluster do Dataproc.
  • Se você não tiver outros clusters do Dataproc na mesma região, também precisará excluir o bucket do Cloud Storage criado automaticamente para a região.

Excluir o cluster

  1. No Console do Cloud, acesse a página Clusters do Dataproc:

    Acessar clusters do Dataproc

  2. Na lista de clusters, encontre a linha do cluster do Dataproc que você criou e na coluna bucket de preparação do Cloud Storage, anote o nome do bucket, que começa com a palavra dataproc.

    Excluir o cluster

  3. Marque a caixa de seleção ao lado de rstudio-cluster e clique em Excluir.

  4. Ao ser solicitado para excluir o cluster, confirme a ação.

Excluir o intervalo

  1. Para excluir o bucket do Cloud Storage, acesse o navegador do Cloud Storage:

    Ir para o navegador do Cloud Storage

  2. Localize o bucket associado ao cluster do Dataproc que você acabou de excluir.

  3. Marque a caixa de seleção ao lado do nome do bucket e clique em Excluir.

    Excluir o bucket de armazenamento

  4. Ao ser solicitado para excluir o bucket de armazenamento, confirme a exclusão.

A seguir