Como executar o RStudio® Server em um cluster do Cloud Dataproc

Neste tutorial, mostramos como executar o RStudio Server em um cluster do Cloud Dataproc e acessar a interface de 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 Cloud Dataproc.

Objetivos

Este tutorial destina-se a orientá-lo nos seguintes procedimentos:

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

Custos

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

Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços. Usuários novos do GCP podem estar 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 GCP, na página do seletor de projetos, selecione ou crie um projeto do GCP.

    Acesse a página do seletor de projetos

  3. Verifique se o faturamento foi ativado no projeto do Google Cloud Platform. Saiba como confirmar que o faturamento está ativado para seu projeto.

  4. Ative a(s) Cloud Dataproc and Cloud Storage APIs necessária(s).

    Ativar a(s) 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 Cloud Dataproc

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

    ACESSAR A PÁGINA DE CLUSTERS

  2. Clique em Create Cluster.

    Create a cluster

  3. Nomeie o cluster e clique em Create.

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 node mestre

Linux ou macOS

  1. Na máquina local, conecte-se pelo SSH ao nó mestre do cluster do Cloud 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ó mestre do cluster.
  2. No nó mestre, instale os pacotes e dependências necessários:

    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 pelo SSH ao nó mestre do cluster do Cloud 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ó mestre do cluster.
  2. No nó mestre, instale os pacotes e dependências necessários:

    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 node mestre para fornecer 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 node mestre do Cloud Dataproc e é acessível apenas pela rede interna do GCP. Para acessar o servidor, você precisa de um caminho de rede entre a máquina local e o node mestre na rede interna do GCP.

É mais seguro a conexão por encaminhamento de porta mediante um túnel SSH do que abrir uma porta de firewall para o node 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).

Com o SOCKS, é possível visualizar todas as interfaces internas da Web em execução no node mestre do Cloud Dataproc. No entanto, é preciso 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 configurado especialmente a 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 configurado especialmente a http://[CLUSTER_NAME]-m:8088.

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

Conectar-se por encaminhamento de portas SSH

Linux ou macOS

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

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

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

  2. Para carregar a IU da Web do RStudio, conecte o navegador a http://localhost:8787.

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

Windows

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

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

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

  2. Para carregar a IU da Web do RStudio, conecte o navegador a http://localhost:8787.

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

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 à conexão Spark, usada para gerenciar dados e executar consultas no 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 a ser transferido 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 Cloud 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 dos recursos usados neste tutorial na conta do Google Cloud Platform:

  • Exclua o cluster do Cloud Dataproc.
  • Caso você não tenha outros clusters do Cloud Dataproc na mesma região, será preciso também excluir o intervalo do Cloud Storage criado automaticamente para a região.

Excluir o cluster

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

    ACESSAR A PÁGINA "CLUSTERS DO CLOUD DATAPROC"

  2. Na lista de clusters, localize a linha do cluster do Cloud Dataproc criado por você e, na coluna Intervalo de preparo do Cloud Storage, anote o nome do intervalo, 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 intervalo do Cloud Storage, acesse o Navegador do Cloud Storage:

    ACESSAR O NAVEGADOR DO CLOUD STORAGE

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

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

    Excluir o intervalo de armazenamento

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

A seguir