欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

hive是什么?hive怎么安装配置?

程序员文章站 2022-05-12 19:12:20
一、HIVE是什么 开发调试麻烦 只能用java开发 需要对hadoop的底层及api比较了解才能开发复杂代码 HQL Hive是基于Hadoop的一个数据仓库工具。可以将结构化的数...

一、HIVE是什么

开发调试麻烦

只能用java开发

需要对hadoop的底层及api比较了解才能开发复杂代码

HQL

Hive是基于Hadoop的一个数据仓库工具。可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

Hive是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HiveQL,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。

Hive不支持在线事务处理,也不支持行级的插入和更新和删除。

----

数据仓库简介

数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它是单个数据存储,出于分析性报告和决策支持目的而创建。 为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制。

----

二、HIVE的安装配置

首先需要hadoop的支持,启动好hadoop

下载:从apache官网下载新版本hive,要注意和hadoop版本的匹配。

支持:

需要对应版本jdk的支持

需要安装并运行hadoop

安装:

将下载好的hive安装包上传到linux中。

解压:tar -zxvf apache-hive-1.2.0-bin.tar.gz

启动:

进入hive/bin目录,直接运行hive命令,即可进入hive提示符。

hive不需要任何配置就可以运行,因为它可以通过HADOOP_HOME环境变量获知hadoop的配置信息。

------------

可能的安装冲突解决:

问题描述:

在使用hadoop2.5.x环境下,启动hive发现报错:

java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected

问题分析:

造成这个错误的原因是因为 jline.Terminal这个类有错误。

经过检查发现,在hadoop/share/hadoop/yarn/lib目录下存在jline-0.9.x.jar

而在hive/lib/目录下存在jline-2.12.jar

重复的包不兼容造成了此问题。

解决方法:

复制hive/lib/jline-2.12.jar替换hadoop/share/hadoop/yarn/lib中的jline-0.9.x.jar,重启hadoop和hive即可。

直接将hadoop升级到更高版本,如2.7.x中已经解决此问题。

------------

三、HIVE入门

$show databases;

执行后发现默认有一个库default

$show tables;

发现没有任何表,证明不use其他库时,默认就是default库。

$create database tedu;

发现在hdfs中多出了/user/hive/warehouse/tedu.db目录

结论1:hive中的数据库对应hdfs中/user/hive/warehouse目录下以.db结尾的目录。

$use tedu;

$create table student (id int,name string);

$show tables;

$desc student;

$show create table student;

发现正确创建出来了表。

发现在hdfs中多出了/user/hive/warehouse/tedu.db/sutdent目录

结论2:hive中的表对应hdfs/user/hive/warehouse/[db目录]中的一个目录

$load data local inpath '../mydata/student.txt' into table student;

发现/user/hive/warehouse/tedu.db/sutdent下多出了文件

$select * from student;

发现查出的数据不正确,原因是建表时没有指定分隔符。默认的分隔符是空格。

$create table student2 (id int,name string) row format delimited fields terminated by '\t';

$load data local inpath '../mydata/student.txt' into table student2;

$select * from student2;

发现正确查询出了数据。

结论3:hive中的数据对应当前hive表对应的hdfs目录中的文件。

$select count(*) from student;

发现执行了mapreduce作业,最终现实了结果

结论4:hive会将命令转换为mapreduce执行。

$use default;

$create table teacher(id int,name string);

发现在hive对应的目录下多出了 tedu.db 文件夹,其中包含user文件夹。

结论5:hive默认的default数据库直接对应/user/hive/warehouse目录,在default库中创建的表直接会在该目录下创建对应目录。