Transfira do HDFS para o Cloud Storage

O Serviço de transferência de armazenamento suporta transferências de origens do sistema de ficheiros distribuído (HDFS) do Hadoop na nuvem e nas instalações.

As transferências do HDFS têm de usar o Cloud Storage como destino.

Os exemplos de utilização incluem a migração do armazenamento no local para o Cloud Storage, o arquivo de dados para libertar espaço de armazenamento no local, a replicação de dados para Google Cloud para continuidade da empresa ou a transferência de dados para Google Cloud para análise e processamento.

Configure autorizações

Antes de criar uma transferência, tem de configurar as autorizações para as seguintes entidades:

A conta de utilizador que está a ser usada para criar a transferência. Esta é a conta com sessão iniciada na consola ou a conta especificada quando se autentica na CLI `gcloud`. Google Cloud A conta de utilizador pode ser uma conta de utilizador normal ou uma conta de serviço gerida pelo utilizador.
A conta de serviço gerida pela Google, também conhecida como agente de serviço, usada pelo Serviço de Transferência de Armazenamento. Geralmente, esta conta é identificada pelo respetivo endereço de email, que usa o formato project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com.
A conta de agente de transferência que concede Google Cloud autorizações aos agentes de transferência. As contas de agente de transferência usam as credenciais do utilizador que as instala ou as credenciais de uma conta de serviço gerida pelo utilizador para autenticar.

Consulte as autorizações de transferência baseadas em agentes para ver instruções.

Instale agentes num conjunto de agentes

As transferências baseadas em agentes usam agentes de software para orquestrar as transferências. Estes agentes têm de ser instalados numa ou mais máquinas com acesso ao seu sistema de ficheiros. Os agentes têm de ter acesso ao namenode, a todos os datanodes, ao servidor de gestão de chaves (KMS) do Hadoop e ao centro de distribuição de chaves (KDC) do Kerberos.

Os agentes de transferência trabalham em conjunto num conjunto de agentes. Aumentar o número de agentes pode aumentar o desempenho geral do trabalho, mas isto depende de vários fatores.

  • A adição de mais agentes pode ajudar, até cerca de metade do número de nós no seu cluster HDFS. Por exemplo, com um cluster de 30 nós, o aumento de 5 para 15 agentes deve melhorar o desempenho, mas é improvável que o aumento para mais de 15 faça muita diferença.

  • Para um pequeno cluster HDFS, um agente pode ser suficiente.

  • Os agentes adicionais tendem a ter um impacto maior no desempenho quando uma transferência inclui um grande número de ficheiros pequenos. O Serviço de transferência de armazenamento alcança um elevado débito ao paralelizar tarefas de transferência entre vários agentes. Quanto mais ficheiros houver na carga de trabalho, mais vantagens há em adicionar mais agentes.

Não inclua informações confidenciais, como informações de identificação pessoal (IIP) ou dados de segurança, no nome do conjunto de agentes ou no prefixo do ID do agente. Os nomes dos recursos podem ser propagados para os nomes de outros Google Cloud recursos e podem ser expostos a sistemas internos da Google fora do seu projeto.

Crie um conjunto de agentes

Crie um grupo de agentes. Use a sua conta de utilizador Símbolo da conta de utilizador para esta ação.

Instale agentes

Instale agentes no conjunto de agentes. Use a sua conta de agente de transferência para esta ação.

Google Cloud consola

  1. Na Google Cloud consola, aceda à página Pools de agentes.

    Aceda a Conjuntos de agentes

  2. Selecione o conjunto de agentes ao qual quer adicionar o novo agente.

  3. Clique em Instalar agente.

  4. Siga as instruções para instalar e executar o agente.

    Para mais informações sobre as opções de linha de comandos do agente, consulte o artigo Opções de linha de comandos do agente.

CLI gcloud

Para instalar um ou mais agentes através da CLI gcloud, execute o seguinte comando gcloud transfer agents install:

gcloud transfer agents install --pool=POOL_NAME \
  --count=NUM_AGENTS \
  --mount-directories=MOUNT_DIRECTORIES \
  --hdfs-namenode-uri=HDFS_NAMENODE_URI \
  --hdfs-username=HDFS_USERNAME \
  --hdfs-data-transfer-protection=HDFS_DATA_TRANSFER_PROTECTION \
  --kerberos-config-file=KERBEROS_CONFIG_FILE \
  --kerberos-keytab-file=KERBEROS_KEYTAB_FILE \
  --kerberos-user-principal=KERBEROS_USER_PRINCIPAL \
  --kerberos-service-principal=KERBEROS_SERVICE_PRINCIPAL \

Onde:

  • --hdfs-namenode-uri especifica um cluster HDFS que inclui um esquema, um namenode e uma porta, no formato URI. Por exemplo:

    • rpc://my-namenode:8020
    • http://my-namenode:9870

    Use HTTP ou HTTPS para o WebHDFS. Se não for fornecido um esquema, assumimos que é RPC. Se não for fornecida nenhuma porta, a predefinição é 8020 para RPC, 9870 para HTTP e 9871 para HTTPS. Por exemplo, a entrada my-namenode torna-se rpc://my-namenode:8020.

    Se o cluster estiver configurado com vários namenodes, especifique o nó principal atual. Consulte o artigo Clusters com vários nomes de nós para mais informações.

  • --hdfs-username é o nome de utilizador para estabelecer ligação a um cluster HDFS com autenticação simples. Omita este sinalizador se estiver a fazer a autenticação com o Kerberos ou se estiver a estabelecer ligação sem autenticação.

  • --hdfs-data-transfer-protection (opcional) é a definição de qualidade de proteção (QOP) do lado do cliente para clusters Kerberized. O valor não pode ser mais restritivo do que o valor QOP do lado do servidor. Os valores válidos são: authentication, integrity e privacy.

Se estiver a fazer a autenticação com o Kerberos, inclua também as seguintes flags:

  • --kerberos-config-file é o caminho para um ficheiro de configuração do Kerberos. Por exemplo, --kerberos-config-file=/etc/krb5.conf.

  • --kerberos-user-principal é o principal do utilizador Kerberos a usar. Por exemplo, --kerberos-user-principal=user1.

  • --kerberos-keytab-file é o caminho para um ficheiro Keytab que contém o principal do utilizador especificado com a flag --kerberos-user-principal. Por exemplo, --kerberos-keytab-file=/home/me/kerberos/user1.keytab.

  • --kerberos-service-principal é o principal do serviço Kerberos a usar, no formato <primary>/<instance>. O domínio é mapeado a partir do ficheiro de configuração do Kerberos; qualquer domínio fornecido é ignorado. Se esta flag não for especificada, a predefinição é hdfs/<namenode_fqdn>, em que <namenode_fqdn> é o nome do domínio totalmente qualificado especificado no ficheiro de configuração.

    Por exemplo, --kerberos-service-principal=hdfs/my-namenode.a.example.com.

A ferramenta apresenta-lhe todos os passos necessários para instalar os agentes. Este comando instala NUM_AGENTS agentes na sua máquina, mapeados para o nome do conjunto especificado como POOL_NAME, e autentica o agente através das suas credenciais gcloud. O nome do conjunto tem de existir ou é devolvido um erro.

A flag --mount-directories é opcional, mas vivamente recomendada. O valor é uma lista separada por vírgulas de diretórios no sistema de ficheiros aos quais conceder acesso ao agente. A omissão desta flag monta todo o sistema de ficheiros no contentor do agente. Consulte a gcloud referência para mais detalhes.

docker run

Antes de usar o docker run para instalar agentes, siga as instruções para instalar o Docker.

O comando docker run instala um agente. Para aumentar o número de agentes no seu conjunto, execute este comando as vezes que forem necessárias.

As flags de comando necessárias dependem do tipo de autenticação que está a usar.

Kerberos

Para autenticar o seu sistema de ficheiros através do Kerberos, use o seguinte comando:

sudo docker run -d --ulimit memlock=64000000 --rm \
  --network=host \
  -v /:/transfer_root \
  gcr.io/cloud-ingest/tsop-agent:latest \
  --enable-mount-directory \
  --project-id=${PROJECT_ID} \
  --hostname=$(hostname) \
  --creds-file="service_account.json" \
  --agent-pool=${AGENT_POOL_NAME} \
  --hdfs-namenode-uri=cluster-namenode \
  --kerberos-config-file=/etc/krb5.conf \
  --kerberos-user-principal=user \
  --kerberos-keytab-file=/path/to/folder.keytab

Onde:

  • --network=host deve ser omitido se estiver a executar mais do que um agente nesta máquina.
  • --hdfs-namenode-uri: Um esquema, um nome de nó e uma porta, no formato URI, que representam um cluster HDFS. Por exemplo:

    • rpc://my-namenode:8020
    • http://my-namenode:9870

Use HTTP ou HTTPS para o WebHDFS. Se não for fornecido um esquema, assumimos que é RPC. Se não for fornecida nenhuma porta, a predefinição é 8020 para RPC, 9870 para HTTP e 9871 para HTTPS. Por exemplo, a entrada my-namenode torna-se rpc://my-namenode:8020.

Se o cluster estiver configurado com vários namenodes, especifique o nó principal atual. Consulte o artigo Clusters com vários nomes de nós para mais informações.

  • --kerberos-config-file: caminho para um ficheiro de configuração Kerberos. Predefinição é /etc/krb5.conf.
  • --kerberos-user-principal: O principal do utilizador Kerberos.
  • --kerberos-keytab-file: caminho para um ficheiro Keytab que contém o principal do utilizador especificado com --kerberos-user-principal.
  • --kerberos-service-principal: Nome principal do serviço de Kerberos a usar, no formato "service/instance". O domínio é mapeado a partir do ficheiro de configuração do Kerberos; qualquer domínio fornecido é ignorado. Se esta flag não for especificada, o valor predefinido é hdfs/<namenode_fqdn>, em que fqdn é o nome de domínio totalmente qualificado.

Autenticação simples

Para autenticar o seu sistema de ficheiros através da autenticação simples:

sudo docker run -d --ulimit memlock=64000000 --rm \
  --network=host \
  -v /:/transfer_root \
  gcr.io/cloud-ingest/tsop-agent:latest \
  --enable-mount-directory \
  --project-id=${PROJECT_ID} \
  --hostname=$(hostname) \
  --creds-file="${CREDS_FILE}" \
  --agent-pool="${AGENT_POOL_NAME}" \
  --hdfs-namenode-uri=cluster-namenode \
  --hdfs-username="${USERNAME}"

Onde:

  • --hdfs-username: nome de utilizador a usar ao estabelecer ligação a um cluster HDFS com autenticação simples.
  • --hdfs-namenode-uri: Um esquema, um nome de nó e uma porta, no formato URI, que representam um cluster HDFS. Por exemplo:
    • rpc://my-namenode:8020
    • http://my-namenode:9870

Use HTTP ou HTTPS para o WebHDFS. Se não for fornecido um esquema, assumimos que é RPC. Se não for fornecida nenhuma porta, a predefinição é 8020 para RPC, 9870 para HTTP e 9871 para HTTPS. Por exemplo, a entrada my-namenode torna-se rpc://my-namenode:8020.

Se o cluster estiver configurado com vários namenodes, especifique o nó principal atual. Consulte o artigo Clusters com vários nomes de nós para mais informações.

Sem autenticação

Para estabelecer ligação ao seu sistema de ficheiros sem autenticação:

sudo docker run -d --ulimit memlock=64000000 --rm \
  --network=host \
  -v /:/transfer_root \
  gcr.io/cloud-ingest/tsop-agent:latest \
  --enable-mount-directory \
  --project-id=${PROJECT_ID} \
  --hostname=$(hostname) \
  --creds-file="${CREDS_FILE}" \
  --agent-pool="${AGENT_POOL_NAME}" \
  --hdfs-namenode-uri=cluster-namenode \

Onde:

  • --hdfs-namenode-uri: Um esquema, um nome de nó e uma porta, no formato URI, que representam um cluster HDFS. Por exemplo:
    • rpc://my-namenode:8020
    • http://my-namenode:9870

Use HTTP ou HTTPS para o WebHDFS. Se não for fornecido um esquema, assumimos que é RPC. Se não for fornecida nenhuma porta, a predefinição é 8020 para RPC, 9870 para HTTP e 9871 para HTTPS. Por exemplo, a entrada my-namenode torna-se rpc://my-namenode:8020.

Se o cluster estiver configurado com vários namenodes, especifique o nó principal atual. Consulte o artigo Clusters com vários nomes de nós para mais informações.

Opções de transferência

As seguintes funcionalidades do Serviço de transferência de armazenamento estão disponíveis para transferências do HDFS para o Cloud Storage.

Os ficheiros transferidos do HDFS não retêm os respetivos metadados.

Crie uma transferência

Não inclua informações confidenciais, como informações de identificação pessoal (IIP) ou dados de segurança, no nome da tarefa de transferência. Os nomes dos recursos podem ser propagados para os nomes de outros Google Cloud recursos e podem ser expostos a sistemas internos da Google fora do seu projeto.

O serviço de transferência de armazenamento oferece várias interfaces através das quais pode criar uma transferência.

Google Cloud consola

  1. Aceda à página Serviço de transferência de armazenamento na Google Cloud consola.

    Aceda ao Serviço de transferência de armazenamento

  2. Clique em Criar tarefa de transferência. É apresentada a página Criar tarefa de transferência.

  3. Selecione Hadoop Distributed File System como o Tipo de origem. O destino tem de ser o Google Cloud Storage.

    Clique em Passo seguinte.

Configure a sua origem

  1. Especifique as informações necessárias para esta transferência:

    1. Selecione o conjunto de agentes que configurou para esta transferência.

    2. Introduza o caminho a partir do qual quer transferir, relativo ao diretório raiz.

  2. Opcionalmente, especifique quaisquer filtros a aplicar aos dados de origem.

  3. Clique em Passo seguinte.

Configure o lava-louças

  1. No campo Bucket ou pasta, introduza o bucket de destino e (opcionalmente) o nome da pasta, ou clique em Procurar para selecionar um bucket numa lista de buckets existentes no seu projeto atual. Para criar um novo contentor, clique em Ícone de balde Criar novo contentor.

  2. Clique em Passo seguinte.

Agende a transferência

Pode agendar a transferência para ser executada apenas uma vez ou configurar uma transferência recorrente.

Clique em Passo seguinte.

Escolha as definições de transferência

  1. No campo Descrição, introduza uma descrição da transferência. Como prática recomendada, introduza uma descrição significativa e única para poder distinguir os trabalhos.

  2. Em Opções de metadados, selecione a classe de armazenamento do Cloud Storage e se pretende guardar a hora de criação de cada objeto. Consulte o artigo Preservação de metadados para ver detalhes.

  3. Em Quando substituir, selecione uma das seguintes opções:

    • Nunca: não substitui os ficheiros de destino. Se existir um ficheiro com o mesmo nome, não é transferido.

    • Se for diferente: substitui os ficheiros de destino se o ficheiro de origem com o mesmo nome tiver valores de Etags ou de soma de verificação diferentes.

    • Sempre: substitui sempre os ficheiros de destino quando o ficheiro de origem tem o mesmo nome, mesmo que sejam idênticos.

  4. Em Quando eliminar, selecione uma das seguintes opções:

    • Nunca: nunca elimina ficheiros da origem nem do destino.

    • Eliminar ficheiros do destino se também não estiverem na origem: se os ficheiros no contentor do Cloud Storage de destino também não estiverem na origem, elimine os ficheiros do contentor do Cloud Storage.

      Esta opção garante que o contentor do Cloud Storage de destino corresponde exatamente à sua origem.

  5. Selecione se pretende ativar o registo de transferências e/ou notificações do Pub/Sub.

Clique em Criar para criar a tarefa de transferência.

CLI gcloud

Para criar uma nova tarefa de transferência, use o comando gcloud transfer jobs create. A criação de uma nova tarefa inicia a transferência especificada, a menos que seja especificado um horário ou um --do-not-run.

gcloud transfer jobs create \
  hdfs:///PATH/ gs://BUCKET_NAME/PATH/
  --source-agent-pool=AGENT_POOL_NAME

Onde:

  • PATH é um caminho absoluto a partir da raiz do cluster HDFS. O nome do nó e a porta do cluster são configurados ao nível do agente, pelo que o comando de criação de tarefas só tem de especificar o caminho (opcional) e o conjunto de agentes.

  • --source-agent-pool especifica o conjunto de agentes de origem a usar para esta transferência.

As opções adicionais incluem:

  • --do-not-run impede que o serviço de transferência de armazenamento execute a tarefa após o envio do comando. Para executar a tarefa, atualize-a para adicionar uma programação ou use jobs run para iniciá-la manualmente.

  • --manifest-file especifica o caminho para um ficheiro CSV no Cloud Storage que contém uma lista de ficheiros a transferir da sua origem. Para ver a formatação do ficheiro de manifesto, consulte o artigo Transfira ficheiros ou objetos específicos através de um manifesto.

  • Informações da tarefa: pode especificar --name e --description.

  • Schedule: especifique --schedule-starts, --schedule-repeats-every e --schedule-repeats-until ou --do-not-run.

  • Condições de objetos: use condições para determinar que objetos são transferidos. Estes incluem --include-prefixes e --exclude-prefixes, e as condições baseadas no tempo em --include-modified-[before | after]-[absolute | relative]. Se tiver especificado uma pasta com a origem, os filtros de prefixo são relativos a essa pasta. Consulte o artigo Filtre objetos de origem por prefixo para mais informações.

  • Opções de transferência: especifique se quer substituir os ficheiros de destino (--overwrite-when=different ou always) e se quer eliminar determinados ficheiros durante ou após a transferência (--delete-from=destination-if-unique ou source-after-transfer); e, opcionalmente, defina uma classe de armazenamento em objetos transferidos (--custom-storage-class).

  • Notificações: configure as notificações do Pub/Sub para transferências com --notification-pubsub-topic, --notification-event-types e --notification-payload-format.

Para ver todas as opções, execute gcloud transfer jobs create --help ou consulte a gcloud documentação de referência.

API REST

Para criar uma transferência a partir de uma origem HDFS através da API REST, crie um objeto JSON semelhante ao seguinte exemplo.

POST https://storagetransfer.googleapis.com/v1/transferJobs
{
  ...
  "transferSpec": {
    "source_agent_pool_name":"POOL_NAME",
    "hdfsDataSource": {
      "path": "/mount"
    },
    "gcsDataSink": {
      "bucketName": "SINK_NAME"
    },
    "transferOptions": {
      "deleteObjectsFromSourceAfterTransfer": false
    }
  }
}

Consulte a referência transferJobs.create para ver detalhes sobre campos adicionais suportados.

Clusters com vários namenodes

Os agentes do Serviço de transferência de armazenamento só podem ser configurados com um único nó de nome. Se o cluster HDFS estiver configurado com vários namenodes ("alta disponibilidade") e ocorrer um evento de comutação por falha que resulte num novo namenode principal, tem de reinstalar os agentes com o namenode correto.

Para eliminar os agentes antigos, consulte o artigo Elimine um agente.

Pode obter o namenode ativo do cluster executando o seguinte comando:

hdfs haadmin -getAllServiceState