频道栏目
首页 > 网络 > 云计算 > 正文

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

2018-04-11 04:19:16      个评论    来源:tansuoliming的博客  
收藏   我要投稿

一、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库中创建的表直接会在该目录下创建对应目录。

上一篇:什么是shell和shell编程
下一篇:spark学习之IDEA打jar包
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站