Hive的概念

  • Hive是Facebook开源出来,后来贡献给力Apache .宗旨是:提高分析数据的能力降低分析数据的开发成本。

  • Hive是基于 Hadoop 的一个数据仓库工具,用于分析数据的。

    为什么说Hive是基于Hadoop的呢?
    ​
    #作为一款数据仓库软件,应该要具备哪些能力?
      具备存储数据的能力
      具备分析数据的能力
    ​
    Hive作为数仓软件,当然具备上述两种能力?
      #Hive使用Hadoop HDFS作为数据存储系统
      #Hive使用Hadoop MapReduce来分析数据
    基于此说Hive是基于Hadoop的数仓软件。
  • 在此过程中,Hive做了什么?其最大的魅力在哪里?

    • 可以将结构化的数据文件映射为一张数据库表,并提供==类 SQL 查询==功能。

      结构化数据:具有schema约束的数据 便于程序解读解析
      映射  y=2X+1  当x=1 y=3 映射表示的就是一种对应关系。
      映射成为表之后 提供了类SQl查询分析功能。 SQL叫做声明式编程,程序员不用关系过程,利于数据分析。

Hive的架构组件

  • 客户端用户接口

    所谓的客户端指的是给用户一种方式编写Hive SQL
    目前常见的客户端:CLI(命令行接口 shell)、Web UI、JDBC|ODBC
  • Hive Driver驱动程序

    hive的核心
    完成从接受HQL到编译成为MR程序的过程。
    sql解释 编译 校验 优化 制定计划
  • metadata

    元数据存储。 描述性数据。
    对于hive来说,元数据指的是表和文件之间的映射关系。
  • Hadoop

    HDFS  存储文件
    MapReduce 计算数据
    YARN  程序运行的资源分配
  • Q:Hive是分布式的软件吗?

    Hive不是分布式软件。只需要在一台机器上部署Hive服务即可;
    Hive的分布式处理能力是借于Hadoop完成的。HDFS分布式存储  MapReduce分布式计算。

Hive和Mysql的区别

Metadata、metastore

#Metadata 元数据
对于hive来说,元数据主要指的是表和文件之间的映射关系。
元数据也是数据,存储在哪里呢?Hive当下支持两种地方存储元数据。
    1、存储在Hive内置的RDBSM中,Apache Derby(内存级别轻量级关系型数据库)  
    2、存储在外界第三方的RDBMS中,比如:MySQL。  企业中常用的方式。

#metastore 元数据访问服务
专门用于操作访问metadata的一种服务,对外暴露服务地址给各个不同的客户端使用访问Hive的元数据。
并且某种程度上保证了metadata的安全。

Hive的安装部署模式

  • 如何区别,关键在于两个问题?

    • ==metadata元数据是存储在哪里的?== 内置derby还是外置的Mysql。

    • ==metastore服务是否需要单独配置,单独手动启动?==

  • 具体来说

    • ==内嵌模式==

      1、元数据存储在内置的derby
      2、不需要单独配置metastore 也不需要单独启动metastore服务
      ​
      安装包解压即可使用。
      ​
      适合测试体验。实际生产中没人用。适合单机单人使用。
    • ==本地模式==

      1、元数据使用外置的RDBMS,常见使用最多的是MySQL。
      2、不需要单独配置metastore 也不需要单独启动metastore服务
    • ==远程模式==

      1、元数据使用外置的RDBMS,常见使用最多的是MySQL。
      2、metastore服务单独配置  单独手动启动  全局唯一。
      ​
      这样的话各个客户端只能通过这一个metastore服务访问Hive.
      ​
      企业生产环境中使用的模式,支持多客户端远程并发操作访问Hive.
      也是我们课程中使用的模式。
  • 对比

    metadata存储在哪metastore服务如何
    内嵌模式Derby不需要配置启动
    本地模式MySQL不需要配置启动
    ==远程模式====MySQL====单独配置、单独启动==

安装Hive

#apache-hive-3.1.2-bin.tar.gz
​
上传、解压
tar zxvf apache-hive-3.1.2-bin.tar.gz
  • 0、解决Hive与Hadoop之间guava版本差异

    cd /export/server/apache-hive-3.1.2-bin/
    rm -rf lib/guava-19.0.jar
    cp /export/server/hadoop-3.3.0/share/hadoop/common/lib/guava-27.0-jre.jar ./lib/
    • 1、==hive-env.sh==

      cd /export/server/apache-hive-3.1.2-bin/conf
      mv hive-env.sh.template hive-env.sh
      ​
      vim hive-env.sh
      export HADOOP_HOME=/export/server/hadoop-3.3.0
      export HIVE_CONF_DIR=/export/server/apache-hive-3.1.2-bin/conf
      export HIVE_AUX_JARS_PATH=/export/server/apache-hive-3.1.2-bin/lib
    • 2、==hive-site.xml==

      vim hive-site.xml

      <configuration>
      <!-- 存储元数据mysql相关配置 -->
      <property>
          <name>javax.jdo.option.ConnectionURL</name>
          <value>jdbc:mysql://node1:3306/hive3?createDatabaseIfNotExist=true&amp;useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8</value>
      </property>
      ​
      <property>
          <name>javax.jdo.option.ConnectionDriverName</name>
          <value>com.mysql.jdbc.Driver</value>
      </property>
      ​
      <property>
          <name>javax.jdo.option.ConnectionUserName</name>
          <value>root</value>
      </property>
      ​
      <property>
          <name>javax.jdo.option.ConnectionPassword</name>
          <value>123456</value>
      </property>
      ​
      <!-- H2S运行绑定host -->
      <property>
          <name>hive.server2.thrift.bind.host</name>
          <value>node1</value>
      </property>
      ​
      <!-- 远程模式部署metastore metastore地址 -->
      <property>
        <name>hive.metastore.uris</name>
          <value>thrift://node1:9083</value>
      </property>
      ​
      <!-- 关闭元数据存储授权  --> 
      <property>
        <name>hive.metastore.event.db.notification.api.auth</name>
          <value>false</value>
      </property>
      </configuration>
      ​
    • 3、上传Mysql jdbc驱动到Hive安装包的Lib目录下

      mysql-connector-java-5.1.32.jar
    • 4、手动执行命令初始化Hive的元数据

      cd /export/server/apache-hive-3.1.2-bin/
      ​
      bin/schematool -initSchema -dbType mysql -verbos
      #初始化成功会在mysql中创建74张表
    • 5、在hdfs创建hive存储目录

      hadoop fs -mkdir /tmp
      hadoop fs -mkdir -p /user/hive/warehouse
      hadoop fs -chmod g+w /tmp
      hadoop fs -chmod g+w /user/hive/warehouse

Hive 服务的启动

metastore服务

  • 前台启动

    #前台启动
    /export/server/apache-hive-3.1.2-bin/bin/hive --service metastore
    ​
    #前台启动开启debug日志
    /export/server/apache-hive-3.1.2-bin/bin/hive --service metastore --hiveconf hive.root.logger=DEBUG,console  
    ​
    #前台启动关闭方式  ctrl+c结束进程
  • 后台挂起启动

    nohup /export/server/apache-hive-3.1.2-bin/bin/hive --service metastore &
    ​
    #后台挂起启动 结束进程
    使用jps查看进程 使用kill -9 杀死进程
    ​
    #nohup 命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下

Hive的客户端

  • Hive的第一代客户端

    • ==bin/hive==

    • 直接访问metastore服务

    • 配置

      <configuration>
      <property>
              <name>hive.metastore.uris</name>
              <value>thrift://node1:9083</value>
      </property>
      </configuration>
    • 弊端:

      第一代客户端属于shell脚本客户端 性能友好安全方面存在不足 Hive已经不推荐使用
      官方建议使用第二代客户端beeline
  • Hive的第二代客户端

    • bin/beeline

    • 无法访问metastore服务,只能够访问==Hiveserver2服务==。

    • 使用

      # 拷贝node1上 hive安装包到beeline客户端机器上(node3)
      scp -r /export/server/apache-hive-3.1.2-bin/ node3:/export/server/
      ​
      #1、在安装hive的服务器上 首先启动metastore服务 再启动hiveserver2服务
      nohup /export/server/apache-hive-3.1.2-bin/bin/hive --service metastore &
      nohup /export/server/apache-hive-3.1.2-bin/bin/hive --service hiveserver2 &
      ​
      #2、在任意机器(如node3)上使用beeline客户端访问
      [root@node3 ~]# /export/server/apache-hive-3.1.2-bin/bin/beeline                   
      beeline> ! connect jdbc:hive2://node1:10000    #jdbc访问HS2服务
      Connecting to jdbc:hive2://node1:10000
      Enter username for jdbc:hive2://node1:10000: root  #用户名 要求具备HDFS读写权限
      Enter password for jdbc:hive2://node1:10000:       #密码可以没有

Logo

大数据从业者之家,一起探索大数据的无限可能!

更多推荐