• 大数据开发之Apache Hive


    大数据开发之Apache Hive

    1.概述

    Apache Hive 是一款建立在hadoop生态之上的开源数据仓库系统,可以把储存在Hadoop文件中结构化,半结构化得到数据文件映射成一张数据库表,然后基于数据库表提供一种类似SQL的查询模型,也叫Hive 查询语言 ,简称HQL;

    然后是Hive 的核心就是把HQL转化成MapReduce 程序,然后把转化后的 MapReduce 程序提交到Hadoop 集群执行

    为什么使用Hive

    直接编写Hadoop 的MapReduce 程序 是需要一定的学习成本,比如要有Java基础,后再是复杂数据查询关联,排序,去重等逻辑编写较为复杂;

    Hive提供类似SQL 的方式,我们可以快速上手,编写SQL 来分析和处理海量数据;

    Hive和Hadoop 的关系

    作为一款数据仓库软件,最起码要有这个数据存储和数据分析的能力;

    Hive 借助hadoop 来实现

    • 数据存储 Hive 利用Hadoop的Hdfs 来存储数据
    • 数据分析 Hive 利用Hadoop的MapReduce来分析数据

    可以看到Hive 其实做的就只有一个功能,解析HQL变成MapReduce , 存储分析的能力都是基于Hadoop 的组件来完成的

    2.Hive架构

    在这里插入图片描述

    • UI – 用户向系统提交查询和其他操作的用户界面。截至 2011 年,该系统具有命令行界面,并且正在开发基于 Web 的 GUI。
    • Driver – 接收查询的组件。该组件实现了会话句柄的概念,并提供了以 JDBC/ODBC 接口为模型的执行和获取 API。
    • 编译器——包括语法解析器、计划编译器、优化器、执行器;解析查询,对不同的查询块和查询表达式进行语义分析,并最终在从元存储中查找的表和分区元数据的帮助下生成执行计划。
    • Metastore – 存储仓库中各种表和分区的所有结构信息的组件,包括列和列类型信息、读取和写入数据所需的序列化器和反序列化器以及存储数据的相应 HDFS 文件。
    • 执行引擎——执行编译器创建的执行计划的组件。该计划是一个阶段的 DAG。执行引擎管理计划的这些不同阶段之间的依赖关系,并在适当的系统组件上执行这些阶段。Hive本身并不直接处理数据文件。而是通过执行引擎处理,当下Hive支持MapReduce、Tez、Spark3种执行引擎

    3.Hive Metastore

    Hive Metastore 是管理Hive 元数据的一个组件或者叫服务

    Metadata,又称元数据,描述数据的数据;比如说我们常见的数据库字段,这个可以叫做元数据;

    Hive 的元数据Hive Metadata,我们都知道Hive 的数据存储是使用Hadoop中文件保存的,那这些个hadoop的文件对应我们HQL 里面那个表? 这个是有Hive Metastore 来进行记录的;Hive Metastore包括Hive 的database ,table,字段属性,字段顺序,表的hadoop-hdfs 存储的位置;

    元数据的存储方式两大类,一个Hive 自带的Derby存储,或者第三方的存储比如MySQL;

    Hive Metastore预案数据服务管理 hive Metadata,对外提供服务地址,客户端连接Hive Metastore 而不是直接保存元数据的数据库,一定程度上保证了元数据的安全

    metastore服务配置有3种模式:内嵌模式、本地模式、远程模式

    内嵌模式本地模式远程模式
    Metastore 单独部署启动
    Metadata 存储自带Derby第三方MySQL第三方MySQL

    4.Hive 部署

    前置准备

    Hadoop集群正常可用,集群时间同步,防火墙设置,主机名称,免密登录,JDK ,环境变量等安装成功;

    4.1 Hadoop Hive整合

    Hive需要把数据存储在HDFS上,此需要在Hadoop中添加相关配置属性,以满足Hive在Hadoop上运行

    修改Hadoop中core-site.xml,并且Hadoop集群同步配置文件,重启生效

    
    <property>
        <name>hadoop.proxyuser.root.hostsname>
        <value>*value>
    property>
    
    <property>
        <name>hadoop.proxyuser.root.groupsname>
        <value>*value>
    property>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    4.2 MySQL 安装

    略略略

    4.4 安装包

    在主节点上安装Hive

    tar zxvf apache-hive-3.1.2-bin.tar.gz
    mv apache-hive-3.1.2-bin/ hive
    # 解决Hive与Hadoop之间guava版本差异
    cd /soft/server/apache-hive-3.1.2-bin/
    rm -rf lib/guava-19.0.jar
    cp /soft/server/hadoop-3.3.0/share/hadoop/common/lib/guava-27.0-jre.jar ./lib/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    修改 hive-env.sh

    cd /soft/server/apache-hive-3.1.2-bin/conf
    mv hive-env.sh.template hive-env.sh
    vim hive-env.sh
    export HADOOP_HOME=/soft/server/hadoop-3.3.0
    export HIVE_CONF_DIR=/soft/server/apache-hive-3.1.2-bin/conf
    export HIVE_AUX_JARS_PATH=/soft/server/apache-hive-3.1.2-bin/lib
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    新增 hive-site.xml

    <configuration>
    <!-- 存储元数据mysql相关配置 -->
    <property>
    	<name>javax.jdo.option.ConnectionURL</name>
    	<value>jdbc:mysql://192.168.141.155: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>hadoop</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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    4.5 初始化

    上传MySQL JDBC驱动到Hive安装包lib路径下 mysql-connector-java-5.1.32.jar,初始化Hive的元数据

    cd /soft/server/apache-hive-3.1.2-bin/
    bin/schematool -initSchema -dbType mysql -verbos
    
    • 1
    • 2

    4.6 启动服务

    #前台启动
    /soft/apache-hive-3.1.2-bin/bin/hive --service metastore
    #前台启动开启debug日志
    /soft/apache-hive-3.1.2-bin/bin/hive --service metastore --hiveconf hive.root.logger=DEBUG,console
    ##后台启动、
    nohup /soft/apache-hive-3.1.2-bin/bin/hive --service metastore &
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    4.7 hive 客户端

    在这里插入图片描述

    分别对应下面的脚本 beeline 和hive

    [root@node1 bin]# pwd
    /soft/apache-hive-3.1.2-bin/bin
    [root@node1 bin]# ll
    总用量 44
    -rwxr-xr-x. 1 root root   881 823 2019 beeline
    drwxr-xr-x. 3 root root  4096 712 21:45 ext
    -rwxr-xr-x. 1 root root 10158 823 2019 hive
    ....
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    首先启动metastore服务,然后才可以启动hiveserver2服务

    nohup /soft/servers/hive/bin/hive --service metastore &
    nohup /soft/servers/hive/bin/hive --service hiveserver2 &
    
    • 1
    • 2

    5.Hive 使用

    https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL

  • 相关阅读:
    【NC65】主子表单据按照单表结构展现 节点客开
    ClickHouse的JOIN算法选择逻辑以及auto选项
    Python机器学习零基础理解线性回归分析
    【JAVA日期相关】判断当前为平年还是闰年
    HTML5期末大作业:美妆网页主题网站设计——清新的手工肥皂网站展示(4页)HTML+CSS+JavaScript
    什么是贪财型人格,如何改变贪财型性格
    C# iText 7 切分PDF,处理PDF页面大小
    从C语言基础到高级C语言 (结构体和位域)
    Linux每日智囊
    webApplication 、webSite 区别
  • 原文地址:https://blog.csdn.net/weixin_44244088/article/details/126089738