【Hadoop】三、数据仓库基础与Apache Hive入门

news2024/11/26 20:18:57

文章目录

    • 三、数据仓库基础与Apache Hive入门
      • 1、数据仓库基本概念
        • 1.1、数据仓库概念
        • 1.2、场景案例:数据仓库为何而来
        • 1.3、数据仓库主要特征
        • 1.4、数据仓库主流开发语言--SQL
      • 2、Apache Hive入门
        • 2.1、Apache Hive概述
        • 2.2、场景设计:如何模拟实现Hive功能
        • 2.3、Apache Hive架构、组件
      • 3、Apache Hive安装部署
        • 3.1、Apache Hive元数据
        • 3.2、Apache Hive部署实战
          • Hive3安装
            • Mysql安装
            • Hive的安装
        • 3.3、Apache Hive客户端使用

三、数据仓库基础与Apache Hive入门

1、数据仓库基本概念

1.1、数据仓库概念

数仓概念

  • 数据仓库 (英语:Data Warehouse,简称 数仓DW ),是一个 用于存储、分析、报告的数据系统

  • 数据仓库的目的是构建 面向分析 的集成化数据环境,分析结果为企业提供决策支持(Decision Support)。

    在这里插入图片描述

数仓专注分析

  • 数据仓库本身并不“生产”任何数据,其数据来源于不同外部系统;

  • 同时数据仓库自身也不需要“消费”任何的数据,其结果开放给各个外部应用使用;

  • 这也是为什么叫“仓库”,而不叫“工厂”的原因。

    在这里插入图片描述

1.2、场景案例:数据仓库为何而来

案例 数据仓库为何而来,解决什么问题的?

先下结论:为了分析数据而来,分析结果给企业决策提供支撑。
下面以中国人寿保险公司(chinalife)发展为例,阐述数据仓库为何而来?

( 1 )业务数据的存储问题

  • 中国人寿保险(集团)公司下辖多条业务线,包括:人寿险、财险、车险,养老险等。各业务线的业务正常运营需要记录维护包括客户、保单、收付费、核保、理赔等信息。这么多业务数据存储在哪里呢?

  • 联机事务处理系统(OLTP) 正好可以满足上述业务需求开展, 其主要任务是执行联机事务处理。其基本特征是 前台接收的用户数据可以立即传送到后台进行处理,并在很短的时间内给出处理结果

在这里插入图片描述

  • 关系型数据库(RDBMS)是OLTP典型应用,比如:Oracle、MySQL、SQL Server等。

    在这里插入图片描述

( 2 )分析型决策的制定

  • 随着集团业务的持续运营,业务数据将会越来越多。由此也产生出许多运营相关的困惑:

    能够确定哪些险种正在恶化或已成为不良险种?

    能够用有效的方式制定新增和续保的政策吗?

    理赔过程有欺诈的可能吗?

    现在得到的报表是否只是某条业务线的?集团整体层面数据如何?

  • 为了能够正确认识这些问题,制定相关的解决措施,瞎拍桌子是肯定不行的。

  • 最稳妥办法就是:基于业务数据开展数据分析,基于分析的结果给决策提供支撑。也就是所谓的数据驱动决策的制定。

OLTP环境开展分析可行吗?

可以,但是没必要!!

  • OLTP系统的核心是面向业务,支持业务,支持事务。所有的业务操作可以分为读、写两种操作,一般来说读的压力明显大于写的压力。如果在OLTP环境直接开展各种分析,有以下问题需要考虑:

  • 数据分析也是对数据进行读取操作, 会让读取压力倍增

  • OLTP 仅存储数周或数月的数据

  • 数据分散 在不同系统不同表中,字段类型属性不统一;

数据仓库面世

  • 当分析所涉及数据规模较小的时候,在业务低峰期时可以在OLTP系统上开展直接分析。

  • 但为了更好的进行各种规模的数据分析,同时也不影响OLTP系统运行,此时需要构建一个集成统一的数据分析平台。该平台的目的很简单: 面向分析,支持分析 ,并且 和OLTP系统解耦合。

  • 基于这种需求,数据仓库的雏形开始在企业中出现了。

数据仓库的构建

  • 如数仓定义所说, 数仓是一个用于存储、分析、报告的数据系统 ,目的是 构建面向分析的集成化数据环境 。我们把这种面向分析、支持分析的系统称之为 OLAP (联机分析处理)系统。当然, 数据仓库是OLAP系统的一种实现。

  • 中国人寿保险公司就可以基于分析决策需求,构建数仓平台。

    在这里插入图片描述

1.3、数据仓库主要特征

数仓主要特征

  • Subject-Oriented(面向主题)
主题 是一个抽象的概念,是较高层次上
数据综合、归类并进行分析利用的抽象
  • Integrated(集成性)
主题相关的数据通常会分布在多个操作型
系统中,彼此分散、独立、异构。需要集
成到数仓主题下。
  • Non-Volatile(非易失性)
也叫非易变性。数据仓库是分析数
据的平台,而不是创造数据的平台。
  • Time-Variant(时变性)
数据仓库的 数据需要随着时间更新 ,以适
应决策的需要。

面向主题性(Subject-Oriented)

  • 主题是一个抽象的概念,是较高层次上企业信息系统中的数据综合、归类并进行分析利用的抽象。在逻辑意义上,它是对应企业中某一宏观分析领域所涉及的分析对象。

  • 传统OLTP系统对 数据的划分并不适用于决策分析。而基于主题组织的数据则不同,它们被划分为各自独立的领域,每个领域有各自的逻辑内涵但互不交叉,在抽象层次上对数据进行完整、一致和准确的描述。

集成性(Integrated)

  • 主题相关的数据通常会分布在多个操作型系统中,彼此分散、独立、异构。

  • 因此在数据进入数据仓库之前,必然要经过统一与综合,对数据进行抽取、清理、转换和汇总,这一步是数据仓库建设中最关键、最复杂的一步,所要完成的工作有:

  • 统一源数据中所有矛盾之处

    如字段的同名异义、异名同义、单位不统一、字长不一致等等。

  • 进行 数据综合和计算

    数据仓库中的数据综合工作可以在从原有数据库抽取数据时生成,但许多是在数据仓库内部生成的,即进入数据仓库以后进行综合生成的。

  • 下图说明了保险公司综合数据的简单处理过程,其中数据仓库中与“承保”主题有关的数据来自于多个不同的操作型系统。

  • 这些系统内部数据的命名可能不同,数据格式也可能不同。把不同来源的数据存储到数据仓库之前,需要去除这些不一致。

    在这里插入图片描述

非易失性、非异变性(Non-Volatile)

  • 数据仓库是分析数据的平台,而不是创造数据的平台。我们是通过数仓去分析数据中的规律,而不是去创造修改其中的规律。因此数据进入数据仓库后,它便稳定且不会改变。

  • 数据仓库的数据反映的是一段相当长的时间内历史数据的内容,数据 仓库的用户对数据的操作大多是数据查询或比较复杂的挖掘,一旦数据进入数据仓库以后,一般情况下被较长时间保留。

  • 数据仓库中一般有 大量的查询操作 ,但修改和删除操作很少。

时变性(Time-Variant)

  • 数据仓库包含各种粒度的 历史数据 ,数据可能与某个特定日期、星期、月份、季度或者年份有关。

  • 当业务变化后会失去时效性。因此数据仓库的数据需要随着时间更新,以适应决策的需要。

  • 从这个角度讲,数据仓库建设是一个项目,更是一个过程。

1.4、数据仓库主流开发语言–SQL

数仓开发语言概述

  • 数仓作为面向分析的数据平台,其主职工作就是对存储在其中的数据开展分析,那么如何读取数据分析呢?

  • 理论上来说,任何一款编程语言只要具备读写数据、处理数据的能力,都可以用于数仓的开发。比如大家耳熟能详的C、java、Python等;

  • 关键在于编程语言是否易学、好用、功能是否强大 。遗憾的是上面所列出的C、Python等编程语言都需要一定的时间进行语法的学习,并且学习语法之后还需要结合分析的业务场景进行编码,跑通业务逻辑。

  • 不管从学习成本还是开发效率来说,上述所说的编程语言都不是十分友好的。

  • 在数据分析领域,不得不提的就是 SQL编程语言,应该称之为分析领域主流开发语言

SQL语言介绍

  • 结构化查询语言S tructured Q uery L anguage)简称 SQL ,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理数据。

  • SQL语言使我们有能力访问数据库,并且SQL是一种ANSI(美国国家标准化组织)的标准计算机语言,各大数据库厂商在生产数据库软件的时候,几乎都会去支持SQL的语法,以使得用户在使用软件时更加容易上手,以及在不同厂商软件之间进行切换时更加适应,因为大家的SQL语法都差不多。

  • SQL语言功能很强,十分简洁,核心功能只用了 9 个动词。语法接近英语口语,所以,用户很容易学习和使用。

    在这里插入图片描述

数仓与SQL

  • 虽然SQL语言本身是针对数据库软件设计的,但是在数据仓库领域,尤其是 大数据数仓领域 ,很多数仓软件 都会去支持SQL语法

  • 原因在于一是用户学习SQL成本低 ,二是SQL语言对于数据分析真的十分友好,爱不释手。

结构化数据

  • 结构化数据 也称作行数据,是由 二维表结构来逻辑表达和实现的数据 ,严格地遵循数据格式与长度规范,主要通过关系型数据库进行存储和管理。

  • 与结构化数据相对的是不适于由数据库二维表来表现的非结构化数据,包括所有格式的办公文档、XML、HTML、各类报表、图片和音频、视频信息等。

  • 通俗来说,结构化数据会有严格的行列对齐,便于解读与理解。

    在这里插入图片描述

二维表结构

  • 表由一个名字标识(例如“客户”或者“订单”),叫做表名。表包含带有数据的记录(行)。

  • 下面的例子是一个名为“Persons” 的表,包含三条记录(每一条对应一个人)和五个列(Id、姓、名、地址和
    城市)。

    在这里插入图片描述

SQL语法分类

SQL主要语法分为两个部分:数据定义语言(DDL)和数据操纵语言(DML) 。

  • DDL语法使我们有能力创建或删除表,以及数据库、索引等各种对象,但是不涉及表中具体数据操作:

    CRE ATE DATABASE -创建新数据库

    CREATE TABLE -创建新表

  • DML语法是我们有能力针对表中的数据进行插入、更新、删除、查询操作:

    SELECT - 从数据库表中获取数据

    UPDATE - 更新数据库表中的数据

    DELETE - 从数据库表中删除数据

    INSERT - 向数据库表中插入数据

2、Apache Hive入门

2.1、Apache Hive概述

什么是Hive

  • Apache Hive是一款建立在Hadoop之上的开源 数据仓库 系统,可以将存储在Hadoop文件中的结构化、半结构化数据文件映射为一张数据库表,基于表提供了一种类似SQL的查询模型,称为Hive查询语言(HQL),用于访问和分析存储在Hadoop文件中的大型数据集。

  • Hive核心是将 HQL转换为MapReduce 程序,然后将程序提交到Hadoop群集执行。

  • Hive由Facebook实现并开源。

    在这里插入图片描述

为什么使用Hive

  • 使用Hadoop MapReduce直接处理数据所面临的问题

    人员学习成本太高需要掌握java语言

    MapReduce实现复杂查询逻辑开发难度太大

  • 使用Hive处理数据的好处

    操作接口采用 类SQL语法 ,提供快速开发的能力(简单、容易上手)

    避免直接写MapReduce,减少开发人员的学习成本

    支持自定义函数,功能扩展很方便

    背靠Hadoop, 擅长存储分析海量数据集

Hive和Hadoop关系

  • 从功能来说,数据仓库软件,至少需要具备下述两种能力:

    存储数据的能力、分析数据的能力

  • Apache Hive作为一款大数据时代的数据仓库软件,当然也具备上述两种能力。只不过Hive并不是自己实现了上述两种能力,而是借助Hadoop。
    Hive利用HDFS存储数据,利用MapReduce查询分析数据

  • 这样突然发现Hive没啥用,不过是套壳Hadoop罢了。其实不然,Hive的最大的魅力在于用户专注于编写HQL,Hive帮您转换成为MapReduce程序完成对数据的分析。

    在这里插入图片描述

2.2、场景设计:如何模拟实现Hive功能

案例 如何模拟实现Apache Hive的功能

在HDFS文件系统上有一个文件,路径为/data/china_user.txt;
需求:统计来自于上海年龄大于 25 岁的用户有多少个?

在这里插入图片描述

  • 重点理解下面两点:

    Hive能将数据文件映射成为一张表,这个 映射 是指什么?

    Hive软件本身到底承担了什么 功能职责

映射信息记录

  • 映射 在数学上称之为一种 对应关系 ,比如y=x+1,对于每一个x的值都有与之对应的y的值。

  • 在hive中 能够写sql处理的前提是针对表,而不是针对文件 ,因此需要将 文件和表之间的对应关系 描述记录清楚。映射信息专业的叫法称之为元数据信息(元数据是指用来描述数据的数据metadata)。、

    在这里插入图片描述

  • 具体来看,要记录的元数据信息包括:

    表对应着哪个文件(位置信息)

    表的列对应着文件哪一个字段(顺序信息)

    文件字段之间的分隔符是什么

SQL语法解析、编译

  • 用户写完sql之后,hive需要针对sql进行语法校验,并且根据记录的元数据信息解读sql背后的含义,制定执行计划。

  • 并且把执行计划转换成MapReduce程序来具体执行,把执行的结果封装返回给用户。

对Hive的理解

  • Hive能将数据文件映射成为一张表,这个 映射 是指什么?

    文件和表之间的对应关系

  • Hive软件本身到底承担了什么 功能职责

    SQL语法解析编译成MapReduce

最终效果

  • 基于上述分析,最终要想模拟实现的Hive的功能,大致需要下图所示组件参与其中。

  • 从中可以感受一下Hive承担了什么职责,当然,也可以把这个理解为Hive的架构图。

    在这里插入图片描述

2.3、Apache Hive架构、组件

Hive架构图

在这里插入图片描述

Hive组件

  • 用户接口

    包括CLI、JDBC/ODBC、WebGUI。其中,CLI(command line interface)为shell命令行;Hive中的Thrift服务器允许外部客户端通过网络与Hive进行交互,类似于JDBC或ODBC协议。WebGUI是通过浏览器访问Hive。

    在这里插入图片描述

  • 元数据存储

    通常是存储在关系数据库如mysql/derby中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。

    在这里插入图片描述

  • Driver驱动程序,包括语法解析器、计划编译器、优化器、执行器

    完成HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS 中,并在随后有执行引擎调用执行。

    在这里插入图片描述

  • 执行引擎

    Hive本身并不直接处理数据文件。而是通过执行引擎处理。当下Hive支持MapReduce、Te z、Spark3种执行引擎。

    在这里插入图片描述

3、Apache Hive安装部署

3.1、Apache Hive元数据

什么是元数据

  • 元数据(Metadata),又称中介数据、中继数据,为 描述数据的数据 (data about data),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。

Hive Metadata

  • Hive Metadata即Hive的元数据

  • 包含用Hive创建的database、table、表的位置、类型、属性,字段顺序类型等元信息。

  • 元数据存储在关系型数据库中。如hive内置的Derby、或者第三方如MySQL等。

  • Metastore即 元数据服务 。Metastore服务的作用是管理metadata元数据,对外暴露服务地址,让各种客户端通过连接metastore服务,由metastore再去连接MySQL数据库来存取元数据。

  • 有了metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码,只需要连接metastore 服务即可。某种程度上也保证了hive元数据的安全。

    在这里插入图片描述

metastore配置方式

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

  • 区分 3 种配置方式的关键是弄清楚两个问题:

    Metastore服务是否需要单独配置、单独启动?

    Metadata是存储在内置的derby中,还是第三方RDBMS,比如MySQL。

    在这里插入图片描述

metastore远程模式

  • 在生产环境中,建议用远程模式来配置Hive Metastore。在这种情况下,其他依赖hive的软件都可以通过
    Metastore访问hive。由于还可以完全屏蔽数据库层,因此这也带来了更好的可管理性/安全性。

    在这里插入图片描述

3.2、Apache Hive部署实战

安装前准备

  • 由于Apache Hive是一款基于Hadoop的数据仓库软件,通常部署运行在Linux系统之上。因此不管使用何种方式配置Hive Metastore,必须要先保证服务器的基础环境正常,Hadoop集群健康可用。

  • 服务器基础环境

    集群时间同步、防火墙关闭、主机Host映射、免密登录、JDK安装

  • Hadoop集群健康可用

    启动Hive之前必须先启动Hadoop集群。特别要注意,需等待HDFS安全模式关闭之后再启动运行Hive。

    Hive不是分布式安装运行的软件,其分布式的特性主要借由Hadoop完成。包括分布式存储、分布式计算。

Hadoop与Hive整合

  • 因为Hive需要把数据存储在HDFS上,并且通过MapReduce作为执行引擎处理数据;

  • 因此需要在Hadoop中添加相关配置属性,以满足Hive在Hadoop上运行。

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

    <!-- 整合hive -->
    <property>
        <name>hadoop.proxyuser.root.hosts</name>
        <value>*</value>
    </property>
    
    <property>
        <name>hadoop.proxyuser.root.groups</name>
        <value>*</value>
    </property>
    
Hive3安装

Mysql安装
  • 卸载Centos7自带的mariadb

    [root@node3 ~]# rpm -qa|grep mariadb
    mariadb-libs-5.5.64-1.el7.x86_64
    
    [root@node3 ~]# rpm -e mariadb-libs-5.5.64-1.el7.x86_64 --nodeps
    [root@node3 ~]# rpm -qa|grep mariadb                            
    [root@node3 ~]# 
    
  • 安装mysql

    mkdir /export/software/mysql
    
    #上传mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar 到上述文件夹下  解压
    tar xvf mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar
    
    #执行安装
    yum -y install libaio
    
    [root@node3 mysql]# rpm -ivh mysql-community-common-5.7.29-1.el7.x86_64.rpm mysql-community-libs-5.7.29-1.el7.x86_64.rpm mysql-community-client-5.7.29-1.el7.x86_64.rpm mysql-community-server-5.7.29-1.el7.x86_64.rpm 
    
    warning: mysql-community-common-5.7.29-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
    Preparing...                          ################################# [100%]
    Updating / installing...
       1:mysql-community-common-5.7.29-1.e################################# [ 25%]
       2:mysql-community-libs-5.7.29-1.el7################################# [ 50%]
       3:mysql-community-client-5.7.29-1.e################################# [ 75%]
       4:mysql-community-server-5.7.29-1.e################                  ( 49%)
    
  • mysql初始化设置

    #初始化
    mysqld --initialize
    
    #更改所属组
    chown mysql:mysql /var/lib/mysql -R
    
    #启动mysql
    systemctl start mysqld.service
    
    #查看生成的临时root密码
    cat  /var/log/mysqld.log
    
    [Note] A temporary password is generated for root@localhost: o+TU+KDOm004
    
  • 修改root密码 授权远程访问 设置开机自启动

    [root@node2 ~]# mysql -u root -p
    Enter password:     #这里输入在日志中生成的临时密码
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 3
    Server version: 5.7.29
    
    Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> 
    
    
    #更新root密码  设置为hadoop
    mysql> alter user user() identified by "hadoop";
    Query OK, 0 rows affected (0.00 sec)
    
    
    #授权
    mysql> use mysql;
    
    mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'hadoop' WITH GRANT OPTION;
    
    mysql> FLUSH PRIVILEGES; 
    
    #mysql的启动和关闭 状态查看 (这几个命令必须记住)
    systemctl stop mysqld
    systemctl status mysqld
    systemctl start mysqld
    
    #建议设置为开机自启动服务
    [root@node2 ~]# systemctl enable  mysqld                             
    Created symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service to /usr/lib/systemd/system/mysqld.service.
    
    #查看是否已经设置自启动成功
    [root@node2 ~]# systemctl list-unit-files | grep mysqld
    mysqld.service                                enabled 
    
  • Centos7 干净卸载mysql 5.7

    #关闭mysql服务
    systemctl stop mysqld.service
    
    #查找安装mysql的rpm包
    [root@node3 ~]# rpm -qa | grep -i mysql      
    mysql-community-libs-5.7.29-1.el7.x86_64
    mysql-community-common-5.7.29-1.el7.x86_64
    mysql-community-client-5.7.29-1.el7.x86_64
    mysql-community-server-5.7.29-1.el7.x86_64
    
    #卸载
    [root@node3 ~]# yum remove mysql-community-libs-5.7.29-1.el7.x86_64 mysql-community-common-5.7.29-1.el7.x86_64 mysql-community-client-5.7.29-1.el7.x86_64 mysql-community-server-5.7.29-1.el7.x86_64
    
    #查看是否卸载干净
    rpm -qa | grep -i mysql
    
    #查找mysql相关目录 删除
    [root@node1 ~]# find / -name mysql
    /var/lib/mysql
    /var/lib/mysql/mysql
    /usr/share/mysql
    
    [root@node1 ~]# rm -rf /var/lib/mysql
    [root@node1 ~]# rm -rf /var/lib/mysql/mysql
    [root@node1 ~]# rm -rf /usr/share/mysql
    
    #删除默认配置 日志
    rm -rf /etc/my.cnf 
    rm -rf /var/log/mysqld.log
    

Hive的安装
  • 上传安装包 解压

    tar zxvf apache-hive-3.1.2-bin.tar.gz
    
  • 解决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/
    
  • 修改配置文件

    • 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
      
    • 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>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>
      
      
  • 上传mysql jdbc驱动到hive安装包lib下

    mysql-connector-java-5.1.32.jar
    
  • 初始化元数据

    cd /export/server/apache-hive-3.1.2-bin/
    
    bin/schematool -initSchema -dbType mysql -verbos
    #初始化成功会在mysql中创建74张表
    
  • 在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

    • 1、启动metastore服务

      #前台启动  关闭ctrl+c
      /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  
      
      #后台启动 进程挂起  关闭使用jps+ kill -9
      nohup /export/server/apache-hive-3.1.2-bin/bin/hive --service metastore &
      
  • 2、启动hiveserver2服务

      nohup /export/server/apache-hive-3.1.2-bin/bin/hive --service hiveserver2 &
    
      #注意 启动hiveserver2需要一定的时间  不要启动之后立即beeline连接 可能连接不上
    
  • 3、beeline客户端连接

    • 拷贝node1安装包到beeline客户端机器上(node3)

      scp -r /export/server/apache-hive-3.1.2-bin/ node3:/export/server/
      
    • 错误

      Error: Could not open client transport with JDBC Uri: jdbc:hive2://node1:10000: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: root is not allowed to impersonate root (state=08S01,code=0)
      
      • 修改

        在hadoop的配置文件core-site.xml中添加如下属性:
        <property>
                <name>hadoop.proxyuser.root.hosts</name>
              <value>*</value>
        </property>
        <property>
                <name>hadoop.proxyuser.root.groups</name>
                <value>*</value>
        </property>
        
      • 连接访问

        /export/server/apache-hive-3.1.2-bin/bin/beeline
        
        beeline> ! connect jdbc:hive2://node1:10000
        beeline> root
        beeline> 直接回车
        
  • 错误解决:Hive3执行insert插入操作 statstask异常

    • 现象

      在执行insert + values操作的时候  虽然最终执行成功,结果正确。但是在执行日志中会出现如下的错误信息。
      

      在这里插入图片描述

    • 开启hiveserver2执行日志。查看详细信息

      2020-11-09 00:37:48,963 WARN  [5ce14c58-6b36-476a-bab8-89cba7dd1706 main] metastore.RetryingMetaStoreClient: MetaStoreClient lost connection. Attempting to reconnect (1 of 1) after 1s. setPartitionColumnStatistics
      
      ERROR [5ce14c58-6b36-476a-bab8-89cba7dd1706 main] exec.StatsTask: Failed to run stats task
      

      在这里插入图片描述

    • 但是 此错误并不影响最终的插入语句执行成功

    • 分析原因和解决

      • statstask是一个hive中用于统计插入等操作的状态任务 其返回结果如下

        在这里插入图片描述

      • 此信息类似于计数器 用于告知用户插入数据的相关信息 但是不影响程序的正常执行。

      • Hive新版本中 这是一个issues 临时解决方式如下

        https://community.cloudera.com/t5/Support-Questions/Hive-Metastore-Connection-Failure-then-Retry/td-p/151661

        在这里插入图片描述

      • 在mysql metastore中删除 PART_COL_STATS这张表即可

hive comment 注释乱码问题

use hive3;
#修改表字段注解和表注解
alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
#修改分区字段注解
alter table PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8;
alter table PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
#修改索引注解
alter table INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;

3.3、Apache Hive客户端使用

( 1 )Hive自带客户端

  • Hive发展至今,总共历经了两代客户端工具。

    在这里插入图片描述

  • 第一代客户端(deprecated不推荐使用):$HIVE_HOME/bin/hive, 是一个shellUtil。主要功能:一是可用于以
    交互或批处理模式运行Hive查询;二是用于Hive相关服务的启动,比如metastore服务。

  • 第二代客户端(recommended 推荐使用):$HIVE_HOME /bin/beeline ,是一个JDBC客户端,是 官方强烈推荐使用 的Hive命令行工具,和第一代客户端相比,性能加强安全性提高。

    在这里插入图片描述

HiveServer2服务介绍

  • 远程模式下beeline通过Thrift 连接到单独的 HiveServer2 服务上,这也是官方推荐在生产环境中使用的模式。

  • HiveServer2支持多客户端的并发和身份认证,旨在为开放API客户端如JDBC、ODBC提供更好的支持。

关系梳理

  • HiveServer2通过Metastore服务读写元数据。所以在远程模式下, 启动HiveServer2之前必须先首先启动
    metastore
    服务。

  • 特别注意:远程模式下,Beeline客户端只能通过HiveServer2服务访问Hive。而bin/hive是通过Metastore服务访问的。具体关系如下:

    在这里插入图片描述

bin/beeline客户端使用

  • 在hive安装的服务器上,首先启动metastore服务,然后启动hiveserver2服务。

    #先启动metastore服务 然后启动hiveserver2服务
    nohup /export/servers/hive/bin/hive --service metastore &
    nohup /export/servers/hive/bin/hive --service hiveserver2 &
    
  • 在node3上使用beeline客户端进行连接访问。需要注意hiveserver2服务启动之后需要稍等一会才可以对外提供服务。

  • Beeline是JDBC的客户端,通过JDBC协议和Hiveserver2服务进行通信,协议的地址是:
    jdbc:hive2://node1:10000

    [root@node3 ~] # /export/server/hive/bin/beeline
    Beeline beeline>! version 3.1.2 by Apache Hiveconnect jdbc:hive2://node1:10000
    Connecting to jdbc:hive2://node1:10000
    Enter Enter username password for for jdbc:hive2://node1:10000: jdbc:hive2://node1:10000: root
    Connected Driver: Hive JDBC to: Apache Hive (version 3.1.2)(version 3.1.2)
    Transaction isolation: TRANSACTION_REPEATABLE_READ
    0: jdbc:hive2://node1:10000>
    

( 2 )Hive可视化客户端

  • DataGrip 、Dbeaver、SQuirrel SQL Client等

    可以在Windows、MAC平台中 通过JDBC连接HiveServer2的图形界面工具 ;这类工具往往专门针对SQL类软件进行开发优化、页面美观大方,操作简洁,更重要的是SQL编辑环境优雅;SQL语法智能提示补全、关键字高亮、查询结果智能显示、按钮操作大于命令操作;

  • DataGrip

    DataGrip是由JetBrains公司推出的数据库管理软件,DataGrip支持几乎所有主流的关系数据库产品,如DB2、Derby、MySQL、Oracle、SQL Server等,也支持几乎所有主流的大数据生态圈SQL软件,并且提供了简单易用的界面,开发者上手几乎不会遇到任何困难。

    在这里插入图片描述

DataGrip使用教程

  • step1:windows创建工程文件夹

    在这里插入图片描述

  • step2:DataGrip中创建新Project

    在这里插入图片描述

  • step3:关联本地工程文件夹

    在这里插入图片描述

  • step4:DataGrip连接Hive

    在这里插入图片描述

  • step5:配置Hive JDBC连接驱动

    在这里插入图片描述

    在这里插入图片描述

  • step6:返回,配置Hiveserver2服务连接信息

    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/551560.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习用于医学预后-第二课第四周16-17节-比较两个患者的风险

我们怎样比较两个患者的风险&#xff1f; 让我们谈谈如何比较两名患者的风险。假设我们有两个病人&#xff0c;一个50岁&#xff0c;血压162&#xff0c;另一个61岁&#xff0c;血压140。 我们可以使用生存树首先找出他们所属的组。所以我们看到第一个病人的年龄小于60&#…

【CSS 选择器应用在QSS】第二天

CSS 选择器应用在QSS 【1】元素选择器&#xff08;元素通用性&#xff09;【2】id 选择器&#xff08;唯一性&#xff09;【2.1】CSS【2.2】QSS 【3】类选择器【3.1】CSS【3.2】QSS 【4】类选择器&#xff08;只针对指定元素&#xff09;【4.1】CSS【4.2】QSS 【5】通用选择器【…

iptables 防火墙二

目录 SNAT 原理与应用SNAT原理&#xff1a;修改数据包的源地址。 SNAT 实验DNAT原理与应用DNAT原理&#xff1a;修改数据包的目的地址。DNAT转换前提条件&#xff1a; DNAT 示例 SNAT 原理与应用 SNAT 应用环境&#xff1a;局域网主机共享单个公网IP地址接入Internet&#xff…

MyBatis技术练习

一、模仿教程练习增删改查&#xff0c;自己完成一个新表相关操作 1、配置fkxml文件 我们这里的增删改查sql语句必须对应我们自己创建的表 <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.…

实测有效:由于找不到MSVCP140.dll,无法继续执行代码

从解决实际问题的角度上&#xff0c;推荐两种实测有效的方法。 先来说一下msvcp140.dll是什么&#xff1f; msvcp140.dll 是 Microsoft Visual C Redistributable for Visual Studio 2015 库文件的一部分。这个文件是一些需要 Visual Studio 2015 支持的程序所必需的。 如果…

(C语言版)力扣(LeetCode)题库1-5题解析

力扣&#xff08;LeetCode&#xff09;题库1-5题解析 1.两数之和题目解析 2.两数相加题目解法 3.无重复字符的最长字串题目解法 4. 寻找两个正序数组的中位数题目解法 5. 最长回文子串题目解法 结语 1.两数之和 题目 给定一个整数数组 nums 和一个整数目标值 target&#xff…

Java基础--->并发部分(3)【JUC、AQS】

文章目录 AQS&#xff08;AbstractQueuedSynchronizer&#xff09;AQS实现原理AQS操作重点方法 Java并发容器JUC&#xff08;java.util.concurrent&#xff09;ConcurrentHashMapCopyOnWriteArrayList AQS&#xff08;AbstractQueuedSynchronizer&#xff09; AbstractQueuedSy…

如何从其他ETL工具迁移到ETLCloud上?

ETL数据集成工具主要用于将来自不同数据源的数据整合到一个单一的、一致的数据存储库或将数据分发到不同的数据源中&#xff0c;同时也可以把数仓中的数据通过ETL反向输出给业务系统使用。它可以帮助企业解决数据共享问题&#xff0c;同时有效地管理和利用海量数据&#xff0c;…

DAY 61 MySQL高级SQL语句

高级SQL语句&#xff08;进阶查询&#xff09; 先准备2个表 一个location表 use market;create table location(Region char(20),Store_Name char(20));insert into location values(East,Boston);insert into location values(East,New York);insert into location values(W…

python数据可视化显示(附代码)

Python是一种非常流行的编程语言&#xff0c;具有广泛的应用领域&#xff0c;包括数据可视化。在数据可视化中&#xff0c;Python提供了多种工具来帮助用户创建各种类型的图表、图形和可视化效果。本文将介绍Python数据可视化的基本概念、工具和技术&#xff0c;并提供代码示例…

CustomTkinter:【二】颜色和主题、外观模式、缩放、包装

GitHub地址: https://github.com/TomSchimansky/CustomTkinter 官网&#xff1a; https://customtkinter.tomschimansky.com/ 官方教程文档&#xff1a;https://customtkinter.tomschimansky.com/documentation/ 目录 1、颜色和主题2 、外观模式3 、缩放4、包装 1、颜色和主题 …

2023/5/21周报

目录 摘要 论文阅读 1、标题和现存问题 2、各个结构 3、基于GNN-LSTM-CNN 网络轨迹预测模型 4、实验准备 5、实验结果 深度学习 1、费舍尔判别 2、步骤具体化 3、GCN 总结 摘要 本周在论文阅读上&#xff0c;阅读了一篇基于GNN-LSTM-CNN网络的6G车辆轨迹预测算法的…

git pull报没有足够内存 not enough memory for initialization

git clone 或 git pull 批量同步远程 git仓库代码时&#xff0c;报 没有足够内存用于初始化 not enough memory for initialization。经过观察 资源管理器 的内存使用情况&#xff0c;发现为 剩余可用内存不足造成的。加物理内存麻烦&#xff0c;可通过适当调整 分页文件&…

chatgpt赋能Python-pythoncom安装

Pythoncom安装指南 如果你是一位Python编程的爱好者或专业工程师&#xff0c;那么你可能会需要使用Pythoncom库。Pythoncom是Python与COM技术相互操作的重要组件&#xff0c;它可以帮助你实现各种Windows应用程序与Python之间的无缝集成。 什么是Pythoncom Pythoncom是Pytho…

电商项目9:新增商品

电商项目9&#xff1a;新增商品 1、前端1.1、修复前端组件通信问题1.2、引入其他前端代码1.3、会员等级列表1.4、当前分类关联的所有品牌 2、后端2.1、会员系统搭建&#xff08;注册与发现&#xff09;2.2、当前分类关联的所有品牌2.3、获取分类下所有分组&关联属性 1、前端…

网上书店管理系统

系列文章 任务46 网上书店管理系统 文章目录 系列文章一、实践目的与要求1、目的2、要求 二、课题任务三、总体设计1.存储结构及数据类型定义2.程序结构3.所实现的功能函数4、程序流程图 四、小组成员及分工五、 测试添加新的图书购买信息显示所有图书购买信息按购买编号查找图…

软件测试—Selenium01

软件测试—Selenium01 &#x1f50e;自动化测试自动化测试的定义自动化测试的分类 &#x1f50e;SeleniumSelenium 是什么Selenium 的特点Selenium 的原理Selenium Java 的环境搭建Selenium 中常用的 APIBy.cssSelector()By.xpath()By.cssSelector() 与 By.xpath() 的比较 &am…

C++编译和链接

目录 一、源代码的组织 ①头文件&#xff08;*.h&#xff09; ②源文件&#xff08;*.cpp&#xff09; ③主程序&#xff08;main函数所在的程序&#xff09; ④从源代码到可执行文件&#xff0c;编译的过程有三大步骤&#xff1a; 1&#xff09;编译预处理 2&#xff09…

Python学习笔记——《吴恩达Machine Learning》线性回归例程

文章目录 案例背景线性回归&#xff08;Loss Regression&#xff09;梯度下降法&#xff08;批量梯度下降算法——batch gradient descent&#xff09;计算成本函数和梯度下降使用线性回归拟合训练数据模型预测 梯度下降效果可视化完整版demo 案例背景 详情参照吴恩达机器学习…

Linux/Windows安装Maven

一、Linux部署Maven 注意&#xff1a;必须先安装jdk&#xff0c;maven与jdk&#xff08;java -version&#xff09;版本会有对应关系 版本对应&#xff08;必看&#xff01;&#xff09;&#xff1a;http://maven.apache.org/docs/history.html 官方tar包下载地址&#xff1a;h…