最新动态
Hive3.1.2安装指南
2024-11-19 03:10

【相关文章推荐】《大数据软件安装和基础编程实践指南》,详细指导VirtualBox、Ubuntu、Hadoop、HDFS、Hbase、Hive、MapReduce、Spark、Flink的安装和基础编程 本指南介绍了Hive,并详细指引读者安装Hive。 前面第几章学习指南已经指导大家安装Linux操作系统,并安装配置了Hadoop,但是这只表明我们已经安装好了Hadoop分布式文件系统,而Hive需要另外下载安装,本指南就是详细指导大家安装并配置Hive,完成后大家可以结合厦门大学林子雨编著的《大数据技术原理与应用(第3版)》第9章数据仓库Hive进行深入学习。 备注:在安装Hive3.1.2之前,请首先安装Hadoop3.1.3。

Hive3.1.2安装指南

1. 下载并解压Hive安装包 首先需要下载Hive安装包文件, Hive官网下载地址 也可以直接点击这里从百度云盘下载软件(提取码:ziyu)。进入百度网盘后,进入“软件”目录,找到apache-hive-3.1.2-bin.tar.gz文件,下载到本地。


注意,上面的dblab:dblab是用户组和用户名,如果你当前使用用户名hadoop登录了Linux系统,则把dblab替换成hadoop。 2. 配置环境变量 为了方便使用,我们把hive命令加入到环境变量中去, 请使用vim编辑器打开.bashrc文件,命令如下:


在该文件最前面一行添加如下内容:


HADOOP_HOME需要被配置成你机器上Hadoop的安装路径,比如这里是安装在/usr/localhttps://dblab.xmu.edu.cn/blog/2440-2/hadoop目录。 保存退出后,运行如下命令使配置立即生效:


3. 修改下的hive-site.xml 执行如下命令:


上面命令是将hive-default.xml.template重命名为hive-default.xml; 然后,使用vim编辑器新建一个配置文件hive-site.xml,命令如下:


在hive-site.xml中添加如下配置信息:


然后,按键盘上的“ESC”键退出vim编辑状态,再输入:wq,保存并退出vim编辑器。

这里我们采用MySQL数据库保存Hive的元数据,而不是采用Hive自带的derby来存储元数据。 1.Ubuntu下mysql的安装请参考:Ubuntu安装MySQL 2.下载mysql jdbc 包,下载地址


3. 启动并登陆mysql shell


4. 新建hive数据库


5. 配置mysql允许hive接入:


6. 启动hive 启动hive之前,请先启动hadoop集群。


注意,我们这里已经配置了PATH,所以,不要把start-all.sh和hive命令的路径加上。如果没有配置PATH,请加上路径才能运行命令,比如,本教程Hadoop安装目录是“/usr/local/hadoop”,Hive的安装目录是“/usr/local/hive”,因此,启动hadoop和hive,也可以使用下面带路径的方式:



启动Hive过程中,可能出现的错误和解决方案如下:

【错误1】 java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument 【原因】 com.google.common.base.Preconditions.checkArgument 这是因为hive内依赖的guava.jar和hadoop内的版本不一致造成的。 【解决方法】 1.查看hadoop安装目录下share/hadoop/common/lib内guava.jar版本 2.查看hive安装目录下lib内guava.jar的版本 如果两者不一致,删除版本低的,并拷贝高版本的 问题解决!

【错误2】org.datanucleus.store.rdbms.exceptions.MissingTableException: Required table missing : “VERSION” in Catalog “” Schema “”. DataNucleus requires this table to perform its persistence operations.

【解决方案】 进入hive安装目录(比如/usr/local/hive),执行如下命令:https://dblab.xmu.edu.cn/blog/2440-2/bin/schematool -dbType mysql -initSchema

【错误3】在启动Hive时,有可能会出现Hive metastore database is not initialized的错误,这里给出解决方案。 【解决方案】 解决Hive启动,Hive metastore database is not initialized的错误。出错原因:以前曾经安装了Hive或MySQL,重新安装Hive和MySQL以后,导致版本、配置不一致。解决方法是,使用schematool工具。Hive现在包含一个用于 Hive metastore 架构操控的脱机工具,名为 schematool.此工具可用于初始化当前 Hive 版本的 metastore 架构。此外,其还可处理从较旧版本到新版本的架构升级。所以,解决上述错误,你可以在终端执行如下命令:


执行后,再启动Hive,应该就正常了。

启动进入Hive的交互式执行环境以后,会出现如下命令提示符:


可以在里面输入SQL语句,如果要退出Hive交互式执行环境,可以输入如下命令:



1)Hive基本数据类型

首先,我们简单叙述一下HiveQL的基本数据类型。

Hive支持基本数据类型和复杂类型, 基本数据类型主要有数值类型(INT、FLOAT、DOUBLE ) 、布尔型和字符串, 复杂类型有三种:ARRAY、MAP 和 STRUCT。

a.基本数据类型

  • TINYINT: 1个字节
  • SMALLINT: 2个字节
  • INT: 4个字节
  • BIGINT: 8个字节
  • BOOLEAN: TRUE/FALSE
  • FLOAT: 4个字节,单精度浮点型
  • DOUBLE: 8个字节,双精度浮点型STRING 字符串

b.复杂数据类型

  • ARRAY: 有序字段
  • MAP: 无序字段
  • STRUCT: 一组命名的字段

2)常用的HiveQL操作命令

Hive常用的HiveQL操作命令主要包括:数据定义、数据操作。接下来详细介绍一下这些命令即用法(想要了解更多请参照《Hive编程指南》一书)。

a.数据定义:主要用于创建修改和删除数据库、表、视图、函数和索引。

创建、修改和删除数据库


注意,除 dbproperties属性外,数据库的元数据信息都是不可更改的,包括数据库名和数据库所在的目录位置,没有办法删除或重置数据库属性。

创建、修改和删除表


视图和索引的创建、修改和删除

主要语法如下,用户可自行实现。


因为视图是只读的,所以 对于视图只允许改变元数据中的 tblproperties属性。


这里'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler'是一个索引处理器,即一个实现了索引接口的Java类,另外Hive还有其他的索引实现。


如果使用 deferred rebuild,那么新索引成空白状态,任何时候可以进行第一次索引创建或重建。


用户自定义函数

在新建用户自定义函数(UDF)方法前,先了解一下Hive自带的那些函数。 命令会显示Hive中所有的函数名称:

Hive3.1.2安装指南

若想要查看具体函数使用方法可使用describe function 函数名:

Hive3.1.2安装指南

首先编写自己的UDF前需要继承UDF类并实现evaluate()函数,或是继承GenericUDF类实现initialize()函数、evaluate()函数和getDisplayString()函数,还有其他的实现方法,感兴趣的用户可以自行学习。

另外,如果用户想在Hive中使用该UDF需要将我们编写的Java代码进行编译,然后将编译后的UDF二进制类文件(.class文件)打包成一个JAR文件,然后在Hive会话中将这个JAR文件加入到类路径下,在通过create function语句定义好使用这个Java类的函数。


3)数据操作

主要实现的是将数据装载到表中(或是从表中导出),并进行相应查询操作,对熟悉SQL语言的用户应该不会陌生。

向表中装载数据

这里我们以只有两个属性的简单表为例来介绍。首先创建表stu和course,stu有两个属性id与name,course有两个属性cid与sid。


向表中装载数据有两种方法:从文件中导入和通过查询语句插入。

a.从文件中导入

假如这个表中的记录存储于文件stu.txt中,该文件的存储路径为/usr/local/hadoop/examples/stu.txt,内容如下。

stu.txt:


下面我们把这个文件中的数据装载到表stu中,操作如下:


如果stu.txt文件存储在HDFS 上,则不需要 local 关键字。

b.通过查询语句插入

使用如下命令,创建stu1表,它和stu表属性相同,我们要把从stu表中查询得到的数据插入到stu1中:


上面是创建表,并直接向新表插入数据;若表已经存在,向表中插入数据需执行以下命令:


这里关键字overwrite的作用是替换掉表(或分区)中原有数据,换成into关键字,直接追加到原有内容后。

从表中导出数据

a.可以简单拷贝文件或文件夹

命令如下:


b.写入临时文件

命令如下:


查询操作

和SQL的查询完全一样,这里不再赘述。主要使用select...from...where...等语句,再结合关键字group by、having、like、rlike等操作。这里我们简单介绍一下SQL中没有的case...when...then...句式、join操作和子查询操作。

case...when...then...句式和if条件语句类似,用于处理单个列的查询结果,语句如下:


结果如下:

Hive3.1.2安装指南

连接 连接(join)是将两个表中在共同数据项上相互匹配的那些行合并起来, HiveQL 的连接分为内连接、左向外连接、右向外连接、全外连接和半连接 5 种。

a. 内连接(等值连接) 内连接使用比较运算符根据每个表共有的列的值匹配两个表中的行。

首先,我们先把以下内容插入到course表中(自行完成)。


下面, 查询stu和course表中学号相同的所有行,命令如下:


执行结果如下:

Hive3.1.2安装指南

b. 左连接 左连接的结果集包括“LEFT OUTER”子句中指定的左表的所有行, 而不仅仅是连接列所匹配的行。如果左表的某行在右表中没有匹配行, 则在相关联的结果集中右表的所有选择列均为空值,命令如下:


执行结果如下:

Hive3.1.2安装指南

c. 右连接 右连接是左向外连接的反向连接,将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。命令如下:


执行结果如下:

Hive3.1.2安装指南

d. 全连接 全连接返回左表和右表中的所有行。当某行在另一表中没有匹配行时,则另一个表的选择列表包含空值。如果表之间有匹配行,则整个结果集包含基表的数据值。命令如下:


执行结果如下:

Hive3.1.2安装指南

e. 半连接 半连接是 Hive 所特有的, Hive 不支持 in 操作,但是拥有替代的方案; left semi join, 称为半连接, 需要注意的是连接的表不能在查询的列中,只能出现在 on 子句中。命令如下:


执行结果如下:

Hive3.1.2安装指南

子查询 标准 SQL 的子查询支持嵌套的 select 子句,HiveQL 对子查询的支持很有限,只能在from 引导的子句中出现子查询。

注意,在定义或是操作表时,不要忘记指定所需数据库。

下面我们以词频统计算法为例,来介绍怎么在具体应用中使用Hive。词频统计算法又是最能体现MapReduce思想的算法之一,这里我们可以对比它在MapReduce中的实现,来说明使用Hive后的优势。

MapReduce实现词频统计的代码可以通过下载Hadoop源码后,在 $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar 包中找到(wordcount类),wordcount类由63行Java代码编写而成。下面首先简单介绍一下怎么使用MapReduce中wordcount类来统计单词出现的次数,具体步骤如下:

1)创建input目录,output目录会自动生成。其中input为输入目录,output目录为输出目录。命令如下:


2)然后,在input文件夹中创建两个测试文件file1.txt和file2.txt,命令如下:


3)执行如下hadoop命令:


4)我们可以到output文件夹中查看结果,结果如下:

Hive3.1.2安装指南

下面我们通过HiveQL实现词频统计功能,此时只要编写下面7行代码,而且不需要进行编译生成jar来执行。HiveQL实现命令如下:


执行后,用select语句查看,结果如下:

Hive3.1.2安装指南

    以上就是本篇文章【Hive3.1.2安装指南】的全部内容了,欢迎阅览 ! 文章地址:http://fabua.ksxb.net/quote/912.html 
     动态      相关文章      文章      同类文章      热门文章      栏目首页      网站地图      返回首页 海之东岸资讯移动站 http://fabua.ksxb.net/mobile/ , 查看更多