Global outage event
If you’re experiencing issues with your AWS services, then please refer to the AWS Health Dashboard. You can find the overall status of ongoing outages, the health of AWS services, and the latest updates from AWS engineers.
Como faço para configurar uma conexão SSL entre a Hive no Amazon EMR e uma metastore no Amazon RDS para MySQL?
Quero configurar uma conexão SSL entre a Hive no Amazon EMR e uma metastore no Amazon Relational Database Service (Amazon RDS) para MySQL.
Breve descrição
Para configurar uma conexão criptografada entre o Hive e uma metastore externa, use um certificado SSL. É possível configurar uma conexão SSL ao inicializar um novo cluster do Amazon EMR ou depois que o cluster estiver em execução.
Observação: as etapas a seguir foram testadas no Amazon EMR versão 7.3.0 e no Amazon RDS para MySQL versão 8.0.39.
Resolução
Observação: Se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
Configurar uma conexão SSL em um novo cluster do Amazon EMR
Conclua as seguintes etapas:
-
Para criar uma instância de banco de dados do Amazon RDS para MySQL, execute o seguinte comando create-db-instance:
aws rds create-db-instance \ --db-name hive \ --db-instance-identifier example-db-instance-identifier \ --db-instance-class db.c6gd.large \ --engine mysql --engine-version 8.0.39 \ --db-subnet-group-name example-subnet-group \ --master-username example-rds-primary-user \ --master-user-password example-rds-primary-password \ --allocated-storage 200 \ --storage-type gp3 \ --vpc-security-group-ids example-rds-vpc-security-groupObservação: substitua example-db-instance-identifier pelo identificador de instância do banco de dados, example-subnet-group com o seu nome de grupo de sub-rede, example-rds-primary-user pelo nome de usuário principal do Amazon RDS e example-rds-primary-password pela senha principal do Amazon RDS. Além disso, substitua example-rds-vpc-security-group pelo nome do seu grupo de segurança do Amazon Virtual Private Cloud (Amazon VPC) do Amazon RDS.
-
Conecte-se à instância de banco de dados do Amazon RDS para MySQL como usuário principal. Em seguida, crie um usuário da metastore do Hive:
Observação: certifique-se de restringir o acesso do usuário principal à instância de banco de dados que você criou anteriormente.mysql -h example-rds-db-instance-endpoint -P 3306 -u example-rds-primary-user -p Enter password: example-rds-primary-passwordCREATE USER 'example-hive-username' IDENTIFIED BY 'example-hive-password' REQUIRE SSL; REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'example-hive-username'; GRANT ALL PRIVILEGES ON hive.* TO 'example-hive-username'; FLUSH PRIVILEGES;Observação: substitua example-rds-db-instance-endpoint pelo endpoint da instância de banco de dados do Amazon RDS, example-rds-primary-user pelo nome de usuário principal do Amazon RDS e example-rds-primary-password pela senha principal do Amazon RDS. Além disso, substitua example-hive-username pelo nome de usuário da Hive e example-hive-password com a sua senha de example-hive-username.
-
Crie um arquivo de configuração JSON semelhante ao seguinte:
Observação: use o arquivo JSON a seguir para inicializar o cluster do Amazon EMR na próxima etapa. O arquivo permite que a Hive estabeleça uma conexão SSL com a instância de banco de dados do Amazon RDS.
[ { "Classification": "hive-site", "Properties": { "javax.jdo.option.ConnectionURL": "jdbc:mysql://example-rds-db-instance-endpoint:3306/hive?createDatabaseIfNotExist=true&useSSL=true&serverSslCert=/home/hadoop/global-bundle.pem", "javax.jdo.option.ConnectionDriverName": "org.mariadb.jdbc.Driver", "javax.jdo.option.ConnectionUserName": "example-hive-username", "javax.jdo.option.ConnectionPassword": "example-hive-password" } } ]Observação: substitua example-rds-db-instance-endpoint pelo endpoint da instância de banco de dados do Amazon RDS, example-hive-username pelo nome de usuário que a Hive usará para se conectar à instância de banco de dados do Amazon RDS e example-hive-password pela senha de example-hive-username.
-
Crie uma regra de entrada no grupo de segurança associado à sua instância do Amazon RDS para MySQL da seguinte forma:
Em Tipo, escolha MySQL/Aurora (3306).
Em Protocolo, TCP (6) é selecionado por padrão.
Em Intervalo de portas, 3306 é selecionado por padrão.
Em Origem, insira o ID do grupo de segurança gerenciado do Amazon EMR associado ao nó primário.
Observação: essa regra permite que o nó primário do cluster do Amazon EMR acesse a instância do Amazon RDS. Para mais informações, consulte Visão geral dos grupos de segurança da VPC. -
Crie o seguinte arquivo de script de ação de bootstrap. Em seguida, faça o upload para um bucket do Amazon S3. A ação de bootstrap baixa o certificado SSL para /home/hadoop/ no nó primário.
#!/bin/bash if grep isMaster /mnt/var/lib/info/instance.json | grep false; then echo "This is not primary node, do nothing, exiting" exit 0 fi echo "This is primary, continuing to execute script" cd /home/hadoop wget -S -T 10 -t 5 https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem -
Para inicializar um cluster do Amazon EMR, execute o seguinte comando create-cluster com o arquivo JSON anterior e a ação de bootstrap:
Exemplo:
aws emr create-cluster \ --name "EMR Hive Metastore SSL" \ --log-uri $LOG_URI \ --release-label "emr-7.3.0" \ --service-role $EMRServiceRole \ --ec2-attributes KeyName=$EC2_KEY_PAIR,InstanceProfile=$EMREC2Role,SubnetId=$EMR_SUBNET,EmrManagedSlaveSecurityGroup=$EMR_CORE_AND_TASK_VPC_SG,EmrManagedMasterSecurityGroup=$EMR_PRIMARY_VPC_SG \ --applications Name=Hadoop Name=Hive \ --bootstrap-actions Path=$BOOTSTRAP_ACTION_SCRIPT_PATH \ --configurations file:///<Full-Path-To>/hive-ext-meta-mysql-ssl.json \ --instance-groups '[{"InstanceCount":1,"InstanceGroupType":"CORE","Name":"Core","InstanceType":"m5.xlarge","EbsConfiguration":{"EbsBlockDeviceConfigs":[{"VolumeSpecification":{"VolumeType":"gp2","SizeInGB":32},"VolumesPerInstance":2}]}},{"InstanceCount":1,"InstanceGroupType":"MASTER","Name":"Primary","InstanceType":"m5.xlarge","EbsConfiguration":{"EbsBlockDeviceConfigs":[{"VolumeSpecification":{"VolumeType":"gp2","SizeInGB":32},"VolumesPerInstance":2}]}},{"InstanceCount":1,"InstanceGroupType":"TASK","Name":"Task - 1","InstanceType":"m5.xlarge","EbsConfiguration":{"EbsBlockDeviceConfigs":[{"VolumeSpecification":{"VolumeType":"gp2","SizeInGB":32},"VolumesPerInstance":2}]}}]' -
Abra uma sessão da Hive no nó primário. Em seguida, crie uma tabela para fins de teste.
Exemplo:
hive> create table tb_test (col1 STRING, col2 BIGINT); OK Time taken: 2.371 secondshive> describe tb_test; OK col1 string col2 bigint Time taken: 0.254 seconds, Fetched: 2 row(s) -
para se conectar à metastore do Amazon RDS para MySQL, use o cliente mysql no nó primário. Em seguida, verifique os metadados da tabela na metastore. Se os metadados corresponderem à tabela que você criou na etapa anterior, a conexão SSL funcionará.
Exemplo:
mysql -h example-rds-db-instance-endpoint -P 3306 -u example-rds-primary-user -pEnter password: example-rds-primary-password mysql> use hive; Database changed mysql> select t1.OWNER, t1.TBL_NAME, t1.TBL_TYPE, s1.INPUT_FORMAT, s1.OUTPUT_FORMAT, s1.LOCATION from TBLS t1 inner join SDS s1 on s1.SD_ID = t1.SD_ID where t1.TBL_NAME = 'tb_test'\G *************************** 1. row *************************** OWNER: hadoop TBL_NAME: tb_test TBL_TYPE: MANAGED_TABLE INPUT_FORMAT: org.apache.hadoop.mapred.TextInputFormat OUTPUT_FORMAT: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat LOCATION: hdfs://ip-xxx-xx-xx-xxx.ec2.internal:8020/user/hive/warehouse/tb_test 1 row in set (0.23 sec) mysql> select t1.OWNER, t1.TBL_NAME, c1.COLUMN_NAME, c1.TYPE_NAME from TBLS t1 inner join SDS s1 on s1.SD_ID = t1.SD_ID inner join COLUMNS_V2 c1 on c1.CD_ID = s1.CD_ID where t1.TBL_NAME = 'tb_test'; +--------+----------+-------------+-----------+ | OWNER | TBL_NAME | COLUMN_NAME | TYPE_NAME | +--------+----------+-------------+-----------+ | hadoop | tb_test | col1 | string | | hadoop | tb_test | col2 | bigint | +--------+----------+-------------+-----------+ 2 rows in set (0.22 sec)Observação: substitua example-rds-db-instance-endpoint pelo endpoint da instância de banco de dados do Amazon RDS, example-rds-primary-user pelo nome de usuário principal do Amazon RDS e example-rds-primary-password pela senha principal do Amazon RDS.
Configurar uma conexão SSL em um cluster do Amazon EMR em execução
Observação: antes de começar, certifique-se de ter uma instância de banco de dados do Amazon RDS para MySQL.
-
Baixe o certificado SSL em /home/hadoop/ no nó primário:
cd /home/hadoop && wget -S -T 10 -t 5 https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem -
No diretório /etc/hive/conf.dist, adicione ou edite as seguintes linhas no arquivo hive-site.xml:
<property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://example-rds-db-instance-endpoint:3306/hive?createDatabaseIfNotExist=true&useSSL=true&serverSslCert=/home/hadoop/global-bundle.pem</value> <description>example-rds-db-instance-endpoint</description> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>example-hive-username</value> <description>example-metastore-db-user</description> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>example-hive-password</value> <description>example-metastore-db-password</description> </property>Observação: substitua example-rds-db-instance-endpoint pelo endpoint da instância de banco de dados do Amazon RDS, example-hive-username pelo nome de usuário que a Hive usará para se conectar à instância de banco de dados do Amazon RDS e example-hive-password pela senha de example-hive-username. Além disso, o e comercial (&) é um caractere especial em XML. Para usar um e comercial em hive-site.xml, como na string JDBC, use & em vez de &. Se você não usar &, receberá um erro ao reiniciar o hive-hcatalog-server.
-
Teste a conexão SSL:
mysql -h example-rds-db-instance-endpoint -P 3306 -u example-hive-username -p --ssl-ca /home/hadoop/global-bundle.pem Enter password: example-hive-passwordObservação: substitua example-rds-db-instance-endpoint pelo endpoint da instância de banco de dados do Amazon RDS, example-hive-username pelo nome de usuário que a Hive usará para se conectar à instância de banco de dados do Amazon RDS e example-hive-password pela senha de example-hive-username.
-
Reinicie hive-hcatalog-server no nó primário.
-
Confirme se os serviços foram reiniciados:
sudo systemctl status hive-hcatalog-server.service -
Abra uma sessão da Hive no nó primário. Em seguida, crie uma tabela para fins de teste.
Exemplo:
hive> create table tb_test (col1 STRING, col2 BIGINT);OK Time taken: 2.371 seconds hive> describe tb_test; OK col1 string col2 bigint Time taken: 0.254 seconds, Fetched: 2 row(s) -
para se conectar à metastore do Amazon RDS para MySQL, use o cliente mysql no nó primário. Em seguida, verifique os metadados da tabela na metastore. Se os metadados corresponderem à tabela que você criou na etapa anterior, a conexão SSL funcionará.
Exemplo:
$ mysql -h example-rds-db-instance-endpoint -P 3306 -u example-rds-primary-user -p Enter password: example-rds-primary-password mysql> use hive; Database changed mysql> select t1.OWNER, t1.TBL_NAME, t1.TBL_TYPE, s1.INPUT_FORMAT, s1.OUTPUT_FORMAT, s1.LOCATION from TBLS t1 inner join SDS s1 on s1.SD_ID = t1.SD_ID where t1.TBL_NAME = 'tb_test'\G *************************** 1. row *************************** OWNER: hadoop TBL_NAME: tb_test TBL_TYPE: MANAGED_TABLE INPUT_FORMAT: org.apache.hadoop.mapred.TextInputFormat OUTPUT_FORMAT: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat LOCATION: hdfs://ip-xxx-xx-xx-xxx.ec2.internal:8020/user/hive/warehouse/tb_test 1 row in set (0.23 sec) mysql> select t1.OWNER, t1.TBL_NAME, c1.COLUMN_NAME, c1.TYPE_NAME from TBLS t1 inner join SDS s1 on s1.SD_ID = t1.SD_ID inner join COLUMNS_V2 c1 on c1.CD_ID = s1.CD_ID where t1.TBL_NAME = 'tb_test'; +--------+----------+-------------+-----------+ | OWNER | TBL_NAME | COLUMN_NAME | TYPE_NAME | +--------+----------+-------------+-----------+ | hadoop | tb_test | col1 | string | | hadoop | tb_test | col2 | bigint | +--------+----------+-------------+-----------+ 2 rows in set (0.22 sec)Observação: substitua example-rds-db-instance-endpoint pelo endpoint da instância de banco de dados do Amazon RDS, example-rds-primary-user pelo nome de usuário principal do Amazon RDS e example-rds-primary-password pela senha principal do Amazon RDS.
Solucionar erros de reinicialização do hive-hcatalog-server
Ao tentar reiniciar o hive-hcatalog-server, você pode receber o seguinte erro ou similar:
"2020-08-20T14:18:50,750 WARN [main] org.apache.hadoop.hive.metastore.HiveMetaStore - Tentando criar o banco de dados padrão novamente após o erro: Não é possível abrir uma conexão de teste com o banco de dados fornecido. JDBC url = jdbc:mysql://mysql-hive-meta.########.us-east-1.rds.amazonaws.com:3306/hive?createDatabaseIfNotExist=true&useSSL=true&serverSSlCert=/home/hadoop/global-bundle.pem, username = masteruser. Encerrando o pool de conexões (defina lazyInit como true se você espera iniciar o banco de dados após a aplicação). Exceção original: ------java.sql.SQLException: O host "172.31.41.187" está bloqueado devido a muitos erros de conexão; desbloqueie com 'mysqladmin flush-hosts'"
Esse erro ocorre quando a instância de banco de dados do Amazon RDS para MySQL bloqueia o nó primário do cluster do Amazon EMR como precaução de segurança. Para resolver esse erro, realize as etapas a seguir:
- Conecte-se a uma máquina local diferente ou a uma instância do Amazon Elastic Compute Cloud (Amazon EC2) que tenha a ferramenta mysqladmin instalada.
- Limpe o nó primário da instância de banco de dados:
Observação: substitua example-rds-primary-username pelo nome de usuário principal do Amazon RDS e example-rds-primary-password pela senha principal do Amazon RDS.mysqladmin -h example-rds-db-instance-endpoint -P 3306 -u example-rds-primary-username -p flush-hosts Enter password: example-rds-primary-password - Reinicie o hive-hcatalog-server.
Informações relacionadas
- Tópicos
- Analytics
- Tags
- Amazon EMR
- Idioma
- Português
Vídeos relacionados


Conteúdo relevante
- feita há 8 meses
- feita há 10 meses