Hive学习笔记1

第一部分

什么是Hive:

Hive是基于Hadoop之上的数据仓库,数据存放在HDFS上,它同样可以通过ETL来进行数据的抽取、转换和加载。同时Hive可以自己开发Mapreduce程序来完成本身不能提供的数据处理操作。Hive本身就是一个SQL的解析引擎,他将SQL 语句转成Mapreduce任务在hadoop之上执行。

什么是数据仓库:

数据仓库是一个面向主题的,集成的,不可更新的,随时间不变化的数据集合,它用于支持企业或组织的决策分析处理。

针对数据仓库的概念的解释:首先数据仓库中的数据是面向主题的,也就是这些数据的都是为了描述同一类事情,同时它的数据主要用于查询操作,不会对数据仓库中的数据进行删除和更新操作。

OLTP: 联机事务处理(面向的是事务,需要实时的更新操作,银行转账)
OLAP: 联机分析处理(面向历史数据,进行数据的分析与挖掘,主要面向查询,不会做更新和插入数据,推荐系统)

注意:

在搭建数据仓库的过程最常用的两种模型就是:星型模型和雪花模型,雪花模型是在星型模型上发展出来的。什么是星型模型,比如一个商品的推荐系统,主题应该是商品,但是围绕商品的有客户信息、厂家信息、促销信息等很多信息,这样就组成了一个星型模型。但是客户信息中也存在客户的家庭的信息、地址信息等。这样再关联的话就是一个雪花模型了。


第二部分

Hive的体系结构:

Hive将元数据存储在数据库中(metastore),这个数据库支持mysql、derby等数据库中。Hive默认是存储在derby数据库中。
Hive的元数据有哪些? 包括表的名字、表的列和分区及其属性,表的属性包括是否为外部表等,表的数据所在目录等。
首先Hive是基于Hadoop的,所以hive的数据会使用HDFS进行保存,同时hive的查询操作也是转化成hadoop的MapReduce操作,所以在hive中会存在一个Hive Driver:包括编译器、解析器和优化器。
在Hive的驱动之前有访问接口、jdbc以及WebConsole等方式进行操作。当然hive的元信息是存放在关系型数据库中的。
HQL的执行过程:
解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后的Mapreduce调用执行。


第三部分

Hive的安装:

Hive的官网地址: hive.apache.org apache 的历史工程发布页面在: archive.apache.org,在这个页面下可以找到hive工程。这里使用的是0.13版本。

Hive的安装之前需要先将hadoop安装好,hive有三种安装方式:嵌入模式、本地模式、远程模式。

嵌入模式:Hive将元信息存储在Hive自带的Derby数据库中。但是这种操作方式存在一些缺陷: 1. 只允许创建一个连接,也就是只允许一个用户操作hive 2. 多用于Demo

在安装hive之前需要先安装hadoop,然后把hive的压缩包解压,在bin目录下执行./hive进入hive的启动脚本,这种方式就是使用的嵌入式模式启动hive,会在当前目录下生成一个metastore_db的目录,这个就是元信息目录。

本地模式:Hive将元信息存储在mysql数据库中,mysql数据库与hive运行在同一台物理机上。这种方式可以允许多个用户操作hive,可以用于开发和测试。

远程模式:(推荐使用这种方式)hive将元信息存储在mysql数据库中,mysql数据库与hive运行在不同的物理机上。

元信息存储在远程的mysql中。进入远程mysql中,mysql -u … -p … , 进入后使用create database hive创建一个hive数据库来保存元数据。
在hive解压后,把mysql的驱动jar包上传到hive的lib目录中。这样hive才能操作mysql数据库。然后需要更改hive的配置文件。在conf中创建一个hive-site.xml文件,文件的内容如下:

<configuration>
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://ip:3306/hive</value>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>root</value>
    </property>
</configuration>

当配置文件设置完后以后,就可以启动hive了。


第四部分

Hive的管理

使用hive的脚本直接进入hive,或者 hive –service cli

cli常用的命令:

  1. 清屏:ctrl + l 或者 !clear;
  2. 查看数据仓库中的表: show tables;
  3. 查看数据仓库中的函数:show functions;
  4. 查看表结构: desc 表名;
  5. 查看hdfs上的文件列表: dfs -ls /user 查看hadoop上/user上的文件
  6. 执行linux命令: !命令
  7. 执行HQL语句:select * from test;当执行这个语句的时候是不会开启一个MapReduce任务的,因为这个是获取全部的数据,获取全部的数据只需要把所有的数据读取出来就可以了,并不需要启动一个任务。但是在执行select name from test;查询某一个字段的信息的时候就需要启动一个MapReduce任务了。
  8. 可以执行一个sql脚本:source /root/test.sql 这个语句就是启动一个执行sql脚本。这种方式就是和mysql执行外部的信息一样。
  9. hive -S 进入hive启动任务不会产生调试信息,直接产生MapReduce的结果。
  10. hive -e 执行sql语句。hive -e ‘show tables’;这样的执行就直接在linux的命令行操作就行,并不需要进入hive的交互式中执行。

Web界面方式:

启动方式: #hive –service hwi & 在0.13.0中并没有包含web管理的war包,需要自己编译。

下载hive源码包,并且解压源码包,然后进入源码路径下的hwi目录,使用:jar cvfM0 hive-hwi-0.13.0.war -C web/ . 这样就会打成一个war包,把这个war包拷贝到hive的lib目录下,同时需要修改hive-site.xml 配置文件,这个修改可以在wiki上看到。

<property>
  <name>hive.hwi.listen.host</name>
  <value>0.0.0.0</value>
  <description>This is the host address the Hive Web Interface will listen on</description>
</property>
 
<property>
  <name>hive.hwi.listen.port</name>
  <value>9999</value>
  <description>This is the port the Hive Web Interface will listen on</description>
</property>
 
<property>
  <name>hive.hwi.war.file</name>
  <value>lib/hive-hwi-0.13.0.war</value>
  <description>This is the WAR file with the jsp content for Hive Web Interface</description>
</property>

这个就可以使用hive –service hwi启动web服务了,但是在访问这个web应用的时候,浏览器还是报出了500的错误。这个问题需要拷贝jdk的tools.jar 拷贝到hive的lib目录下。

这个时候就可以打开这个web界面了。

hive的远程服务

启动hive的远程服务的命令如下: hive –service hiveserver & 如果要使用jdbc连接hive进行操作,这个时候就需要开启hive的远程服务。


第五部分

Hive的数据类型

  • 基本数据类型:
    tinyint/smallint/int/bigint 整数类型
    float/double 浮点类型
    boolean 布尔类型
    string/varchar/char 字符串类型

  • 复杂数据类型:
    array:数组类型,由一系列相同的数据类型的元素组成
    map:集合类型,包含key->value键值对,可以通过key来访问元素。
    struct:结构类型,可以包含不同数据类型的元素,这些元素可以通 过“点语法”的方式来得到所需要的元素。

create table student (
age int,
name string,
grade array<float>);

插入的时候就是: {1, wangmin, [10,20,30]};

create table student1 (
sid int,
sname string,
grade map<string, float>);

插入数据的时候: {1,wangmin,<'大学语文', 85>}

create table studnet3(
sid int,
sname string,
grades array<map<string, float>>);

插入数据的时候:{1, wangmin, [<'大学语文‘, 12>,<'大学英语’,23>]}

create table student4(
sid int,
info struct<nname:string, age:int, sex:string>);

插入数据的时候:{1, {'wangmin', 23, ‘男’}}
  • 时间类型:
    Date: 日期(年月日)
    Timestamp: 是unix的一个时间偏移量
    select unix_timestamp(); 查看系统的时间偏移量

第六部分

Hive的数据存储

基于HDFS,没有专门的数据存储格式
Hive的数据模型:

表可以分成以下几种:

  • Table 内部表
  • Partition 分区表
  • External Table 外部表
  • Bucket Table 桶表
create table t1
(tid int, tname string, age int);

create table t2
(tid int, tname string age int);
localtion '/mytable/hive/t2';

create table t3
(tid int, tname string, age int)
row format delimited fields terminated by ',';

create table t4
as
select * from sample_date;

create table t5
row format delimited fields terminated by ','
as
select * from sample_data;

分区表:

create table partition_table
(sid int, sname string)
partitioned by (gender string)
row format delimited fields terminated by ',';

创建这张表的时候就是以gender进行分区 分区表能够加快查询效率

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335

推荐阅读更多精彩内容