Hive简介与搭建

Hive

hive的简介

什么是Hive?

  • Hive 是基于 Hadoop 的一个数据仓库工具
  • 可以将结构化的数据文件映射为一张数据库表
  • 并提供类 SQL 查询功能, Hive 底层是将 SQL 语句转换为 MapReduce 任务运行

为什么 使用 Hive?

  • 直接使用 Hadoop 面临的问题
    (1)人员学习成本太高
    (2)项目周期要求太短
    (3)MapReduce 实现复杂查询逻辑开发难度太大
  • Hive 优势
    (1)操作接口采用类 SQL 的语法,提供快速开发的能力
    (2)避免写 MapReduce,减少开发人员的学习成本
    (3)功能扩展很方便

Hive 架构

Hive 架构图
在这里插入图片描述

  • 1,用户接口
    CLI:Shell 终端命令行,最常用(学习、调试、生产)
    JDBC/ODBC:是 Hive 的 Java 实现,与传统数据库 JDBC 类似, 用户(开发员、运维人员) 通过这连接至 Hive Server
    Web UI:通过浏览器访问 Hive
  • 2,Thrift Server(跨语言服务)
    Thrift 是 Facebook 开发的一个软件框架,可以用来进行可扩展且跨语言的服务的开发, Hive 集成了该服务,能让不同的编程语言调用 Hive 的接口。
  • 3,Metastore(元数据存储)
    • 元数据是什么?
      通俗的讲,就是存储在 Hive 中的数据的描述信息。
    • Hive 的元数据包括什么?
      表的名字、表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
    • 默认存在哪里?
      MetaStore 默认存在自带的 Derby 数据库中
      缺点:不适合多用户操作,数据存储目录不固定。数据库跟着 Hive 走,极度不方便管理。
    • 解决方案
      通常将其存在我们自己创建的 MySQL 库中(本地 或 远程)
  • 4,解析器(驱动Driver)
    • 组成结构
      编译器(Compiler)
      优化器(Optimizer)
      执行器(Executor)

      Driver 组件完成 HQL 查询语句从词法分析、语法分析、编译、优化以及逻辑执行计划的生成。生成的逻辑执行计划存储在 HDFS 中,并随后由 MapReduce 调用执行 。

      • 执行流程
        (1)输入一条 HQL 查询语句(select * from table)
        (2)解析器对这条 HQL 语句进行语法分析
        (3)编译器对这条 HQL 语句生成 HQL 的执行计划
        (4)优化器生成最佳的 HQL 的执行计划
        (5)执行器执行这条最佳 HQL 语句

        HiveQL 通过命令行或者客户端提交,经过 Compiler 编译器,运用 MetaStore 中的元数据进行类型检测和语法分析,生成一个逻辑方案(logical plan),然后通过优化处理,产生一个 MapReduce 任务。

Hive与Hadoop的关系

在这里插入图片描述

Hive 依赖 HDFS 存储数据,利用 MapReduce 查询数据,所以说 Hive 是基于 Hadoop 的一个数据仓库工具,实质就是一款基于 HDFS 的 MapReduce 计算框架。

Hive 和 RDBMS 的对比

在这里插入图片描述
总结:Hive 具有 SQL 数据库的外表,但应用场景完全不同, Hive 适合用来做批量海量数据统计分析,也就是数据仓库。

Hive 的数据存储

  • 1,数据存储位置
    HDFS

  • 2,数据格式
    没有定义专门的数据存储格式,数据格式可由用户指定,只需要在创建表的时候指定三个属性:
    (1)列分隔符:空格,’’\t"等
    (2)行分隔符:"\n"
    (3)读取文件数据的方法

    TextFile 为默认格式,存储方式为行存储。
    SequenceFile 二进制文件,以<key,value>的形式序列化到文件中,存储方式为行存储。
    RCFile 存储方式为按行分块,每块按照列存储。

  • 数据模型

    db:数据库在 HDFS 中表现为 ${hive.metastore.warehouse.dir} 目录下一个文件夹
    table:普通表(内部表)在 HDFS 中表现所属 db 目录下一个文件夹
    external table:外部表与 table 类似,不过其数据存放位置可以在任意指定路径
    partition:分区在 HDFS 中表现为 table 目录下的子目录
    bucket:分桶在 HDFS 中表现为同一个表目录下根据 hash 散列之后的多个文件,会根据不同的文件把数据放到不同的文件中

Hive 环境搭建

1,Hive 三种运行模式

  • (1)内嵌模式
    元数据保存在本地内嵌的 Derby 数据库,使用 Hive 最简单的方式
    这种方式缺点也比较明显,因为一个内嵌的 Derby 数据库每次只能访问一个数据文件,这也就意味着它不支持多会话连接。并且数据存储目录不固定,数据库跟着 Hive 走,极度不方便管理。

  • (2)本地模式
    元数据保存在本地独立的数据库中(一般是 MySQL)
    多用户的模式,允许多个用户连接到一个数据库

    前提:每个用户必须要有对 MySQL 的访问权利,即用户需要知道 MySQL 的用户名和密码。

    这种方式一般作为公司同时使用Hive

  • (3)远程模式
    此模式应用于 Hive 客户端较多的情况,把 MySQL 数据库独立出来,将元数据保存在远程独立的数据库中(一般是 MySQL)
    < 避免了在每个客户端都安装 MySQL 服务从而造成冗余浪费的情况 >
    适用于多用户的模式

    无需知道 MySQL 的用户名和密码

Hive 安装

1,前期准备

  • (1)保证 Hadoop 集群搭建成功并启动

  • (2)下载 Hive 安装包并上传至 Linux 服务器
    下载地址:https://hive.apache.org/

  • (3)解压 Hive 安装包

      tar -zxvf apache-hive-1.2.1-bin.tar.gz
    
  • (4)配置环境变量
    编辑配置文件,使用命令:

      vim /home/shiny/.bash_profile
    

    将以下内容添加到配置文件的底部:

      export HIVE_HOME=/home/shiny/Desktop/software/apache-hive-1.2.1-bin
      export PATH=$PATH:$HIVE_HOME/bin
    

    让配置文件立即生效:

      source /home/shiny/.bash_profile
    

验证 Hive,Hive 没有提供 hive –version 这种方式查看版本,所以使用如下命令:

hive --help

2,三种运行模式

  • 1,内嵌模式安装
    (1)切换到 HIVE_HOME/conf 目录下,修改 hive-env.sh 配置文件:

      [theone@hadoop01 conf]$ cp hive-env.sh.template hive-env.sh               
      [theone@hadoop01 conf]$ vim hive-env.sh
    

    (2)在 hive-env.sh 中添加 Hadoop 安装目录:
    在这里插入图片描述
    (3)替换 Hadoop 安装包中的 jline
    Hadoop(%HADOOP_HOME%/share/hadoop/yarn/lib)集群的 jline-0.9.94.jar 包版本过低,替换成 %HIVE_HOME%/lib 中的 jline-2.12.jar 包即可。
    (4)使用 Hive 的三种连接方式之一:CLI 启动 Hive

      [theone@hadoop01 conf]$ hive
    

    (5)在当前目录生成一个 derby 文件和一个 metastore_db 目录,这种存储方式的弊端是在同一个目录下同时只能有一个 Hive 客户端能使用数据库,否则会提示如下错误(这是一个很常见的错误):
    在这里插入图片描述

  • 2,本地模式安装

    • 1,安装 MySQL(root用户安装)
      (1)检查 是否安装过 MySQL,若有则卸载:
      查找:rpm -qa | grep -i mysql
      卸载:rpm -e --nodeps mysql-libs-5.1.73-7.el6.x86_64
      在这里插入图片描述

    • (2)删除老版本 MySQL 的开发头文件和库:

        rm -rf /usr/lib/mysql
        rm -rf /usr/include/mysql
        rm -f /etc/my.cnf
        rm -rf /var/lib/mysql
      

      注意:卸载后 /var/lib/mysql(数据库文件的存放目录) 中的数据及 /etc/my.cnf(配置文件) 不会删除, 确定没用后就手工删除

    • (3)准备安装包,上传至Linux服务器并解压:

        tar -xvf MySQL-5.6.26-1.linux_glibc2.5.x86_64.rpm-bundle.tar
      
    • (4)安装服务端Server:

       rpm -ivh MySQL-server-5.6.26-1.linux_glibc2.5.x86_64.rpm
      

      开头:
      在这里插入图片描述
      结尾: 在这里插入图片描述

      • (5)安装客户端client:

          rpm -ivh MySQL-client-5.6.26-1.linux_glibc2.5.x86_64.rpm
          		![在这里插入图片描述](https://img-blog.csdnimg.cn/20181118184654708.png)				
        
      • (6)开启MySQL服务:

          service mysql start
        
      • (7)登录MySQL,初始密码在/root/.mysql_secret 这个文件里:
        在这里插入图片描述

      • (8)修改登录密码,使用命令:
        mysql> set PASSWORD=PASSWORD(‘密码’);
        在这里插入图片描述
        修改完成,退出MySQL,重新登录验证密码是否修改成功

      • (9)增加远程登录权限,执行以下三个命令:

          mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'shiny' WITH GRANT OPTION;
          mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'hadoop01' IDENTIFIED BY 'shiny' WITH GRANT OPTION;
          mysql> FLUSH PRIVILEGES;
        

        命令释义: GRANT 权限 1,权限 2,…权限 n ON 数据库名称.表名称 TO 用户名@用户地址 IDENTIFIED BY ‘密码’;当权限 1,权限 2,…权限 n 被 all privileges 或者 all 代替,表示赋予用户全部权限。select, insert, update, delete, create, drop, index, alter, grant,references, reload, shutdown, process, file 等 14 个权限。
        数据库名称.表名称:被*.*代替时,表示赋予用户操作服务器上所有数据库所有表的权限。
        用户名@用户地址 :用户地址可以是 localhost,也可以是 ip 地址、主机名、域名。也可以用’%’(任何主机)地址连接。‘root’@'hadoop01’含义就是允许 root 用户在 hadoop01(Hive 安装主机) 进行远程登陆,并设置 root 用户的密码为 shiny。
        WITH GRANT OPTION:用于对象授权。使用 with grant option,被授权用户可将所获得的权限再次授予其它用户或角色。
        FLUSH PRIVILEGES:告诉服务器重新加载授权表。

        主要是允许xx用户在Hive安装主机上进行远程登陆

  • 2,修改 Hive 配置
    (1)修改 Hive 配置文件,使用命令:

      vim hive-site.xml	
    

    在这里插入图片描述
    (2)将以下内容写入配置文件hive-site.xml中:

      <configuration>
      <property>
      <name>javax.jdo.option.ConnectionURL</name>
      <value>jdbc:mysql://hadoop01:3306/hivedb?createDatabaseIfNotExist=true</value>
      <description>JDBC connect string for a JDBC metastore</description>
      </property>
      <property>
      <name>javax.jdo.option.ConnectionDriverName</name>
      <value>com.mysql.jdbc.Driver</value>
      <description>Driver class name for a JDBC metastore</description>
      </property>
      <property>
      <name>javax.jdo.option.ConnectionUserName</name>
      <value>root</value>
      <description>username to use against metastore database</description>
      </property>
      <property>
      <name>javax.jdo.option.ConnectionPassword</name>
      <value>shiny</value>
      <description>password to use against metastore database</description>
      </property>
      </configuration>
    

    javax.jdo.option.ConnectionURL:JDBC连接字符串
    javax.jdo.option.ConnectionDriverName:JDBC的driver
    javax.jdo.option.ConnectionUserName:登录数据库的用户名
    javax.jdo.option.ConnectionPassword:登录数据库的密码
    (3)将 MySQL 的驱动包(mysql-connector-java-5.1.40-bin.jar)放到 %HIVE_HOME%/lib 目录下
    (4)启动 Hive:

      [theone@hadoop01 conf]$ hive
    
  • 3,远程模式安装

    • (1)简介:

    这种模式需要使用 HIVE_HOME/bin 目录下提供的 beeline+hiveserver2 配合使用才可以。

    其原理就是将 metadata 作为一个单独的服务进行启动。各种客户端通过 beeline 来连接,连接之前无需知道数据库的用户名和密码。

    • (2)安装步骤:
      1,因其连接之前无需知道数据库的用户名和密码,所以在 hive-site.xml 中只需要配置以下两项即可,其他步骤和本地模式一样:

        <configuration>
        <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://hadoop01:3306/hivedb?createDatabaseIfNotExist=true</value>
        <description>JDBC connect string for a JDBC metastore</description>
        </property>
        <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
        <description>Driver class name for a JDBC metastore</description>
        </property>
        </configuration>
      

      javax.jdo.option.ConnectionURL:JDBC连接字符串
      javax.jdo.option.ConnectionDriverName:JDBC的driver

    2,Hive 启动 hive thrift 服务端,使用命令:

      hiveserver2
    

    启动后命令行会一直监听不退出,我们可以看到它监听了10000端口:

    3,新开一个命令行窗口,执行 beeline 命令:

      beeline
    

    在这里插入图片描述
    默认端口为 10000,可通过hive.server2.thrift.port 参数调整

3,Hive 的三种连接方式

  • 1,CLI
  • 2,HiveServer2/beeline
  • 3,Web UI,这种方式相对前两种来说,用得比较少,所以这里不做详细介绍。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值