Hive: três métodos de implantação para metadados

Três métodos de implantação para metadados do Hive

Metabase Derby

1. Diagrama esquemático do modo incorporado:
Insira a descrição da imagem aqui

2. Banco de dados Derby:
o banco de dados Derby é um banco de dados na memória escrito em Java, que compartilha uma JVM com o aplicativo em modo incorporado, e o aplicativo é responsável por iniciar e parar.

  1. Inicialize o banco de dados Derby
    1) No diretório raiz do hive, use o comando schematool no diretório /bin para inicializar o metadatabase Derby que vem com o hive
    [atguigu@hadoop102 hive]$ bin/schematool -dbType derby -initSchema

2) Ao executar o banco de dados de metadados de inicialização acima, você descobrirá que há um problema de conflito de pacote jar. O fenômeno é o seguinte: (
Este pacote jar existe tanto no hadoop quanto no hive, principalmente no hadoop subjacente, e alterado para hive)
SLF4J : Ligação encontrada em [jar :file:/opt/module/hive/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Ligação encontrada em [jar:file :/opt/module/ hadoop-3.1.3/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]

3) Para resolver o problema de conflito de jar, basta renomear log4j-slf4j-impl-2.10.0.jar no diretório /lib do hive
[atguigu@hadoop102 hive]$ mv lib/log4j-slf4j-impl-2.10.0.jar lib/ log4j-slf4j-impl-2.10.0.back

4. Iniciar o Hive
1) Execute o comando hive no diretório /bin para iniciar o hive e conectar-se ao hive por meio de cli
[atguigu@hadoop102 hive]$ bin/hive

2) Usando o Hive

hive> show databases;                                      // 查看当前所有的数据库
OK
default
Time taken: 0.472 seconds, Fetched: 1 row(s)
hive> show tables;                                         // 查看当前所有的表
OK
Time taken: 0.044 seconds
hive> create table test_derby(id int);            // 创建表test_derby,表中只有一个字段,字段类型是int
OK
Time taken: 0.474 seconds
hive> insert into test_derby values(1001);                 // 向test_derby表中插入数据
Query ID = atguigu_20211018153727_586935da-100d-4d7e-8a94-063d373cc5dd
Total jobs = 3
……
Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 1
……
Stage-Stage-1: Map: 1  Reduce: 1   Cumulative CPU: 6.19 sec   HDFS Read: 12769 HDFS Write: 208 SUCCESS
Total MapReduce CPU Time Spent: 6 seconds 190 msec
OK
Time taken: 31.901 second
hive> select * from test_derby;                                // 查看test_derby表中所有数据
OK
1001
Time taken: 0.085 seconds, Fetched: 1 row(s)
hive> exit;
  1. Há apenas um processo JVM
    no modo incorporado. No modo incorporado, quando você executa o comando jps –ml na linha de comando, você pode ver apenas um processo CliDriver.
    [atguigu@hadoop102 hive]$ jps –ml
    7170 sun.tools.jps.Jps -ml
    6127 org.apache.hadoop.util.RunJar /opt/module/hive/lib/hive-cli-3.1.2.jar org. apache.hadoop.hive.cli.CliDriver

6. Problemas com o banco de dados de metadados que acompanha o Hive
Demonstre o problema de usar o Derby como banco de dados de metadados:
abra outra janela de sessão para executar o Hive e monitore o arquivo hive.log no diretório /tmp/atguigu ao mesmo tempo. seguinte mensagem de erro será observada.
Causado por: ERRO XSDB6: Outra instância do Derby pode já inicializar o banco de dados /opt/module/hive/
metastore_db
.iapi.error.StandardException.newException(Fonte desconhecida)
em org.apache.derby.impl.store.raw.data. BaseDataFileFactory.privGetJBMSLockOnDB(Unknown Source)
em org.apache.derby.impl.store.raw.data.BaseDataFileFactory.run(Unknown Source)
...
O banco de dados de metadados usado pelo Hive por padrão é derby e o método de implantação é incorporado. Depois abrindo o Hive, o banco de dados de metadados será exclusivo e os dados não serão compartilhados com outros clientes. Se você quiser operar em múltiplas janelas, um erro será relatado. A operação é relativamente limitada. Por esse motivo, o Hive oferece suporte ao uso do MySQL como banco de dados de metadados, que pode oferecer suporte a operações em várias janelas.

Metabase Mysql

  1. Diagrama esquemático do modo de conexão direta:
    Insira a descrição da imagem aqui

2. Instalação e implantação do MySQL
1) Verifique se o MySQL foi instalado no sistema atual. Se existir, use o seguinte comando para removê-lo. Se não existir, ignore-o. (Certifique-se de executar esta etapa)
[atguigu@hadoop102 hive]$ rpm -qa|grep mariadb
mariadb-libs-5.5.56-2.el7.x86_64 //Se existir, desinstale-o através do seguinte comando
[atguigu@hadoop102 hive]$ sudo rpm -e --nodeps mariadb-libs //Use este comando para desinstalar o mariadb

2) Carregue o pacote de instalação do MySQL para o diretório /opt/software
[atguigu@hadoop102 software]$ ll
uso total 528384
-rw-r–r–.1 root root 609556480 21 de março 15:41 mysql-5.7.28-1 . el7.x86_64.rpm-bundle.tar

3) Descompacte os recursos do pacote de instalação do MySQL para o diretório mysql_jars recém-criado em /opt/software
[atguigu@hadoop102 software]$ mkdir /opt/software/mysql_jars
[atguigu@hadoop102 software]$ tar -xf /opt/software/mysql- 5.7 .28-1.el7.x86_64.rpm-bundle.tar -C /opt/software/mysql_jars

4) Verifique os arquivos descompactados no diretório mysql_jars como segue:
[atguigu@hadoop102 software]$ cd /opt/software/mysql_jars
[atguigu@hadoop102 mysql_jars]$ ll
uso total 595272
-rw-r–r–. 1 atguigu atguigu 45109364 9 30 de setembro de 2019 mysql-community-client-5.7.28-1.el7.x86_64.rpm
-rw-r–r–.1 atguigu atguigu 318768 30 de setembro de 2019 mysql-community-common-5.7.28-1. el7. x86_64.rpm
-rw-r–r–. 1 atguigu atguigu 7037096 30 de setembro de 2019 mysql-community-devel-5.7.28-1.el7.x86_64.rpm
-rw-r–r–. 1 atguigu atguigu 49329100 setembro 30 2019 mysql-community-embedded-5.7.28-1.el7.x86_64.rpm
-rw-r–r–.1 atguigu atguigu 23354908 30 de setembro de 2019 mysql-community-embedded-compat-5.7.28-1.el7 . x86_64.rpm
-rw-r–r–.1 atguigu atguigu 136837816 30 de setembro de 2019 mysql-community-embedded-devel-5.7.28-1.el7.x86_64.rpm
-rw-r–r–. 1 atributo atributo 4374364 9 30 de abril de 2019 mysql-community-libs-5.7.28-1.el7.x86_64.rpm
-rw-r–r–. 1 atguigu atguigu 1353312 930 de maio de 2019 mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm
-rw-r–r–. 1 atguigu atguigu 208694824 930 de maio de 2019 mysql-community-server-5.7.28-1.el7.x86_64.rpm
-rw-r–r–. 1 atguigu atguigu 133129992 30/09/2019 mysql-community-test-5.7.28-1.el7.x86_64.rpm

5) Execute a instalação rpm no diretório /opt/software/mysql_jars e execute
sudo rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm estritamente de acordo com a seguinte ordem
sudo rpm -ivh mysql -community-libs -5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-client-5.7 .28-1 .el7.x86_64.rpm
sudo rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm
Nota: Haverá problemas com a instalação mínima do Linux.

6) Se houver arquivos no caminho de armazenamento de dados do mysql, você precisará excluí-los todos. O endereço do caminho de armazenamento é o valor correspondente ao parâmetro datadir no arquivo /etc/my.cnf: ·Veja o valor de datadir: [atguigu@
hadoop102
etc ]$ vim my.cnf
……
[mysqld]
datadir=/var/lib/mysql
·Exclua todo o conteúdo do diretório /var/lib/mysql:
[atguigu@hadoop102 hive]$ cd /var/lib /mysql
[root@ hadoop102 mysql]$ sudo rm -rf ./* //Certifique-se de prestar atenção ao local de execução do comando

7) Inicialize o banco de dados (esta é a inicialização após a instalação do banco de dados mysql), que criará o banco de dados interno e as tabelas mysql.
[módulo atguigu@hadoop102]$ sudo mysqld --initialize --user=mysql

8) Após a conclusão da inicialização, verifique a senha gerada temporariamente do usuário root, que também é a senha para efetuar login no msql pela primeira vez
[módulo atguigu@hadoop102]$ sudo cat /var/log/mysqld.log
2021 -10-18T08:50:32.172049Z 0 [Aviso] TIMESTAMP com valor DEFAULT implícito está obsoleto. Use a opção de servidor --explicit_defaults_for_timestamp (consulte a documentação para obter mais detalhes). 2021-10-18T08:50:
32.364322Z 0 [Aviso] InnoDB: Novos arquivos de log criados, LSN=45790
2021 -10-18T08:50:32.397350Z 0 [Aviso] InnoDB: Criando tabelas de sistema de restrição de chave estrangeira.
2021-10-18T08:50:32.453522Z 0 [Aviso] Nenhum UUID existente foi encontrado, então assumimos que esta é a primeira vez que este servidor foi iniciado. Gerando um novo UUID: 73e2af3c-2ff0-11ec-af41-000c29830057.
2021-10-18T08:50:32.454765Z 0 [Aviso] A tabela Gtid não está pronta para ser usada. A tabela 'mysql.gtid_executed' não pode ser aberta.
2021-10-18T08:50:32.978960Z 0 [Aviso] O certificado CA ca.pem é autoassinado.
2021-10-18T08:50:33.314317Z 1 [Nota] Uma senha temporária é gerada para root@localhost: OU+*c.C9FZy;

9) Inicie o serviço MySQL
[módulo atguigu@hadoop102]$ sudo systemctl start mysqld

10) Faça login no banco de dados MySQL
[módulo atguigu@hadoop102]$ mysql -uroot -p
Digite a senha: (sua senha temporária) //Digite a senha gerada temporariamente

11) A senha do usuário root deve ser modificada primeiro, caso contrário será reportado um erro ao realizar outras operações
mysql> set password = password ("nova senha");

12) Modifique o usuário root na tabela user na biblioteca mysql para permitir que qualquer IP se conecte ao
mysql> update mysql.user set host='%' where user='root';

13) Atualize para tornar a modificação efetiva
dos privilégios mysql> flush;

3. Configure o banco de dados de metadados Hive como MySql

  1. Copiar driver
    Hive precisa armazenar informações de metadados no banco de dados de metadados mysql e precisa usar JDBC para se conectar ao MySQL. Portanto, copie o driver JDBC do MySQL para o diretório lib do Hive para chamar o Hive.
    [software atguigu@hadoop102]$ cp mysql-connector-java-5.1.37.jar /opt/module/hive/lib

2) Configure o Metastore para MySql e
crie um novo arquivo hive-site.xml no diretório /opt/module/hive/conf (a configuração no novo arquivo de configuração substituirá a configuração padrão) [ atguigu@hadoop102
hive]$ vim conf /hive-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <!-- jdbc连接的URL -->
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://hadoop102:3306/metastore?useSSL=false</value>
</property>
    <!-- jdbc连接的Driver-->
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
</property>
    <!-- jdbc连接的username-->
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
    </property>
    <!-- jdbc连接的password -->
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>123456</value>
</property>
    <!-- Hive默认在HDFS的工作目录 -->
    <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/user/hive/warehouse</value>
    </property>
   <!-- Hive元数据存储的验证 -->
    <property>
        <name>hive.metastore.schema.verification</name>
        <value>false</value>
    </property>
    <!-- 元数据存储授权  -->
    <property>
        <name>hive.metastore.event.db.notification.api.auth</name>
        <value>false</value>
    </property>
</configuration>

4.Hive inicializa o banco de dados de metadados.
Crie um metastore de banco de dados para o Hive para armazenar metadados no MySQL e, em seguida, crie uma tabela por meio da operação do banco de dados de metadados de inicialização do Hive. 1) Faça login no MySQL [
atguigu
@hadoop102 module]$ mysql -uroot -pyour senha

2) Crie um novo banco de dados de metadados Hive
mysql> create database metastore;
mysql> quit;

3) Inicialize o banco de dados de metadados do Hive
[atguigu@hadoop102 hive]$ bin/schematool -initSchema -dbType mysql -verbose

5. Iniciar o Hive
1) Iniciar o Hive
[atguigu@hadoop102 hive]$ bin/hive

2) Use Hive
hive> show databases; // Visualiza todos os bancos de dados
hive> show tabelas; // Visualiza todas as tabelas. A tabela test_derby que acabou de ser criada existe? Por que?
hive> create table test_mysql (id int); // Cria a tabela test_mysql, um campo é id, o tipo é int
hive> insert into test_mysql values(1002); // Insere dados na tabela test_mysql
hive> select * from test_mysql; // Ver tabela test2

3) Abra outra janela para testar se o acesso de cliente simultâneo é suportado
[atguigu@hadoop102 hvie]$ bin/hive
hive> showtables;
hive> select * from test_mysql;

5. Problema no modo de conexão direta:
No ambiente de produção da empresa, o ambiente de rede será muito complexo. O ambiente onde o mysql está localizado pode estar isolado da rede e não pode ser acessado diretamente. Além disso, a conta root e a senha do mysql serão expostas neste modo. Existe risco de vazamento. Riscos de segurança de dados.
Pensando: Ao implantar o hive no hadoop103, o banco de dados de metadados ainda usa a instância Mysql do hadoop102. Como implementar isso?

Servidor MetaStore de Metadados

1. Diagrama esquemático do modelo de serviço de metadados
Insira a descrição da imagem aqui

2. Modo de serviço de metadados:
inicie o serviço MetaStore no lado do servidor e o cliente use o protocolo Thrift para acessar o banco de dados de metadados por meio do serviço MetaStore.
O método de acesso do serviço de metadados é mais adequado para implantação e uso em um ambiente de produção. Comparado com o método incorporado, este método é mais flexível. (Cross redes, vários idiomas e plataformas cruzadas)

3. Use Mysql como banco de dados de metadados e implante o serviço de metadados
1) Primeiro, configure o banco de dados de metadados hive como Mysql
[atguigu@hadoop102 hive]$ vim conf/hive-site.xml

2) Adicione as seguintes informações de configuração ao arquivo hive-site.xml

    <!-- 指定存储元数据要连接的地址 -->
    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://hadoop102:9083</value>
</property>

Nota: Depois de configurar este parâmetro, o serviço de metadados deve ser iniciado antes de iniciar o hive. Caso contrário, o hive não poderá se conectar ao serviço de metadados após iniciar.

2) Iniciando o serviço de metadados
[atguigu@hadoop102 hive]$ bin/hive --service metastore
2021-10-18 18:22:24: Iniciando o Hive Metastore Server
Nota: A janela não pode mais ser operada após a inicialização e um novo shell precisa ser aberto. Faça outras operações na janela
1) Inicie o hive, verifique a tabela e os dados da tabela e veja se é uma tabela no banco de dados Mysql.
2) Inicie o hive em outra janela e teste se vários clientes podem se conectar e operar ao mesmo tempo.
Pensando: como implantar o hive usando o modo de serviço de metadados no hadoop103?

Acho que você gosta

Origin blog.csdn.net/weixin_45427648/article/details/131819877
Recomendado
Clasificación