您的位置:首页 > 其它

Hive教程

2016-05-13 17:00 197 查看
hive是一个基于hadoop文件系统之上的数据仓库架构。它为数据仓库的管理提供了很多功能:数据ETL(抽取、转换、加载)工具、数据存储管理和大型数据集的查询和分析能力。同时,hive定义了类sql的语言——hive ql。hive ql允许用户进行和sql相似的操作,还允许开发人员方便地使用mapper和reducer操作,这对mapreduce框架是一个强有力的支持。

一、hive简介

hive是什么?

hive是建立在hadoop体系架构上的一个数据仓库基础工具,用来处理结构化数据,使得查询和分析方便;

hive不是

hive不是一个关系型数据库,不提供排序和查询cache功能,不提供在线事务处理,也不提供实时的查询和记录级的更新;

hive特点:

它是存储架构在一个数据库中,并处理数据到hdfs;

它是专为OLAP设计;

提供sql类型语言查询,叫做hive ql或hql;

可扩展、可延展性、良好的容错性和低约束的数据输入格式。

hive架构

hive组件图的结构:



单元名称操作
用户接口/界面Hive是一个数据仓库基础工具软件,可以创建用户和HDFS之间互动。用户界面,Hive支持是Hive的Web UI,Hive命令行,HiveHD洞察(在Windows服务器)。
元数据Hive选择各自的数据库服务器,用以储存表,数据库,列模式或元数据表,它们的数据类型和HDFS映射。
HiveQL处理引擎HiveQL类似于SQL的查询上Metastore模式信息。这是传统的方式进行MapReduce程序的替代品之一。相反,使用Java编写的MapReduce程序,可以编写为MapReduce工作,并处理它的查询。
执行引擎HiveQL处理引擎和MapReduce的结合部分是由Hive执行引擎。执行引擎处理查询并产生结果和MapReduce的结果一样。它采用MapReduce方法。
HDFS 或 HBASEHadoop的分布式文件系统或者HBASE数据存储技术是用于将数据存储到文件系统。

hive工作原理

hive和hadoop之间的工作流程:



二、hive的安装部署

系统环境:

安装hive的前提是必需先安装好hadoop环境。本次安装使用hadoop-2.4.1版本。

java版本是java1.7.0_65

hadoop的安装可以使用:

1.单机环境

2.伪分布环境(本次选用伪分布环境)

3.集群环境

hive的安装模式

1.嵌入模式

元数据信息被存储在hive自带的Derby数据库中;

只允许创建一个连接;

多用于Demo。

2.本地模式

元数据信息被存储在MySQL数据库中;

MySQL数据库与hive运行在同一台物理机上;

多用于开发和测试。

3.远程模式

元数据信息被存储在MySQL数据库中,但是hive和MySQL运行在不同的操作系统上;

允许创建多个连接;

多用于生产环境。

独立模式的安装

准备工作

下载hive安装包,hive-0.9.0.tar.gz。

下载mysql安装包,包括三个:

MySQL-client-5.5.31-2.el6.i686.rpm

MySQL-server-5.5.31-2.el6.i686.rpm

mysql-connector-java-5.1.10.jar。

开始安装

解压:

tar -zxvf hive-0.9.0.tar.gz/home/hadoop


重命名:

mv hive-0.9.0 hive


配置环境变量:

vim /etc/profile


在文件的最后添加hive的配置环境:

export JAVA_HOME=/home/hadoop/app/jdk1.7.0_65/

export HADOOP_HOME=/home/hadoop/app/hadoop-2.4.1/

export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

export HIVE_HOME=/home/hadoop/hive

export PATH=$HIVE_HOME/bin:$PATH


修改后需要使环境变量生效:

source /etc/profile


配置hive相关文件:

进入hive的conf目录下,修改默认模板:

(1)在该目录下,执行命令

mv hive-default.xml.template hive-site.xml


mv hive-env.sh.template hive-env.sh


mv hive-log4j.properties.template hive-log4j.properties


进行重命名。结果如下:

-rw-rw-r--. 1 hadoop hadoop  2378 Apr 24  2012 hive-env.sh

-rw-rw-r--. 1 hadoop hadoop  2422 Apr 24  2012 hive-exec-log4j.properties.template

-rw-rw-r--. 1 hadoop hadoop  2899 May 11 23:02 hive-log4j.properties

-rw-rw-r--. 1 hadoop hadoop 48899 May 12 06:48 hive-site.xml


修改hive-log4j.properties:

#log4j.appender.EventCounter=org.apache.hadoop.metrics.jvm.EventCounter

log4j.appender.EventCounter=org.apache.hadoop.log.metrics.EventCounter


在命令行输入:hive即可进入hive。

至此,hive的嵌入式模式安装完成!可以建立一个简单的hive表:

create table student

(

name string,

sex string,

age int

);


查看表:

show tables;


查看student表的结构:

desc student;


下面安装独立模式,并选择mysql作为元数据库。

创建mysql元数据库:

删除linux上已经安装的mysql相关库信息(切换至root用户):

rpm  -e  xxxxxxx   --nodeps


检查是否删除干净:

rpm -qa |grep mysql


安装mysql服务端:

rpm -i  MySQL-server-5.5.31-2.el6.i686.rpm


启动mysql服务端:

mysqld_safe &


安装mysql客户端:

rpm -i   MySQL-client-5.5.31-2.el6.i686.rpm


用root账户进入mysql:

mysql -uroot


为hive创建相应的mysql账户(账户和密码均为hive),创建hive元数据库,并赋予足够的权限:

create user 'hive' identified by 'hive';


create database hive;


grant all privileges on *.* to 'hive'@'localhost' identified by 'hive';


使之立即生效:

flush privileges;


退出mysql,并使用刚才的hive进行连接:

mysql -uhive -p


提示输入密码,输入hive即可进入mysql。

使用mysql作为hive的metastore:

把mysql的jdbc驱动包放置到hive的lib目录下:

cp /home/hadoop/mysql-connector-java-5.1.10.jar /home/hadoop/hive/lib


在hdfs上创建目录,并修改权限:

hadoop fs -mkdir /tmp/hive


hadoop fs -chmod -R 777 /tmp/hive


配置相应的hive-site.xml文件,修改如下信息:

<property>

<name>javax.jdo.option.ConnectionURL</name>

<value>jdbc:mysql://localhost:3306/hive</value>

</property>

<property>

<name>javax.jdo.option.ConnectionDriverName</name>

<value>com.mysql.jdbc.Driver</value>

</property>

<property>

<name>javax.jdo.option.ConnectionUserName</name>

<value>hive</value>

</property>

<property>

name>javax.jdo.option.ConnectionPassword</name>

<value>hive</value>

</property>


启动hive shell:

hive


或启动静默模式:

hive -S


至此hive的独立模式安装完毕!

远程模式和独立模式差不多,区别就是mysql安装在另一台设备上面。需要修改:

<property>

<name>javax.jdo.option.ConnectionURL</name>

<value>jdbc:mysql://<远程主机IP>:3306/hive</value>

</property>


三、hive的操作

安装好了hive以后,就可以使用不同的方式对hive数据仓库中的数据进行管理。hive为我们提供了几种不同的方式来管理数据。hive的启动方式:

CLI(命令行)方式(重点介绍)

Web界面方式

远程服务启动方式

CLI(命令行)方式

直接输入hive(hive -S静默模式)

输入hive –service cli

常用的CLI命令

清屏:

Ctrl+l或者!clear


查看数据仓库中的表:

show tables;


查看数据仓库中内置的函数:

show functions;


查看表的结构:

desc 表名;


查看HDFS上的文件:

dfs -ls 目录;


在hive里面操作linux操作系统的命令:

! 命令;


执行HQL语句:

select *** from ***;


执行SQL的脚本:

source SQL文件;


在linux操作系系统上执行hive命令:

hive -e 'hive命令';
hive -S -e 'hive命令';(静默模式)


hive的数据类型

hive是一个数据仓库,本质上也是一个数据库。所以可以在hive里面创建表,保存数据。创建表就会有相对应的列,而列就有相对应的类型。hive里面可以将数据类型分为一下三种:

基本数据类型

复杂数据类型

时间数据类型

基本数据类型

tinyint/smallint/int/bigint:整数类型

float/double:浮点数类型

boolean:布尔类型

string:字符串类型

复杂数据类型

Array:数组类型,由一系列相同数据类型的元素组成

Map:集合类型,包含key->value键值对,可以通过key来访问元素

Struct:结构类型,可以包含不同数据类型的元素。这些元素可以通过“点语法”的方式来得到所需要的元素

时间类型

Date:从hive0.12.0开始支持

即日期,分为年、月、日。

Timestamp:从hive0.8.0开始支持

与时区无关。

当前系统的时间戳:

select unix_timestamp();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: