Hadoop基础知识-04

目录

一、Apache Hive介绍

(1)Hive概述

(2)分布式SQL计算的核心组件

(3)Hive的基础架构

二、Apache Hive部署

(1)在Vmware Workstation上部署Hive

(2)在阿里云上部署Hive

(3)在Ucloud上部署Hive

三、Apache Hive初体验

四、Apache Hive的客户端

(1)HiveServer2&Beeline

(2)DataGrip&DBeaver


一、Apache Hive介绍

(1)Hive概述

        对数据进行统计分析可以使用两类工具,一类是编程语言(python、java),一类是SQL语言。从目前来讲,SQL在数据统计分析方面更具有优势,但是前面所学的Hadoop MapReduce分布式计算框架是基于编程语言的,不支持SQL。Apache Hive是一款分布式SQL计算工具,它可以实现将SQL语句翻译成MapReduce程序运行,既程序编写时用简单的SQL写,执行时是MapReduce程序,因此Hive就像翻译官一样,为用户提供了分布式SQL计算的能力。

        问题:为什么SQL在数据统计分析方面有优势呢?

        回答:使用MapReduce等不支持SQL语言的工具时,需要掌握复杂的java,python等编程语言的语法,且编程语言实现复杂查询逻辑开发难度大。使用SQL简单,易上手,逻辑清晰。

        总结:分布式SQL计算就是以分布式的形式,执行SQL语句,进行数据统计分析

                   MapReduce开发:程序员写复杂的java、python代码---->得到数据分析的结果

                   Hive开发:程序员写简单的SQL代码------>得到和上述一致的数据分析结果

                   底层都是MapReduce在运行,但Hive的使用更简单

(2)分布式SQL计算的核心组件

        假设让我们设计Hive这款软件,需要实现哪些功能呢?

                支持用户编写SQL语句

                自动将SQL转换为MapReduce程序并提交给YARN运行

                处理HDFS上的结构化数据(表格)

        例如有如下结构化文本数据存储在HDFS中,现在要使用SQL语言实现城市人口计数的功能。

         假设程序员写了一句SQL:select city, count(*) from t_user group by city;  在将其翻译成MapReduce程序时,会遇到那些问题呢?

                数据文件在哪里?   # 写SQL时,只会给出从t_user表中查找,并没有具体给出

                                                t_user文件在HDFS的什么地方。

                那些列可以作为city使用?    # 在HDFS上存储的表格数据,只会记录表格的内容,其他

                                                             信息不会记录。

                city列是什么数据类型?

                使用什么符号作为列的分隔符?    # 没有指定分隔符,计算机并不认识“,”,它会将“,”

                                                                      作为文本的内容去处理

        想要实现SQL语句向MapReduce程序的转化,不单单要提供SQL语句,上述问题所需的信息都必须要额外提供。因此我们需要额外记录一些信息,并将这些信息保存起来,方便后续使用。

         首先将HDFS中的文件与数据库中创建的表t_user建立映射关系,然后记录HDFS文件的具体位置信息hdfs://data/china_user.txt,最后将这些信息保存在数据库中,这些额外记录的信息我们将其称为元数据

        元数据管理的功能就是对数据位置信息,数据结构信息,数据描述信息进行记录,它是分布式SQL计算的一个核心组件。

        元数据管理提供了在SQL向MapReduce转换过程中的辅助信息,显然只有元数据管理是不够的,目前只是准备工作做完了,还缺少一个能实现SQL到MapReduce转换的解析器------SQL解析器------分布式计算的核心组件。

        SQL解析器功能:

                SQL分析,检查其语法。

                SQL到MapReduce程序的转换

                提交MapReduce程序在YARN中运行并收集执行结果

         总结:分布式SQL计算的核心组件是:

                元数据管理:帮助记录各种元数据

                SQL解析器:完成SQL到MapReduce程序的转换

(3)Hive的基础架构

        Hive作为一款很火的分布式SQL计算工具,同样由元数据管理组件,SQL解析器组件以及其他一些小功能组件组成。

        1)红框为元数据管理组件

        Hive提供了Metastore服务进程实现元数据的记录,并将记录保存到数据库中。

        2)黄框为SQL解析器

        结合元数据和SQL代码,完成语法解析、执行计划编排、最终代码优化、并将转换后的程序提交到YARN中运行。

        3)篮框为一些小功能组件(用户接口)

        提供命令行接口,使用户可以在命令行中实现SQL开发;提供WEB接口,使用户在WEB上完成对Hive的控制。这些小功能组件主要用于方面用户去使用Hive的一系列工具。

        注意:Hive框架是单机运行的,只需要在一台服务器上部署即可,经Hive产生的MapReduce程序的运行是分布式的。

二、Apache Hive部署

规划:

(1)在Vmware Workstation上部署Hive

        1)安装MySQL

        rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

        rpm -Uvh http://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm

        yum -y install mysql-community-server

        systemctl start mysqld

        systemctl enable mysqld

        systemctl status mysqld

        grep 'temporary password' /var/log/mysqld.log

        mysql -uroot -p

        set global validate_password_policy=LOW;

        set global validate_password_length=4;

        ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

        grant all privileges on *.* to root@"IP地址/%" identified by '123456' with grant option;

        flush privileges;

        exit

        2)配置Hadoop代理

        Hive的运行依赖于Hadoop的HDFS、MapReduce和YARN,在运行过程中会涉及到HDFS文件系统的访问,因此需要设置Hadoop的代理用户,既设置hadoop用户允许那些用户代理。只有这样Hive才有权限去访问HDFS。

        在core-site.xml中增加如下内容,并分发到其他节点,且重启HDFS:

            #配置该hadoop用户允许通过代理访问的主机节点
            <property>
                <name>hadoop.proxyuser.hadoop.hosts</name>
                <value>*</value>
            </property>
            # 配置该hadoop用户允许代理的用户所属组
            <property>
                <name>hadoop.proxyuser.hadoop.groups</name>
                <value>*</value>
            </property>

        3)Hive安装

        # 下载Hive安装包

        http://archive.apache.org/dist/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz

        tar -zxvf apache-hive-3.1.3-bin.tar.gz -C /export/server/

        ln -s /export/server/apache-hive-3.1.3-bin /export/server/hive

        # 下载MySQL驱动包

        https://repo1/maven.org/maven2/mysql/mysql-connector-java/5.1.34/mysql-connector-

        java-5.1.34.jar

        mv mysql-connector-java-5.1.34.jar /export/server/hive/lib/

        4)Hive配置

        在Hive的conf目录中(都是一些模板文件),新建hive-env.sh文件(conf文件中会有hive-env.sh.template模板文件,将其改名即可mv hive-env.sh.template hive-env.sh),并写入:

        export HADOOP_HOME=/export/server/hadoop

        export HIVE_CONF_DIR=/export/server/hive/conf

        export HIVE_AUX_JARS_PATH=/export/server/hive/lib

        在Hive的conf目录中,新建hive-site.xml文件,并写入:

         Hive中记录的元数据会保存到MySQL数据库中,因此Hive会与MySQL建立联系

                javax.jdo.option.ConnectionURL   :    设置MySQL的连接地址

                javax.jdo.option.ConnectionDriverName    :    指明MySQL驱动

                javax.jdo.option.ConnectionUserName    :     连接MySQL的账号与密码

                javax.jdo.option.ConnectionPassword

                hive.metastore.uris     :     设置Hive的元数据服务绑定

        上述配置完成后,需要初始化Hive所需的元数据库(与HDFS的第一次启动一样需要初始化NameNode)

        create database hive charset utf8;

        cd /export/server/hive

        bin/schematool -initSchema -dbType mysql -verbos

        初始化完成后,会在MySQL的hive库中新建74张元数据管理的表。

        5)启动Hive

        chown -R hadoop:hadoop apache-hive-3.1.3-bin hive    

        su - hadoop

        mkdir /export/server/hive/logs

        # 启动元数据管理服务

        hive  --service metastore    # 前台启动

        nohup hive --service metastore >> logs/metastore.log 2>&1 &     # 后台启动

        # 启动客户端(启动Hive)

        Hive Shell方式(可以直接写SQL) :   bin/hive

        Hive ThriftServer方式(不能直接写SQL,需要外部客户端连接使用): bin/hive --service

                                                                                                                        hiveserver2

(2)在阿里云上部署Hive

        阿里云平台上会提供关系型数据库服务RDS(云数据库),因此我们无需手动搭建MySQL服务,只需要花钱租一个云数据库即可。

         等待一会MySQL云数据库就创建好了。

        接下来就可以在云上配置Hive了,步骤与在虚拟机上的一样,不同的是在hive-site.xml中配置MySQL连接地址和账户密码的时候,需要和创建的云数据库一致。

        查看已创建的云数据库内网地址:

         配置Hive:

        hive-site.xml文件:        

         配置好后需要初始化MySQL云数据库,但是该数据库并不在node11服务器上,直接使用mysql -uroot -p无法登录,因此需要在node11上安装MySQL的客户端(类似与pycharm),然后利用云数据库的内外地址进行远程连接。

         yum install -y mysql

        mysql -uroot -p -h 内网地址

        进入到MySQL云数据库后就可以初始化了。后续操作与虚拟机一样。

(3)在Ucloud上部署Hive

        在Ucloud云平台上有UDB(Ucloud database)与阿里云的RDS一样。        

        利用该IP地址实现远程连接(同阿里云中的内网地址),后续操作与阿里云一样

三、Apache Hive初体验

        首先进入到Hive的Shell环境中(在Hive Shell中对中文不太友好,且写SQL语句极其不方便)

        create table test(id int, name string, gender string);

        进入Hive后默认会有一个default数据库,如果我们的操作没有指定数据库,系统会自动在

default数据库中执行。

        insert into test values(1, '王力宏', '男');

        在mysql中执行上述插入语句几乎一瞬间就能完成,但是在Hive中执行怎么简单的插入语句却用了很长时间。

         可以看出在Hive上,SQL语句是以MapReduce程序的方式运行的,上述insert语句首先经Hive转换为MapReduce程序,然后将其提交到YARN中运行,因此运行起来会很慢很慢。

        insert into test values(2, '周杰伦', '男'),(3, '林俊杰', '女');

        在Hive中不是所有的SQL都会先转化为MapReduce,然后在执行,太简单的SQL会直接输出,例如全表查询:

        select * from test;

        但是只要SQL语句中有计算过程稍微复杂点就会走MapReduce程序例如:

        select gender, count(*) as cnt from test group by gender;

        在YARN的WEB UI界面我们也可以看到上述运行的MapReduce程序(node11:8088)

         注意:看起开Hive在运行时使用的是default数据库中test表的数据,实际上test表的数据会自动存储到HDFS文件系统的/user/hive/warehouse目录下,Hive使用的数据是HDFS文件系统中的数据。

         SQL在运行过程中使用的元数据保存在MySQL数据库的hive数据库的74个表中,这些表分别记录了各种不同的元数据。

四、Apache Hive的客户端

(1)HiveServer2&Beeline

        前面我们提到Hive的启动方式有两种:

                bin/hive  # Hive Shell方式启动Hive,可以直接写SQL

                bin/hive --service hiveserver2 # 启动hiveserver2服务,不能直接写SQL

                nohup bin/hive --service hiveserver2 >> logs/hiveserver2.log 2>&1 &

        Hiveserver2是Hive内置的一个ThriftServer服务,提供Thrift端口供其他客户端连接Hive。Hiveserver2就像一个中介一样,将客户端与Hive建立联系。

       例如:Hive内置的beeline客户端工具(命令行工具),第三方的图形化SQL工具DataGrip,DBeaver,Navicat等都可以通过Hiveserver2服务连接到Hive。        

        步骤:

                1)后台启动metastore服务,后台启动hiveserver2服务,启动完成后输入jps会看到两个

                Runjar进程17878为metastore服务,19687为hiveserver2服务

                 netstat -anp|grep 10000

                 10000端口就是hiveserver2提供的Thrift端口,客户端可以通过该端口连接Hive。

                2)启动beeline

                beeline同样是Hive内置的,因此直接运行/expoert/server/hive/bin/beeline命令就可以

                启动它

                 3)连接10000端口,即连接hiveserver2服务

                !connect jdbc:hive2://node11:10000

                输入登录用户hadoop

                连接成功:(之后就可以在beeline中写SQL语句了)

(2)DataGrip&DBeaver

        1)DataGrip连接Hive

                首先开启metastore与hiveserver2服务

                打开DataGrip,新建一个project                

         2)DBeaver

                首先开启metastore与hiveserver2服务

                打开DBeaver                

                添加新库,DBeaver内置的库有问题

                 测试连接,然后确定,就连接成功了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值