Migrar do Big Data Cloud Compute Edition

Saiba como migrar do Oracle Big Data Cloud Compute Edition (BDCE ou BDC) para o Big Data Service

A migração é feita em várias etapas. Você pode migrar seus artefatos para o OCI Big Data Service do BDC no Oracle Cloud Infrastructure Classic ou BDC no Oracle Cloud Infrastructure. Em um nível alto, você faz o seguinte:

  • Exporte seus recursos de nuvem existentes do BDC para o Object Storage.

  • Importar os recursos de nuvem exportados do Object Storage para o Big Data Service

Pré-requisitos

Antes de começar, certifique-se de que:
  • Você é um usuário válido para um compartimento no Big Data Service
  • Você está habilitado para fazer o seguinte:
    • Acessar a console do OCI usando suas credenciais
    • Crie um bucket no Oracle Object Storage para que você possa copiar os dados do HDFS. Para obter informações sobre o Oracle Object Storage, consulte Visão Geral do Object Storage.
    • Inspecionar a configuração do OCI Object Store

    Para obter mais informações, consulte Conceitos Básicos do Serviço Big Data.

  • Você tem os seguintes valores de parâmetro do OCI com você:
    Valor Detalhes
    ID da Tenancy O OCID da tenancy. Por exemplo, ocid1.tenancy.oc1..aaaaaaaa5syd62crbj5xpfajpmopoqasxy7jwxk6ihopm5vk6bxkncyp56kc. Para obter mais informações, consulte Onde Obter o OCID da Tenancy e o OCID do Usuário
    ID de Usuário O OCID do usuário. Por exemplo, ocid1.user.oc1..aaaaaaaa3pnl7qz4c2x2mpq4v4g2mp3wktxoyahwysmjrapgzjoyd3edxltp. Para obter mais informações, consulte Onde Obter o OCID da Tenancy e o OCID do Usuário
    chave de assinatura de API Obrigatório para um usuário do aplicativo. Por exemplo, 03:8c:ef:51:c8:fe:6b:22:0c:5d:3c:43:a8:ff:58:d9. Para obter informações sobre como gerar e fazer upload da chave de assinatura da API, consulte os seguintes tópicos:
    Senha da chave de assinatura (Opcional) Obrigatório se você tiver gerado o par de chaves com uma frase-senha.
    Impressão Digital da chave de assinatura A impressão digital e a frase-senha da chave de assinatura são criadas ao gerar e fazer upload da chave de assinatura da API. Para obter mais informações, consulte Como Obter a Impressão Digital da Chave.
    Nome do bucket e da tenancy Por exemplo, oci://myBucket@myTenancy/

    Para obter informações sobre buckets, consulte Colocando Dados no Serviço Object Storage.

    URL de Armazenamento na Nuvem do OCI O nome do host. Por exemplo, https://objectstorage.us-phoenix-1.oraclecloud.com.

    Para obter mais informações, consulte Criar um Cluster.

Exportando Recursos

Os recursos que você pode exportar do Big Data Cloud Compute Edition (BDC) são os seguintes:
Artefato no BDC Artefatos Exportados Artefatos no OCI Big Data Service (BDS)
Dados no HDFS

Copiado para o OCI Object Store em oci://<bucket>@<tenancy>/<exportedHdfsDir>

Por exemplo: oci://myStorageBucket@myTenancy/exportedHdfsDir

Copie os dados exportados do Armazenamento de Objetos do OCI para os diretórios HDFS do BDS de destino.

Dados no OCI-Classic Object Store

Observação: Este artefato não se aplica ao Oracle Big Data Cloud no Oracle Cloud Infrastructure.

Copiado para o OCI Object Store em oci://<bucket>@<tenancy>/<exportedObjDir>

Por exemplo: oci://myStorageBucket@myTenancy/exportedObjDir

Metadados do Hive Gere as instruções DDL do Hive no cluster do BDC. Copie as instruções DDL do Hive do cluster BDC para o cluster BDS e execute-as.
Notebooks do Zeppelin Exporte as definições de notebook do Zeppelin como um arquivo .tar.gz de /user/zeppelin/notebook no HDFS. Isso é feito usando um script fornecido pela Oracle. Atualmente, a importação de Notebooks do Zeppelin não é suportada no BDS.
Arquivos de Configuração HDFS, YARN, Spark Exporte os arquivos de configuração como um arquivo .tar.gz usando um script de utilitário fornecido pela Oracle. Como o BDS otimizou as definições de configuração para HDFS, YARN e Spark, você não precisa importar os arquivos de configuração e as versões do BDC.
Versões de vários componentes de código-fonte aberto Exporte os detalhes da versão do serviço usando a API REST do Ambari. Os clientes também podem obter detalhes da versão do Ambari (Admin -> Pilha e Versões).

Migrando Recursos com o Migrator WANdisco LiveData

Certifique-se de que a Porta 8020 seja aberta no destino.

Para obter informações sobre o WANdisco LiveData Migrator, selecione aqui.

Para migrar recursos usando o Migrador WANdisco LiveData, siga estas etapas:

  1. Instale o migrador LiveData em qualquer borda do cluster de origem executando os seguintes comandos:
    wget https://wandisco.com/downloads/livedata-migrator.sh
     
    chmod +x livedata-migrator.sh && ./livedata-migrator.sh
     
    service livedata-migrator status
    service hivemigrator status
    service livedata-ui status
  2. Depois que a instalação e a configuração do migrador LiveData forem concluídas, acesse a interface do usuário e crie sua conta de usuário. A URL da IU é a seguinte:
    http://<LDM-Installation-Host.com>:8081
  3. Faça o seguinte para migrar dados:
    1. Configure o sistema de arquivos de origem.
      Para adicionar um sistema de arquivos de origem, no painel do Migrador LiveData, faça o seguinte:
      1. No painel Produtos, selecione a instância relevante.
      2. Na página Configuração do Sistema de Arquivos, selecione Adicionar sistema de arquivos de origem.
    2. Configure o sistema de arquivos de destino.
      Para adicionar um sistema de arquivos de destino, no painel do Migrador LiveData, faça o seguinte:
      1. No painel Produtos, selecione a instância relevante.
      2. Na página Configuração do Sistema de Arquivos, selecione Adicionar sistema de arquivos de destino.
      3. Selecione o Apache Hadoop para Destino como cluster BDS e forneça o caminho do sistema de arquivos padrão. Certifique-se de que a origem e o destino se conectem ao destino na porta 8020.
    3. Crie um mapeamento de caminho.
      O mapeamento de caminho permite que os dados migrados sejam armazenados em um local padrão equivalente no destino. Para criar mapeamentos de caminho usando a IU, siga estas etapas:
      1. Na lista Produtos do painel de controle, selecione a instância do Migrador LiveData para a qual você deseja criar um mapeamento de caminho.
      2. No menu Migrações, selecione Mapeamentos de Caminho.
      3. No canto superior direito da interface, selecione o botão Adicionar Novo Caminho.
    4. Criar uma migração.
      As migrações transferem dados existentes da origem definida para um destino. Para criar uma nova migração na IU, siga estas etapas:
      1. Forneça um nome para a migração.
      2. Em seus sistemas de arquivos, selecione uma origem e um destino.
      3. Selecione o Caminho no seu sistema de arquivos de origem que deseja migrar. Use o browser da pasta e selecione o nome do caminho que deseja migrar. Selecione a pasta cinza ao lado de um nome de caminho para exibir seus subdiretórios.
  4. Migre os metadados.
    Para migrar os metadados, siga estas etapas:
    1. Exporte metadados do Hive do cluster do BDC de origem. Para obter mais informações, consulte Exportando Metadados do Hive.
    2. Importe os metadados para o cluster BDS ODH 1.0 de destino. Para obter mais informações, consulte Importando Metadados.

Migrando Recursos com a Ferramenta Distcp

Você também pode migrar dados e metadados do Big Data Cloud Compute Edition e importá-los para o Big Data Service usando a ferramenta Distcp. Distcp é uma ferramenta de código aberto que pode ser usada para copiar grandes conjuntos de dados entre sistemas de arquivos distribuídos dentro e entre clusters.

Preparando o Cluster do BDC

Saiba como preparar o cluster BDC para exportação.

  1. Defina o serviço HDFS no modo de manutenção para bloquear alertas e operações em massa. Para obter mais informações, consulte Definir Modo de Manutenção para um Serviço.
  2. Conecte-se ao cluster do BDC por meio do SSH como um usuário opc. Para obter mais informações, consulte Estabelecer Conexão com um Nó de Cluster por meio do SSH (Secure Shell).
  3. Execute os seguintes comandos para definir o serviço HDFS no modo de segurança:
    $ sudo su hdfs -c 'hdfs dfsadmin -safemode get'
    Safe mode is OFF
     
    $ sudo su hdfs -c 'hdfs dfsadmin -safemode enter'
    Safe mode is ON
  4. Faça o seguinte:
    1. Como usuário root, copie sua chave privada do OCI (por exemplo: ~/.oci/oci_api_key.pem) para o diretório /home/opc/.oci no cluster do BDC.
      sudo su -
      cp <private-key> /home/opc/.oci/oci_api_key.pem
    2. Altere as permissões do arquivo de chaves privadas para somente leitura.
      chmod 444 /home/opc/.oci/oci_api_key.pem
    3. Altere a propriedade do arquivo de chave PEM privada para o usuário hdfs.
      chown -R hdfs:hdfs /home/opc/.oci/oci_api_key.pem
    4. Crie um diretório chamado data que o usuário do HDFS possa acessar.
    5. Copie a chave privada do OCI do diretório /home/opc/.oci para o diretório /data.
      cp /home/opc/.oci/oci_api_key.pem /data
    6. Como usuário root, altere o arquivo de chave privada no diretório /data para somente leitura.
      chmod 444 /data/oci_api_key.pem
    Se o cluster do BDC tiver vários nós, certifique-se de que a chave privada do OCI esteja disponível em todos os nós com o mesmo caminho. Você pode usar o usuário otools para copiar arquivos para todos os nós. No entanto, verifique se o arquivo pode ser lido por otools. Depois de copiar os arquivos para todos os nós, defina as permissões originais de volta.

    Para instalar a chave privada do OCI em todos os hosts, como usuário otools, execute os seguintes comandos na sequência fornecida para cada host:

    sudo su - otools
    ssh <hostname> sudo mkdir /data
    scp oci_api_key.pem <hostname>:/data
    ssh <hostname> sudo chown hdfs:hdfs /data/oci_api_key.pem
    ssh <hostname> sudo chmod 444 /data/oci_api_key.pem
Exportando Dados do HDFS

Para exportar dados do HDFS, siga estas etapas:

  1. Configure a ferramenta distcp. A ferramenta distcp requer um driver oci-hdfs atualizado. Portanto, você deve baixar o driver para o host onde a ferramenta distcp precisa ser executada. Para fazer download do driver, use os seguintes comandos:
    1. Execute os comandos a seguir para criar um diretório chamado hdfsjar em /data e para navegar até o diretório.
      mkdir -p /data/hdfsjars
      cd /data/hdfsjars
    2. Faça download do oci-hdfs.zip.
      wget https://github.com/oracle/oci-hdfs-connector/releases/download/v2.7.7.0/oci-hdfs.zip
    3. Extraia o arquivo oci-hdfs.zip.
      1. Descompacte o arquivo no diretório /data/hdfsjars/lib.
        unzip oci-hdfs.zip lib/oci-hdfs-full-2.7.7.0.jar
      2. Mova o lib/oci-hdfs-full-2.7.7.0.jar para o diretório de trabalho atual, ou seja, /data/hdfsjar.
        mv lib/oci-hdfs-full-2.7.7.0.jar .
      3. Remova o diretório lib e o arquivo oci-hdfs.zip.
        rm -rf lib/ oci-hdfs.zip
  2. Defina as variáveis de ambiente para apontar para oci-hdfs-full-2.7.7.0.jar.
    export LIBJARS=/data/hdfsjars/oci-hdfs-full-2.7.7.0.jar
  3. (Opcional) Configure o proxy definindo a seguinte variável com sun.net.inetaddr.ttl.
    export DISTCP_PROXY_OPTS="-Dhttps.proxyHost=<proxy-host> -Dhttps.proxyPort=<proxy-port> -Dsun.net.inetaddr.ttl=60"
    
  4. Teste a configuração listando o conteúdo no contêiner de armazenamento do OCI.
    hadoop fs -Dfs.oci.client.auth.fingerprint=<fingerprint> \
    -Dfs.oci.client.auth.pemfilepath=<oci_pem_key> \
    -Dfs.oci.client.auth.passphrase=<passphrase> \
    -Dfs.oci.client.auth.tenantId=<OCID forTenancy> \
    -Dfs.oci.client.auth.userId=<OCID forUser> \
    -Dfs.oci.client.hostname=<HostName. Example: https://objectstorage.us-phoenix-1.oraclecloud.com/> \
    -Dfs.oci.client.proxy.uri=http://<proxyhost>:<proxyport> \
    -ls oci://<bucket>@<namespace>/
  5. Para copiar todos os dados do HDFS em um diretório específico no bucket do OCI Object Store, crie um diretório no bucket.
    hadoop fs -Dfs.oci.client.auth.fingerprint=<fingerprint> \
          -Dfs.oci.client.auth.pemfilepath=<oci_pem_key> \
          -Dfs.oci.client.auth.passphrase=<passphrase> \
          -Dfs.oci.client.auth.tenantId=<OCID for Tenancy> \
          -Dfs.oci.client.auth.userId=<OCID for User> \
          -Dfs.oci.client.hostname=<HostName. Example: https://objectstorage.us-phoenix-1.oraclecloud.com/> \
          -Dfs.oci.client.proxy.uri=http://<proxyhost>:<proxyport>  \
          -mkdir oci://<bucket>@<namespace>/<Dir>
  6. Execute os comandos a seguir para verificar se o diretório foi criado no Armazenamento de Objetos.
    hadoop fs -Dfs.oci.client.auth.fingerprint=<fingerprint> \
          -Dfs.oci.client.auth.pemfilepath=<oci_pem_key> \
          -Dfs.oci.client.auth.passphrase=<passphrase> \
          -Dfs.oci.client.auth.tenantId=<OCID forTenancy> \
          -Dfs.oci.client.auth.userId=<OCID forUser> \
          -Dfs.oci.client.hostname=<HostName>\
          -ls oci://<bucket>@<namespace>/
  7. Siga um destes procedimentos para exportar dados do HDFS:
    • Use hadoop fs -cp para exportar dados do HDFS de um único cluster de nós para o Armazenamento de Objetos como um usuário do HDFS.
      sudo su - hdfs
      hadoop fs -Dfs.oci.client.auth.fingerprint=<fingerprint> \
            -Dfs.oci.client.auth.pemfilepath=<oci_pem_key> \
            -Dfs.oci.client.auth.passphrase=<passphrase> \
            -Dfs.oci.client.auth.tenantId=<OCID for Tenancy> \
            -Dfs.oci.client.auth.userId=<OCID for User> \
            -Dfs.oci.client.hostname=<HostName> \
            -Dfs.oci.client.proxy.uri=http://<proxyhost>:<proxyport>  \
            -cp <hdfs-dir-to-copy> oci://<bucket>@<namespace>/<dir>/
    • Use hadoop distcp para exportar dados do HDFS de clusters com vários nós para o Armazenamento de Objetos. Valide-o em relação ao diretório específico. Por exemplo, use /user/oozie/ para <hdfs-dir-to-copy> no comando a seguir e, em seguida, execute-o para todo o HDFS (/).
      hadoop distcp -libjars ${LIBJARS} \
      -Dfs.client.socket-timeout=3000000
      -Dfs.oci.client.auth.fingerprint=<fingerprint> \
      -Dfs.oci.client.auth.pemfilepath=<oci_pem_key> \
      -Dfs.oci.client.auth.passphrase=<passphrase> \
      -Dfs.oci.client.auth.tenantId=<OCID for Tenancy> \
      -Dfs.oci.client.auth.userId=<OCID for User> \
      -Dfs.oci.client.hostname=<HostName. Example: https://objectstorage.us-phoenix-1.oraclecloud.com/> \
      -Dfs.oci.client.multipart.allowed=true \
      -Dfs.oci.client.proxy.uri=<http://proxy-host>:port \
      -Dmapreduce.map.java.opts="$DISTCP_PROXY_OPTS" \
      -Dmapreduce.reduce.java.opts="$DISTCP_PROXY_OPTS" \
      -Dmapreduce.task.timeout=6000000 \
      -skipcrccheck -m 40 -bandwidth 500 \
      -update -strategy dynamic -i <hdfs-dir-to-copy> oci://<bucket>@<namespace>/<exportedHdfsDir>/
  8. Verifique o conteúdo do Armazenamento de Objetos.
    hadoop fs -Dfs.oci.client.auth.fingerprint=<fingerprint> \
         -Dfs.oci.client.auth.pemfilepath=<oci_pem_key> \
         -Dfs.oci.client.auth.passphrase=<passphrase> \
         -Dfs.oci.client.auth.tenantId=<OCID forTenancy> \
         -Dfs.oci.client.auth.userId=<OCID forUser> \
         -Dfs.oci.client.hostname=<HostName>\
         -ls oci://<bucket>@<namespace>/<dir>
  9. Crie arquivos de metadados e exporte-os para o Armazenamento de Objetos.
    1. Faça download do seguinte arquivo zip:

      arquivos/create_metadata.zip

    2. Descompacte o arquivo e coloque create_metadata.sh e create_permissions.py em um diretório.
    3. Execute o seguinte script shell. Esse script cria vários arquivos de metadados e os coloca no diretório /metadata no HDFS.
      bash create_metadata.sh <hdfs_directory>
    4. Exporte os arquivos de metadados para o Object Store.
      hadoop distcp -Dfs.client.socket-timeout=3000000 \
          -Dfs.oci.client.auth.fingerprint=67:3a:86:d2:8b:61:b0:fd:c4:21:58:92:5a:d2:e8:83 \
          -Dfs.oci.client.auth.pemfilepath=<oci_pem_key> \
          -Dfs.oci.client.auth.tenantId=ocid1.tenancy.oc1..aaaaaaaajh6gxgbuudok7odjpwe5wyv2iq74ihhac5lyulxdgrhsssxc4hna \
          -Dfs.oci.client.auth.userId=ocid1.user.oc1..aaaaaaaaeslrldhdvniuue3dsi7p3xblpfpsluxtx2g6txg5iiukfhzg77ua \
          -Dfs.oci.client.hostname=https://objectstorage.us-ashburn-1.oraclecloud.com/ \
          -Dfs.oci.client.multipart.allowed=true -Dmapreduce.task.timeout=6000000  \
          -skipcrccheck -m 20 -bandwidth 100 -update -strategy dynamic -i /metadata/Metadata* oci://<bucket>@<namespace>/metadata
      
Exportação de Metadados do Hive

Para exportar metadados do Hive, siga estas etapas:

  1. Obtenha o caminho HDFS do Big Data Service de destino para atualizar hive_migrate.properties.
    1. Para recuperar o TARGET_HDFS_PATH, faça log-on no cluster do BDS de destino usando o Bastion host.
      cat /etc/hadoop/conf/core-site.xml | grep -A1 "fs.defaultFS"
    2. Anote o TARGET_HDFS_PATH.

  2. Atualize TARGET_HDFS_PATH e TARGET_OBJECTSTORE_PATH no script hive_migrate.properties para o local em que os dados da tabela do Hive estão disponíveis após a migração. Você não precisa escapar das barras no caminho.
    #!/bin/bash
    #
    # Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
    # Properties file to overide
    #
    # This file will be sourced by the generate_target_ddl_from_source.sh
    # to customize/overide properties
    # SRC_HDFS_PATH and SRC_OBJECTSTORE_PATH will be derived automatically from the cluster.
    # You will be customizing
    #     RUNDIR , TARGET_HDFS_PATH, TARGET_OBJECTSTORE_PATH
    #
    # ------------------------------------------------------------
    # Location to hold intermediate and final scripts to be generated.
    # You must have write privileges on this directory
    export RUNDIR=/tmp/hivemigrate
     
    # ------------------------------------------------------------
    # Specify current hive.metastore.warehouse.dir from Hive Config.
    #
    export SRC_WAREHOUSE_DIR=/apps/hive/warehouse
     
     
    # ------------------------------------------------------------
    # Modify expected target BDS hdfs path in your hive DDL script
    #
    export TARGET_HDFS_PATH=hdfs://testbdmn0.bmbdcsad1.bmbdcs.oraclevcn.com:8020/warehouse/tablespace/external/hive
     
     
    # ------------------------------------------------------------
    # Modify expected target BDS Object Store path in your hive DDL script
    #
    export TARGET_OBJECTSTORE_PATH=oci://bdc2odh@bdsdevcluster/warehouse
  3. Conecte-se ao cluster do BDC por meio de ssh como usuário opc. Para obter mais informações, consulte Estabelecer Conexão com um Nó de Cluster por meio do SSH (Secure Shell).
  4. Crie um script chamado generate_target_ddl_from_source.sh no diretório home ~opc com o código a seguir. Esse script gera as instruções DDL que você pode executar no cluster de destino para criar os metadados hive.
    #!/bin/bash
    #
    # Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
    #
    # Script to generate queries that can be run on a target cluster for hive metadata migration.
    #
    # Usage :
    #   sudo generate_target_ddl_from_source.sh
    # The generated scripts are available under /tmp/hivemigrate/generatedSQL_target_Hive
    #  - 1_CREATE_DB.hql
    #  - 2_CREATE_TABLE.hql
    #  - 3_ADD_PARTITION.hql
    #
    # These scripts can be run on a target cluster AS IS to create hive metadata that matches the source..
    #
     
     
    #------------------------------------------------------------
    # Set Environment
    detect_basedir()
    {
      DIRNAME=`dirname $0`
      BASENAME=`basename $0`
      BASEDIR=$(cd "$DIRNAME" ; pwd)
    }
    detect_basedir
     
     
    #------------------------------------------------------------
    # Initilize any default config properties that has been overriden in
    #     ${BASEDIR}/hive_migrate.properties
    # DO NOT MODIFY. PLEASE OVERRIDE ANY PARAMETER IN ${BASEDIR}/hive_migrate.properties
    export RUNDIR=/tmp/hivemigrate
    export TARGET_HDFS_PATH=hdfs://Some_cluster_name/tmp
    export TARGET_OBJECTSTORE_PATH=oci://mybucket@mytenancy/tmp/
    #
    #------------------------------------------------------------
    if [ -f ${BASEDIR}/hive_migrate.properties ]; then
        echo -e "*** Sourcing Overide proprties file ${BASEDIR}/hive_migrate.properties"
        source ${BASEDIR}/hive_migrate.properties
    else
        echo -e "*** Warning : Missing Overide proprties file ${BASEDIR}/hive_migrate.properties"
        echo -e "*** Continue with default settings\n"
    fi
    #
    usage()
    {
      echo -e "Usage : ${BASENAME} \n"
      echo -e "**  This script is to be run on your source cluster and can be run as many times as you wish."
      echo -e "**  It cleans up any older generated scripts located in ${RUNDIR} before starting \n"
      echo -e "**  The generated output hive query scripts will be available in RUNDIR: ${RUNDIR} ...\n"
      echo -e "*** Modify RUNDIR if you would like to override\n"
      echo -e "**  Currently TARGET_HDFS_PATH is set to hdfs://Some_cluster_name/"
      echo -e "*** Modify TARGET_HDFS_PATH to match your hdfs path in Hive DDL \n"
    }
     
     
    # Make sure only root can run our script
    if [ "$(id -u)" != "0" ]; then
       echo -e "ERROR: *** This script ${BASENAME} must be run as root" 1>&2
       usage
       exit 1
    fi
     
    if [ "$1" != "" ]; then
       usage
       exit 1
    fi
     
     
    #------------------------------------------------------------
    #
    # Figure out the HDFS Path in source cluster.
    # Depending on HA or non-HA cluster the hdfs path syntax is different
    if ! grep -q "dfs.ha.namenodes.mycluster" /etc/bdcsce/conf/blueprint/*.json
    then
        echo -e "INFO:**  Source: Non-HA cluster..."
        nn_fqdn=$(hostname -f)
        SRC_HDFS_PATH=hdfs://${nn_fqdn}:8020${SRC_WAREHOUSE_DIR}
    else
        echo -e 'INFO:**  Source: HA cluster...'
        SRC_HDFS_PATH=hdfs://mycluster${SRC_WAREHOUSE_DIR}
    fi
    echo -e "INFO:**  Assumed source hdfspath : $SRC_HDFS_PATH"
     
     
    #------------------------------------------------------------
    #
    # Figureout Source Object source Patch
    source /etc/bdcsce/conf/datasources.properties
    export SRC_OBJECTSTORE_PATH=${bdcsce_default_objectstore_url}
     
     
     
     
    #------------------------------------------------------------
    # Step-1 : Setup/Clean source and target directories to hold intermediate and final scripts
     
     
    #Path to store intermediate hive queries
    outputSourcePath=${RUNDIR}/generatedSQL_source_Hive
    rm -rf $outputSourcePath
    mkdir -m 777 -p $outputSourcePath
     
     
    #Path to store final target hive queries to be used at target system
    outputTargetPath=${RUNDIR}/generatedSQL_target_Hive
    rm -rf $outputTargetPath
    mkdir -m 777 -p $outputTargetPath
     
     
    #------------------------------------------------------------
    # Step-2 : Extract Create DB statements from MetaStore to Run in Target Hive Installation.
    #
    mysql -Dhive --skip-column-names -e"
     
     
    -- Query for creating databases
    SELECT
        CONCAT('CREATE DATABASE IF NOT EXISTS ',
                D.NAME,
                '\;') AS CREATE_DB_STATEMENTS
    FROM
        DBS D;" > $outputTargetPath/1_CREATE_DB.hql
     
     
    ret=$?
    if [ $ret -ne 0 ];
    then
        echo -e "Error:** - MySQL Error code is $ret while trying to extract DB creation scripts"
        exit $ret
    else
        echo -e "**  DB Creation extraction script $outputTargetPath/1_CREATE_DB.hql completed successfully"
    fi
     
     
    #------------------------------------------------------------
    # Extract Show Create Table statements from MetaStore to Run in Source Hive Installation.
     
     
    mysql -Dhive --skip-column-names -e"
     
     
    -- Query for Creating Show CT Statements to be run in the Source Hive Installation
    SELECT
        CONCAT('USE ', D.name, '\; ','SHOW CREATE TABLE ',
                T.tbl_name,
                '\;') AS SHOW_CT_STATEMENTS
    FROM
        TBLS T
            INNER JOIN
        DBS D ON D.DB_ID = T.DB_ID
    WHERE
        T.TBL_TYPE != 'INDEX_TABLE';" > $outputSourcePath/1_SHOW_CREATE_TABLE.hql
     
     
     
     
    ret=$?
    if [ $ret -ne 0 ];
    then
        echo -e "Error:** - MySQL Error code is $ret while trying to extract SHOW CT scripts"
        exit $ret
    else
        echo -e "\n\n"
        echo -e "**  SHOW CREATE TABLE extraction script $outputSourcePath/1_SHOW_CREATE_TABLE.hql completed successfully"
    fi
     
     
     
     
    #------------------------------------------------------------
    # Run Show Create Table Command on Source Hive Installation to create target Hive CT scripts
    echo -e "**  Running show create table in source cluster"
    echo -e "**  This may take a while...Depends on hive metadata size\n\n"
     
     
     
     
    sudo -u hive hive -f $outputSourcePath/1_SHOW_CREATE_TABLE.hql > $outputTargetPath/2_CREATE_TABLE_temp.hql
    ret=$?
    if [ $ret -ne 0 ];
    then
        echo -e "Error - Hive Error code is $ret while trying to execute SHOW CT scripts"
        exit $ret
    else
        echo -e "\n\n"
        echo -e "**  SHOW CT execution script $outputTargetPath/2_CREATE_TABLE_temp.hql completed successfully"
    fi
     
     
    # Add semicolon suffix ; after CT statements
    echo -e "USE default;" > $outputTargetPath/2_CREATE_TABLE.hql
    cat $outputTargetPath/2_CREATE_TABLE_temp.hql | tr '\n' '\f' | sed -e 's/)\fCREATE/);\fCREATE/g'  | tr '\f' '\n' >> $outputTargetPath/2_CREATE_TABLE.hql
    echo -e ";">>$outputTargetPath/2_CREATE_TABLE.hql
    rm -rf $outputTargetPath/2_CREATE_TABLE_temp.hql
    echo -e "**  Create Table execution script $outputTargetPath/2_CREATE_TABLE.hql created successfully"
     
    #------------------------------------------------------------
    # Convert Managed Table to External table for HIVE 3
    #
    echo -e "INFO:** Convering Managed Table to External table for HIVE 3 in CT $outputTargetPath/2_CREATE_TABLE.hql scripts"
    sed -i "s/^CREATE TABLE/CREATE EXTERNAL TABLE/g" $outputTargetPath/2_CREATE_TABLE.hql
     
    #------------------------------------------------------------
    # Replace HDFS Path
    #
    echo -e "INFO:** Replacing $SRC_HDFS_PATH with $TARGET_HDFS_PATH in CT $outputTargetPath/2_CREATE_TABLE.hql scripts"
    sed -i "s,$SRC_HDFS_PATH,$TARGET_HDFS_PATH,g" $outputTargetPath/2_CREATE_TABLE.hql
     
    #------------------------------------------------------------
    # Replace Target Object Store Path
    #
    echo -e "INFO:** Replacing $SRC_OBJECTSTORE_PATH with $TARGET_OBJECTSTORE_PATH in CT $outputTargetPath/2_CREATE_TABLE.hql scripts"
    sed -i "s,$SRC_OBJECTSTORE_PATH,$TARGET_OBJECTSTORE_PATH,g" $outputTargetPath/2_CREATE_TABLE.hql
     
     
    echo -e "INFO:** Replaced $SRC_OBJECTSTORE_PATH with $TARGET_OBJECTSTORE_PATH in CT $outputTargetPath/2_CREATE_TABLE.hql scripts"
     
     
     
    #------------------------------------------------------------
    # Extract Add Partition statements if any from MetaStore to Run in Target Hive Installation.
     
     
    mysql -Dhive --skip-column-names -e"
    -- Query to create add partition scripts to run in target Hive Installation
     
     
     
     
    SET @oldNameNode = '$SRC_HDFS_PATH'; -- Old NameNode address
    SET @newNameNode = '$TARGET_HDFS_PATH'; -- New NameNode address
     
     
     
     
    SELECT
        REPLACE(add_partition_query,
            @oldNameNode,
            @newNameNode) AS add_partition_query
     
     
     
     
    FROM
            (SELECT
                    CONCAT('USE ', D.name, '\; ', ' ALTER TABLE ', T.TBL_NAME, ' ADD PARTITION (', GROUP_CONCAT(PK.PKEY_NAME, '=', '\'', PKV.PART_KEY_VAL, '\''
                        ORDER BY PK.INTEGER_IDX), ') LOCATION \'', S.location, '\'\; ') AS add_partition_query
        FROM
            TBLS T
        INNER JOIN DBS D ON T.DB_ID = D.DB_ID
        INNER JOIN PARTITION_KEYS PK ON T.TBL_ID = PK.TBL_ID
        INNER JOIN PARTITIONS P ON P.TBL_ID = T.TBL_ID
        INNER JOIN PARTITION_KEY_VALS PKV ON P.PART_ID = PKV.PART_ID
            AND PK.INTEGER_IDX = PKV.INTEGER_IDX
        INNER JOIN SDS S ON P.SD_ID = S.SD_ID
        GROUP BY P.PART_ID
        ORDER BY D.name) alias1;" > $outputTargetPath/3_ADD_PARTITION.hql
    ret=$?
    if [ $ret -ne 0 ];
    then
        echo -e "Error - MySQL Error code is $ret while trying to extract ADD PARTITION scripts"
        exit $ret
    else
        echo -e "\n\n"
        echo -e "**  ADD PARTITION extraction script $outputTargetPath/3_ADD_PARTITION.hql completed successfully"
    fi
     
     
     
     
    echo -e "\n\n"
    echo -e "INFO: ** Here are your Target installation scripts"
    ls -al $outputTargetPath/*
    echo -e "\n\n"
    echo -e "INFO: ** Run these hql scripts on your Target hive shell..."
     
     
    exit 0
  5. Como usuário raiz, execute o script generate_target_ddl_from_source.sh.
    sudo ./generate_target_ddl_from_source.sh
    Os seguintes scripts são gerados em /tmp/hivemigrate/generatedSQL_target_Hive:
    • 1_CREATE_DB.hql
    • 2_CREATE_TABLE.hql
    • 3_ADD_PARTITION.hql

    Durante a importação, você copia esses scripts de /tmp/hivemigrate/generatedSQL_target_Hive para um nó mestre no cluster do BDS de destino com acesso de raiz e banco de dados.

Exportando Notebooks do Zeppelin, Configuração de Serviço e Versões

Você pode exportar configurações de serviço do cluster de origem e usá-las como referência para o cluster de destino para qualquer alteração de configuração personalizada usada no cluster de origem.

Para exportar notebooks zepplin, configurações de serviço e versões, siga estas etapas:

  1. Interrompa os serviços Hive, Zeppelin e Spark.
    1. Acesse a console do Ambari usando o seguinte IP do Ambari:
      https://<hostname>:8080

      Para obter mais informações, consulte Acessar o Big Data Cloud Usando o Ambari.

    2. Em Serviços, vá para Hive, selecione Ações de Serviço e, em seguida, selecione Interromper.
    3. Em Serviços, vá para Zeppelin, selecione Ações de Serviço e, em seguida, selecione Interromper.
    4. Em Serviços, vá para Spark, selecione Ações de Serviço e, em seguida, selecione Interromper.
  2. Prepare-se para executar o script de exportação.
    1. Conecte-se ao cluster do BDC por meio de ssh como usuário opc. Para obter mais informações, consulte Estabelecer Conexão com um Nó de Cluster por meio do SSH (Secure Shell).
    2. Crie um arquivo chamado exportBDC.py usando o código fornecido no github.
    3. Como usuário root, execute chmod 755 exportBDC.py. O arquivo deve ter privilégios de execução.
    4. Crie um arquivo chamado config.json no mesmo diretório e especifique os valores de parâmetro apropriados para a instância de serviço que está sendo exportada.
      {
        "export_dir" : "/data/exportbdc",
        "ambari_username" : "bdcsce_admin",
        "ambari_password" : "<example-password>"
      }
  3. Execute o script de exportação.
    1. Como usuário root, execute o script exportBDC.py. Para obter os logs de depuração, execute o script com o parâmetro -v (por exemplo, exportBDC.py config.json -v).
      
      sudo su
      ./exportBDC.py config.json
    2. Acesse o conteúdo do arquivo .tar.gz que é exportado para os seguintes locais:
      • Configuração
        config/NGINX_MASTER/nginx-ambari-config.xml
        config/HCAT/hcat-env.sh
        config/FABRIC_SERVER/fsm-config.xml
        config/PIG/log4j.properties
        config/PIG/pig.properties
        config/PIG/pig-env.sh
        config/SPARK2_CLIENT/spark-env.sh
        config/SPARK2_CLIENT/spark-log4j.properties
        config/SPARK2_CLIENT/spark-metrics.properties
        config/SPARK2_CLIENT/spark-defaults.conf
        config/HDFS_CLIENT/hdfs-site.xml
        config/HDFS_CLIENT/log4j.properties
        config/HDFS_CLIENT/core-site.xml
        config/HDFS_CLIENT/hadoop-env.sh
        config/YARN_CLIENT/log4j.properties
        config/YARN_CLIENT/capacity-scheduler.xml
        config/YARN_CLIENT/core-site.xml
        config/YARN_CLIENT/yarn-env.sh
        config/YARN_CLIENT/yarn-site.xml
        config/SPOCUI_MASTER/spocui-ambari-config.xml
        config/ZOOKEEPER_CLIENT/log4j.properties
        config/ZOOKEEPER_CLIENT/zookeeper-env.sh
        config/MAPREDUCE2_CLIENT/mapred-site.xml
        config/MAPREDUCE2_CLIENT/mapred-env.sh
        config/MAPREDUCE2_CLIENT/core-site.xml
        config/ALLUXIO_WORKER/alluxio-log4j.xml
        config/ALLUXIO_WORKER/alluxio-env.xml
        config/ALLUXIO_WORKER/alluxio-site.xml
        config/OOZIE_CLIENT/oozie-site.xml
        config/OOZIE_CLIENT/oozie-env.sh
        config/OOZIE_CLIENT/oozie-log4j.properties
        config/TEZ_CLIENT/tez-site.xml
        config/TEZ_CLIENT/tez-env.sh
        config/HIVE_CLIENT/hive-env.sh
        config/HIVE_CLIENT/hive-log4j.properties
        config/HIVE_CLIENT/hive-site.xml
        config/HIVE_CLIENT/hive-exec-log4j.properties
        config/ALLUXIO_MASTER/alluxio-log4j.xml
        config/ALLUXIO_MASTER/alluxio-env.xml
        config/ALLUXIO_MASTER/alluxio-site.xml
        config/LOGSTASH/bdcsce-logstash-agent-ambari-config.xml
      • Cadernos Zepplin
        zeppelin/notebook/2ANTDG878/note.json
        zeppelin/notebook/2CGT3D6QX/note.json
      • Metadados do Hive
        hive_metadata/hive_metadata_dump.sql
      • Dados da versão
        stack/StackVersions.txt
  4. Inicie os serviços Hive, Zeppelin e Spark.
    1. Acesse a console do Ambari usando o seguinte IP do Ambari:
      https://<hostname>:8080

      Para obter mais informações, consulte Acessar o Big Data Cloud Usando o Ambari.

    2. Em Serviços, vá para Hive, selecione Ações de Serviço e, em seguida, selecione Iniciar.
    3. Em Serviços, vá para Zeppelin, selecione Ações de Serviço e depois selecione Iniciar.
    4. Em Serviços, vá para Spark, selecione Ações de Serviço e, em seguida, selecione Iniciar.
Copiando Configurações do Programador
Faça o seguinte:
  1. No BDC, vá para Ambari, selecione YARN, Configurações Avançadas e Scheduler.xml.
  2. Copie Scheduler.xml do BDC para Scheduler.xml (acesse Ambari, selecione YARN, selecione Configurações Avançadas e, em seguida, selecione Scheduler.xml) no Big Data Service.
    Observação

    Esse método retém as capacidades da fila em porcentagens e, portanto, os núcleos e a memória do YARN são proporcionais ao cluster de origem.
    Observação

    Para revisão de configuração avançada, use o script exportBDC.py e compare os dumps de configurações de fio no cluster de destino.
Verificando o Job do Spark

Você deve revisar e atualizar o código para usar as APIs mais recentes no Spark. O Spark e o Hive usam catálogos diferentes no BDS. Para acessar a tabela do Hive, o catálogo deve ser atualizado.

<property>
  <name>metastore.catalog.default</name>
  <value>hive</value>
</property>

No Big Data Service, por padrão, o Hive cria tabelas ACID. O Spark não funciona em tabelas ACID. Você deve criar tabelas externas para acessar o Hive e o Spark.

Compare o arquivo de configuração criado com exportBDC.py no BDC com o arquivo de configuração spark nas alterações de configuração personalizadas do Big Data Service.

Importando Recursos para o Big Data Service

Agora você importa os dados e metadados exportados para o Big Data Service.

Pré-requisitos
Antes de importar recursos, faça o seguinte:
  1. Configure um novo ambiente de destino no Big Data Service com a mesma versão do BDC Hadoop (Hadoop 2.7.x) do cluster de origem.
    Observação

    Observação:
      • Defina o cluster do Big Data Service no OCI com o mesmo tamanho do cluster do BDC de origem. No entanto, você deve revisar suas necessidades de computação e armazenamento antes de decidir o tamanho do cluster de destino.
      • Para saber as formas de VM do Oracle Cloud Infrastructure, consulte Formas do Serviço Compute. O BDC não suporta todas as formas.
      • Se qualquer software que não seja a pilha do BDC estiver instalado no sistema de origem usando o script de inicialização ou algum outro método, você deverá instalar e manter esse software no sistema de destino também.
  2. Copie o arquivo de chave privada PEM (oci_api_key.pem) para todos os nós do cluster do Big Data Service e defina as permissões apropriadas.
  3. Exporte os artefatos do cluster do BDC de origem. Para obter mais informações, consulte Exportar Dados e Metadados do Oracle Big Data Cloud.
Importação de Dados para o HDFS

Para importar dados para o HDFS, siga estas etapas:

  1. Conecte-se ao cluster do Big Data Service (BDS) por meio do SSH como um usuário opc.
    ssh -i id_rsa <private_node_ip>
  2. Determine o local do HDFS onde os dados precisam ser armazenados.
    
    grep -A1 -i fs.defaultFS /etc/hadoop/conf/core-site.xml
  3. Como usuário do HDFS, mova os dados do Armazenamento de Objetos para o HDFS de destino.
    1. Use hadoop fs -cp para importar dados do HDFS do Armazenamento de Objetos para um cluster do BDS de destino como usuário do HDFS.
      sudo su - hdfs
       
      hadoop fs -Dfs.oci.client.auth.fingerprint=<fingerprint> \
      -Dfs.oci.client.auth.pemfilepath=<oci_pem_key> \
      -Dfs.oci.client.auth.passphrase=<passphrase> \
      -Dfs.oci.client.auth.tenantId=<OCID for Tenancy> \
      -Dfs.oci.client.auth.userId=<OCID for User> \
      -Dfs.oci.client.hostname=<HostName. Example: https://objectstorage.us-phoenix-1.oraclecloud.com/> \
      -Dfs.oci.client.proxy.uri=http://<proxyhost>:<proxyport> \
      -cp oci://<bucket>@<tenancy>/<dir>/ <hdfs-dir-to-copy>
    2. Use hadoop distcp para importar dados do HDFS do Armazenamento de Objetos para um cluster do BDS com vários nós. Valide-o em um diretório específico. Por exemplo, use /user/oozie para <hdfs-dir-to-copy> no comando a seguir primeiro e, em seguida, execute-o para todo o HDFS (/).
      hadoop distcp -libjars ${LIBJARS} \
      -Dfs.client.socket-timeout=3000000
      -Dfs.oci.client.auth.fingerprint=<fingerprint> \
      -Dfs.oci.client.auth.pemfilepath=<oci_pem_key> \
      -Dfs.oci.client.auth.passphrase=<passphrase> \
      -Dfs.oci.client.auth.tenantId=<OCID for Tenancy> \
      -Dfs.oci.client.auth.userId=<OCID for User> \
      -Dfs.oci.client.hostname=<HostName. Example: https://objectstorage.us-phoenix-1.oraclecloud.com/> \
      -Dfs.oci.client.multipart.allowed=true \
      -Dfs.oci.client.proxy.uri=<http://proxy-host>:port \
      -Dmapreduce.map.java.opts="$DISTCP_PROXY_OPTS" \
      -Dmapreduce.reduce.java.opts="$DISTCP_PROXY_OPTS" \
      -Dmapreduce.task.timeout=6000000 \
      -skipcrccheck -m 40 -bandwidth 500 \
      -update -strategy dynamic -i oci://<bucket>@<tenancy>/<exportedHdfsDir>/ <hdfs-dir-to-copy>
  4. Liste o conteúdo do diretório tmp.
    hadoop fs -ls /<hdfs-dir-to-copy>
Importar os arquivos de metadados e executar as permissões
Faça o seguinte:
  1. Importe arquivos de metadados do Armazenamento de Objetos para /metadata no HDFS.
    
    hadoop distcp -libjars ${LIBJARS} \
    -Dfs.client.socket-timeout=3000000
    -Dfs.oci.client.auth.fingerprint=<fingerprint> \
    -Dfs.oci.client.auth.pemfilepath=<oci_pem_key> \
    -Dfs.oci.client.auth.passphrase=<passphrase> \
    -Dfs.oci.client.auth.tenantId=<OCID for Tenancy> \
    -Dfs.oci.client.auth.userId=<OCID for User> \
    -Dfs.oci.client.hostname=<HostName. Example: https://objectstorage.us-phoenix-1.oraclecloud.com/> \
    -Dfs.oci.client.multipart.allowed=true \
    -Dfs.oci.client.proxy.uri=<http://proxy-host>:port \
    -Dmapreduce.map.java.opts="$DISTCP_PROXY_OPTS" \
    -Dmapreduce.reduce.java.opts="$DISTCP_PROXY_OPTS" \
    -Dmapreduce.task.timeout=6000000 \
    -skipcrccheck -m 40 -bandwidth 500 \
    -update -strategy dynamic -i oci://<bucket>@<tenancy>/metadata/ /metadata
  2. Mover arquivos para o diretório local.
    hdfs dfs -get /metadata/Metadata*
  3. Execute os arquivos em paralelo no plano de fundo ou em vários terminais.
    bash Metadataaa &
     
    bash Metadataab &
     
    bash Metadataac &...
Importando Metadados

Para importar metadados, siga estas etapas:

  1. Estabelecer conexão com o cluster do BDS por meio do bastion host como um uso opc
  2. Copie os scripts de consulta DDL do HIVE, criados no cluster do BDC de origem, para o cluster do BDS de destino
    1. 1_CREATE_DB.hql.
    2. 2_CREATE_TABLE.hql
    3. 3_ADD_PARTITION.hql
  3. Execute o script 1_CREATE_DB.hql.
    hive -f 1_CREATE_DB.hql
  4. Execute o script 2_CREATE_TABLE.hql.
    hive -f 2_CREATE_TABLE.hql
  5. Execute o script 3_ADD_PARTITION.hql.
    hive -f 3_ADD_PARTITION.hql
Atualizando o Diretório do Warehouse do Hive Metastore

Faça o seguinte:

  1. Localize o valor de hive.metastore.warehouse.dir. Esta é uma propriedade hive configurada como /apps/hive/warehouse no cluster do BDC em hive-site.xml.
    <name>hive.metastore.warehouse.dir</name>
    <value>/apps/hive/warehouse</value>
  2. Reconfigure hive.metastore.warehouse.dir para <exportedHdfsDir>/apps/hive/warehouse em hive-site.xml no cluster do BDS.
  3. Se você copiou seus dados do HDFS para hdfs://tmp, configure a propriedade hive.metastore.warehouse.dir como /tmp/apps/hive/warehouse.

Validando a Migração

Após migrar os recursos, verifique se o mesmo conjunto de tabelas hive está presente no cluster de destino como no cluster de origem.
  1. Conecte-se ao shell hive.
    hive
  2. Execute o seguinte comando para listar as tabelas:
    show tables;
  3. Execute estes comandos para consultar a tabela:
    SELECT * FROM airports LIMIT 10;
  4. Execute o comando a seguir para verificar os dados do HDFS e do Object Store.
    hadoop fs -du -s /tmp/hivemigrate
  5. Verifique a integridade do cluster enviando todos os jobs relevantes e obtendo os resultados esperados. Escolha um job executado no BDC e execute-o no cluster do BDS.
    Observação

    A execução bem-sucedida de um job depende não apenas da localização dos dados, mas também das definições de configuração, como HADOOP_CLASS_PATH, localização dos jars do cliente e assim por diante.