Como se conectar a bancos de dados do Apache Hadoop com o AWS Schema Conversion Tool
É possível usar a interface de linha de comandos (CLI) da AWS SCT para migrar do Apache Hadoop para o Amazon EMR. A AWS SCT usa seu bucket do Amazon S3 como armazenamento temporário para seus dados durante a migração.
A AWS SCT oferece suporte como Apache Hadoop de origem versão 2.2.0 e superior. Além disso, a AWS SCT oferece suporte com o Apache Hive versão 0.13.0 e superior.
A AWS SCT oferece suporte como Amazon EMR de destino versão 6.3.0 e superior. Além disso, a AWS SCT oferece suporte como Apache Hadoop de destino versão 2.6.0 e superior e Apache Hive versão 0.13.0 e superior.
Tópicos
Pré-requisitos de uso do Apache Hadoop como origem
Os pré-requisitos a seguir são necessários para se conectar ao Apache Hadoop com a CLI da AWS SCT.
-
Crie um bucket do Amazon S3 para armazenar dados durante a migração. Em seguida, você pode copiar dados para o Amazon EMR HDFS ou usar o Amazon S3 como um repositório de dados para seus workloads do Hadoop. Para obter mais informações, consulte Como criar um bucket no Guia do usuário do Amazon S3.
-
Crie um perfil (IAM) AWS Identity and Access Management com a política de
AmazonS3FullAccess. A AWS SCT usa esse perfil do IAM para acessar o bucket do Amazon S3. -
Anote sua chave AWS secreta e sua chave de acesso AWS secreta. Para obter mais informações sobre as chaves de acesso da AWS, consulte Como gerenciar chaves de acesso no Guia de usuário do IAM.
-
Criar e configurar um cluster do Amazon EMR de destino. Para obter mais informações, consulte Conceitos básicos do Amazon EMR no Guia de gerenciamento do Amazon EMR.
-
Instale o utilitário
distcpem seu cluster Apache Hadoop de origem. Além disso, instale o utilitários3-dist-cpem seu cluster do Amazon EMR de destino. Certifique-se de que os usuários do banco de dados tenham permissões para executar esses utilitários. -
Configure o arquivo
core-site.xmlem seu cluster Hadoop de origem para usar o protocolo s3a. Para fazer isso, defina o parâmetrofs.s3a.aws.credentials.providercom um dos seguintes valores:org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProviderorg.apache.hadoop.fs.s3a.SimpleAWSCredentialsProviderorg.apache.hadoop.fs.s3a.AnonymousAWSCredentialsProviderorg.apache.hadoop.fs.s3a.auth.AssumedRoleCredentialProvider
É possível adicionar o exemplo de código a seguir ao arquivo
core-site.xml.<property> <name>fs.s3a.aws.credentials.provider</name> <value>org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider</value> </property>O exemplo anterior mostra uma das quatro opções da lista de opções anterior. Se você não definir o parâmetro
fs.s3a.aws.credentials.providerno arquivocore-site.xml, a AWS SCT escolherá o provedor automaticamente.
Permissões para usar o Hive como origem
As permissões necessárias para um usuário do Hive de origem são as seguintes:
Acesso
READàs pastas de dados de origem e ao bucket do Amazon S3 de origemAcesso
READ+WRITEaos buckets do Amazon S3 intermediários e de destino
Para aumentar a velocidade de migração, recomendamos que você execute a compactação para tabelas de origem transacionais ACID.
As permissões necessárias para um usuário do Amazon EMR Hive de destino são as seguintes:
Acesso
READao bucket do Amazon S3 de destinoAcesso
READ+WRITEao bucket do Amazon S3 intermediárioAcesso
READ+WRITEàs pastas HDFS de destino
Permissões para usar o HDFS como origem
As permissões necessárias para o HDFS como origem são as seguintes:
EXECUTEpara o NameNodeEXECUTE+READpara todas as pastas e arquivos de origem que você inclui no projeto de migraçãoREAD+WRITEpara o diretóriotmpno NameNode para executar trabalhos do Spark e armazenar arquivos antes da migração para o Amazon S3
No HDFS, todas as operações exigem acesso transversal. O acesso transversal exige a permissão da EXECUTE em todos os componentes existentes do caminho, exceto no componente final do caminho. Por exemplo, para qualquer operação de acesso /foo/bar/baz, seu usuário deve ter permissão EXECUTE em /, /foo e /foo/bar.
O exemplo de código a seguir demonstra como conceder permissões EXECUTE+READ para suas pastas e arquivos de origem e permissões READ+WRITE para o diretório tmp.
hadoop fs –chmod –R 744 /user/hdfs-data hadoop fs –chmod –R 766 /tmp
Permissões para usar o HDFS como destino
As permissões necessárias para o Amazon EMR HDFS como destino são as seguintes:
EXECUTEpara o NameNode do cluster Amazon EMR de destinoREAD+WRITEpara as pastas HDFS de destino nas quais você armazenará dados após a migração
Como se conectar ao Apache Hadoop como origem
Você pode usar o Apache Hadoop como origem na AWS SCT versão 1.0.670 ou superior. É possível migrar clusters do Hadoop para o Amazon EMR somente na interface de linha de comandos (CLI) da AWS SCT. Antes de começar a usar, familiarize-se com a interface de linha de comandos da AWS SCT. Para obter mais informações, consulte Referência da CLI do AWS Schema Conversion Tool.
Para se conectar ao Apache Hadoop na CLI da AWS SCT
-
Crie um novo script de CLI da AWS SCT ou edite um modelo de cenário existente. Por exemplo, é possível baixar e editar o modelo
HadoopMigrationTemplate.scts. Para obter mais informações, consulte Obter cenários de CLI. -
Defina as configurações do aplicativo AWS SCT, como a localização do driver e a pasta do log.
Faça o download do driver JDBC necessário e especifique o local de armazenamento do arquivo. Para obter mais informações, consulte Instalação de drivers JDBC para o AWS Schema Conversion Tool.
O exemplo de código a seguir mostra como adicionar o caminho ao driver do Apache Hive. Depois de executar esse exemplo de código, a AWS SCT armazena os arquivos de log na pasta
c:\sct.SetGlobalSettings -save: 'true' -settings: '{ "hive_driver_file": "c:\\sct\\HiveJDBC42.jar", "log_folder": "c:\\sct", "console_log_folder": "c:\\sct" }' /Você pode usar esse exemplo e os exemplos a seguir no Windows.
-
Criar um novo projeto da AWS SCT.
O exemplo de código a seguir cria o projeto da
hadoop_emrna pastac:\sct.CreateProject -name: 'hadoop_emr' -directory: 'c:\sct' / -
Adicione seu cluster Hadoop de origem ao projeto.
Use o comando
AddSourceClusterpara se conectar ao cluster Hadoop de origem. Certifique-se de fornecer valores para os seguintes parâmetros obrigatórios:name,host,porteuser. Outros parâmetros são opcionais.O exemplo de código a seguir adiciona o cluster Hadoop de origem. Este exemplo define
HADOOP_SOURCEcomo um nome do cluster de origem. Use esse nome de objeto para adicionar serviços Hive e HDFS ao projeto e criar regras de mapeamento.AddSourceCluster -name: 'HADOOP_SOURCE' -vendor: 'HADOOP' -host: 'hadoop_address' -port: '22' -user: 'hadoop_user' -password: 'hadoop_password' -useSSL: 'true' -privateKeyPath: 'c:\path\name.pem' -passPhrase: 'hadoop_passphrase' /No exemplo anterior, substitua
hadoop_addresspelo endereço IP do seu cluster Hadoop. Se necessário, configure o valor da opção de porta. Em seguida, substituahadoop_userehadoop_passwordpelo nome do seu usuário do Hadoop e pela senha desse usuário. Empath\name, insira o nome e o caminho para o arquivo PEM do seu cluster Hadoop de origem. -
Salve o script da CLI. Em seguida, adicione as informações de conexão dos seus serviços Hive e HDFS.
Como se conectar aos serviços Hive e HDFS de origem
Você pode se conectar aos serviços Hive e HDFS de origem com a CLI da AWS SCT. Para se conectar ao Apache Hive, use o driver JDBC do Hive versão 2.3.4 ou superior. Para obter mais informações, consulte Instalação de drivers JDBC para o AWS Schema Conversion Tool.
A AWS SCT se conecta ao Apache Hive com o usuário do cluster hadoop. Para fazer isso, use os comandos AddSourceClusterHive e AddSourceClusterHDFS. Você pode usar uma das abordagens a seguir.
-
Crie um novo túnel SSH.
Em
createTunnel, digitetrue. Parahost, insira o endereço IP interno do seu serviço Hive ou HDFS de origem. Paraport, insira a porta de serviço do seu serviço Hive ou HDFS.Em seguida, insira suas credenciais do Hive ou do HDFS para
userepassword. Para obter mais informações sobre túneis SSH, consulte Configurar um túnel SSH ao nó primário usando o encaminhamento de portas locais no Guia de gerenciamento do Amazon EMR. -
Use um túnel SSH existente.
Em
host, digitelocalhost. Paraport, insira a porta local a partir dos parâmetros do túnel SSH. -
Conecte-se diretamente aos seus serviços Hive e HDFS.
Para
host, insira o endereço IP ou nome do host do seu serviço Hive ou HDFS de origem. Paraport, insira a porta de serviço do seu serviço Hive ou HDFS. Em seguida, insira suas credenciais do Hive ou do HDFS parauserepassword.
Para se conectar ao Hive e ao HDFS na CLI da AWS SCT
-
Abra seu script de CLI, que inclui as informações de conexão do seu cluster Hadoop de origem. Certifique-se de usar o nome do cluster Hadoop que você definiu na etapa anterior.
-
Adicione seu serviço Hive de origem ao projeto.
Use o comando
AddSourceClusterHivepara conectar o serviço Hive de origem. Certifique-se de fornecer valores para os seguintes parâmetros obrigatórios:user,password,cluster,nameeport. Outros parâmetros são opcionais.O exemplo de código a seguir cria um túnel para AWS SCT trabalhar com seu serviço Hive. Esse serviço Hive de origem é executado no mesmo PC que AWS SCT. Este exemplo usa o cluster de
HADOOP_SOURCEde origem do exemplo anterior.AddSourceClusterHive -cluster: 'HADOOP_SOURCE' -name: 'HIVE_SOURCE' -host: 'localhost' -port: '10005' -user: 'hive_user' -password: 'hive_password' -createTunnel: 'true' -localPort: '10005' -remoteHost: 'hive_remote_address' -remotePort: 'hive_port' /O exemplo de código a seguir se conecta ao seu serviço Hive sem um túnel.
AddSourceClusterHive -cluster: 'HADOOP_SOURCE' -name: 'HIVE_SOURCE' -host: 'hive_address' -port: 'hive_port' -user: 'hive_user' -password: 'hive_password' /Nos exemplos anteriores, substitua
hive_userehive_passwordpelo nome do seu usuário do Hive e pela senha desse usuário.Em seguida, substitua
hive_addressehive_portpelo endereço IP NameNode e pela porta do seu cluster Hadoop de origem.Para
hive_remote_address, você pode usar o valor padrão127.0.0.1ou o endereço IP NameNode do seu serviço Hive de origem. -
Adicione seu serviço HDFS de origem ao projeto.
Use o comando
AddSourceClusterHDFSpara conectar o serviço HDFS de origem. Certifique-se de fornecer valores para os seguintes parâmetros obrigatórios:user,password,cluster,nameeport. Outros parâmetros são opcionais.Certifique-se de que seu usuário tenha as permissões necessárias para migrar dados do serviço HDFS de origem. Para obter mais informações, consulte Permissões para usar o Hive como origem.
O exemplo de código a seguir cria um túnel para AWS SCT trabalhar com seu serviço Apache HDFS. Este exemplo usa o cluster
HADOOP_SOURCEde origem que você criou anteriormente.AddSourceClusterHDFS -cluster: 'HADOOP_SOURCE' -name: 'HDFS_SOURCE' -host: 'localhost' -port: '9005' -user: 'hdfs_user' -password: 'hdfs_password' -createTunnel: 'true' -localPort: '9005' -remoteHost: 'hdfs_remote_address' -remotePort: 'hdfs_port' /O código a seguir se conecta ao seu serviço Apache HDFS sem um túnel.
AddSourceClusterHDFS -cluster: 'HADOOP_SOURCE' -name: 'HDFS_SOURCE' -host: 'hdfs_address' -port: 'hdfs_port' -user: 'hdfs_user' -password: 'hdfs_password' /Nos exemplos anteriores, substitua
hdfs_userehdfs_passwordpelo nome do seu usuário do HDFS e pela senha desse usuário.Em seguida, substitua
hdfs_addressehdfs_portpelo endereço IP NameNode e pela porta do seu cluster Hadoop de origem.Para
hdfs_remote_address, você pode usar o valor padrão127.0.0.1ou o endereço IP NameNode do seu serviço Hive de origem. -
Salve o script da CLI. Em seguida, adicione as informações de conexão do seu cluster do Amazon EMR de destino e os comandos de migração.
Como se conectar ao Amazon EMR como destino
Você pode se conectar ao seu cluster do Amazon EMR de destino com a CLI da AWS SCT. Para fazer isso, você autoriza o tráfego de entrada e usa o SSH. Nesse caso, AWS SCT tem todas as permissões necessárias para trabalhar com seu cluster do Amazon EMR. Para obter mais informações, consulte Antes de se conectar e Conectar-se ao nó primário usando SSH no Guia de gerenciamento do Amazon EMR.
AWS SCT se conecta ao Hive do Amazon EMR com o usuário do cluster hadoop. Para se conectar ao Hive do Amazon EMR, use o driver JDBC do Hive versão 2.6.2.1002 ou superior. Para obter mais informações, consulte Instalação de drivers JDBC para o AWS Schema Conversion Tool.
Para se conectar ao Amazon EMR na CLI da AWS SCT
-
Abra seu script de CLI, que inclui as informações de conexão do seu cluster Hadoop de origem. Adicione as credenciais do Amazon EMR de destino a esse arquivo.
-
Adicione seu cluster do Amazon EMR de destino ao projeto.
O exemplo de código a seguir adiciona o cluster do Amazon EMR de destino. Este exemplo define
HADOOP_TARGETcomo um nome do cluster de destino. Use esse nome de objeto para adicionar seus serviços Hive e HDFS e uma pasta de bucket do Amazon S3 ao projeto e crie regras de mapeamento.AddTargetCluster -name: 'HADOOP_TARGET' -vendor: 'AMAZON_EMR' -host: 'ec2-44-44-55-66.eu-west-1.EXAMPLE.amazonaws.com' -port: '22' -user: 'emr_user' -password: 'emr_password' -useSSL: 'true' -privateKeyPath: 'c:\path\name.pem' -passPhrase: '1234567890abcdef0!' -s3Name: 'S3_TARGET' -accessKey: 'AKIAIOSFODNN7EXAMPLE' -secretKey: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY' -region: 'eu-west-1' -s3Path: 'doc-example-bucket/example-folder' /No exemplo anterior, insira os nomes dos recursos AWS e as informações de conexão do Amazon EMR. Isso inclui o endereço IP do seu cluster do Amazon EMR, chave de acesso AWS, chave de acesso secreta AWS e bucket do Amazon S3. Se necessário, configure o valor da variável de porta. Em seguida, substitua
emr_usereemr_passwordpelo nome do seu usuário do Amazon EMR e pela senha desse usuário. Empath\name, insira o nome e o caminho para o arquivo PEM do seu cluster do Amazon EMR de destino. Para mais informações, consulte Baixar arquivo PEM para acesso ao cluster do EMR. -
Adicione o bucket do Amazon S3 de destino ao projeto.
O exemplo de código a seguir adiciona o bucket do Amazon S3 de destino. Este exemplo usa o cluster
HADOOP_TARGETque você criou antes.AddTargetClusterS3 -cluster: 'HADOOP_TARGET' -Name: 'S3_TARGET' -accessKey: 'AKIAIOSFODNN7EXAMPLE' -secretKey: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY' -region: 'eu-west-1' -s3Path: 'doc-example-bucket/example-folder' /No exemplo anterior, insira sua chave de acesso AWS, chave de acesso secreta AWS e bucket do Amazon S3.
-
Adicione seu serviço Hive de destino ao projeto.
O exemplo de código a seguir cria um túnel para AWS SCT trabalhar com seu serviço Hive de destino. Este exemplo usa o cluster
HADOOP_TARGETde destino que você criou anteriormente.AddTargetClusterHive -cluster: 'HADOOP_TARGET' -name: 'HIVE_TARGET' -host: 'localhost' -port: '10006' -user: 'hive_user' -password: 'hive_password' -createTunnel: 'true' -localPort: '10006' -remoteHost: 'hive_address' -remotePort: 'hive_port' /No exemplo anterior, substitua
hive_userehive_passwordpelo nome do seu usuário do Hive e pela senha desse usuário.Em seguida, substitua
hive_addresspelo valor padrão127.0.0.1ou pelo endereço IP NameNode do seu serviço Hive de destino. Em seguida, substituahive_portpela porta do serviço Hive de destino. -
Adicione seu serviço HDFS de destino ao projeto.
O exemplo de código a seguir cria um túnel para AWS SCT trabalhar com seu serviço Apache HDFS. Este exemplo usa o cluster
HADOOP_TARGETde destino que você criou anteriormente.AddTargetClusterHDFS -cluster: 'HADOOP_TARGET' -name: 'HDFS_TARGET' -host: 'localhost' -port: '8025' -user: 'hdfs_user' -password: 'hdfs_password' -createTunnel: 'true' -localPort: '8025' -remoteHost: 'hdfs_address' -remotePort: 'hdfs_port' /No exemplo anterior, substitua
hdfs_userehdfs_passwordpelo nome do usuário do HDFS e pela senha desse usuário.Em seguida, substitua
hdfs_addressehdfs_portpelo endereço IP privado e pela porta do NameNode do seu serviço HDFS de destino. -
Salve o script da CLI. Em seguida, adicione regras de mapeamento e comandos de migração. Para obter mais informações, consulte Migração de workloads do Hadoop.