一、Hive的基本概念

1.1 hive是什么?

(1)Hive是建立在hadoop数据仓库基础之上的一个基础架构;

(2)相当于hadoop之上的一个客户端,可以用来存储、查询和分析存储在hadoop中的数据;

(3)是一种SQL解析引擎,能够将SQL转换成Map/Reduce中的Job在hadoop上执行。

1.2 hive的数据存储特点

(1)数据存储是基于hadoop的HDFS;

(2)没有专门的数据存储格式;

(3)存储结构主要有:数据库、文件(默认可以直接加载文本文件)、表、视图、索引;

说明:hive中的表实质就是HDFS的目录,按表名将文件夹分开,若是分区表,则分区值是子文件夹。这些数据可以直接在M/R中使用。hive中的数据是存放在HDFS中的。

二、hive的系统结构

存储hive的元数据(表及表的属性、数据库名字等)

分析执行hive QL语句,将执行计划投递给hadoop,转到map/reduce执行

2.1 hive的系统结构– metastore存储方式

默认情况,元数据使用内嵌的derby数据库作为存储引擎

将存储数据独立出来,支持多用户同时访问

将metastore独立出来,远程方法调用

三、hive的安装与使用

3.1下载hive源文件,解压hive文件

进入$HIVE_HOME/conf/修改文件

cp  hive-default.xml.template  hive-site.xml
cp  hive-env.sh.template hive-env.sh

修改$HIVE_HOME/bin的hive-env.sh,增加以下三行

HADOOP_HOME=    --hadoop的home目录
export HIVE_CONF_DIR=   --hive的conf目录
export HIVE_AUX_JARS_PATH=   --hive的lib目录

生效文件:

source /hive-env.sh(生效文件)

3.2 配置MySQL的metastore

修改$HIVE_HOME/conf/hive-site.xml

<property>

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

<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>

</property>

<property>

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

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

</property>

<property>

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

<value>root</value>

</property>

<property>

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

<value>123456</value>

</property>

3.3hive临时目录的配置

修改$HIVE_HOME/conf/hive-site.xml

(1)设定数据目录

<property>

<name>hive.metastore.warehouse.dir</name>

<value>/usr/local/hive/warehouse</value>

</property>

(2)设定临时文件目录

<property>

<name>hive.exec.scratdir</name>

<value>/usr/local/hive/tmp</value>

</property>

(3)hive相关日志的目录

<property>

<name>hive.querylog.location</name>

<value>/usr/local/hive/log</value>

</property>

3.4hive的运行模式的指定

Hive的运行模式即任务的执行环境,分为本地与集群两种,我们可以通过mapred.job.tracker 来指明

本地模式设置方式:

hive > set mapred.job.tracker=local;
hive > set hive.exec.mode.local.auto=true;
hive.exec.mode.local.auto.inputbytes.max默认128M

3.5 sqoop的安装

(1)下载、解压:

tar -zxvf sqoop-1.4.4.bin__hadoop-2.0.4-alpha.tar.gz /root
cd /root
ln -s sqoop-1.4.3.bin sqoop

(2)配置sqoop:

vi ~/.bash_profile
export SQOOP_HOME=/usr/local/sqoop
export PATH=$SQOOP_HOME/bin:$PATH

(3)测试连接数据库并列出数据库:

sqoop list-databases --connect jdbc:mysql://localhost:3306/ --username root --password 123456

(4)将mysql中的表导入到hive中:

sqoop import --connect jdbc:mysql://localhost:3306/gwifi --username root --password 123456 --table think_access --hive-import -m 1;

3.6 hive的命令行方式

1、输入#/hive/bin/hive执行应用程序, 或者

#hive
hive> create table test(id int, name string);
hive> show tables;
hive>quit;

查看并修改表与目录之间的关系

#hadoop fs -ls /user/hive/warehouse/

修改参数:hive.metastore.warehouse.dir 表与目录的对应关系

3.6 命令行方式

显示或修改参数值

在代码中可以使用${…}来使用

命名空间 使用权限 描述
hivevar 可读写 $ hive -d name=zhangsan;
hiveconf 可读写 $ hive –hiveconf hive.cli.print.current.db=true;$ hive –hiveconf hive.cli.print.header=true;
system 可读写 java定义的配置属性,如system:user.name
env 只读 shell环境变量,如env:USER

3.7 hive的脚本运行

$>hive -i /home/my/hive-init.sql
$hive>source file

与linux交互命令 !

!ls
!pwd

与hdfs交互命令

dfs -ls /
dfs -mkdir /hive

3.8 hive的jdbc模式

JAVA API交互执行方式

hive 远程服务 (端口号10000) 启动方式

3.9 hive常用的命令– set命令

hive控制台set命令:

set hive.cli.print.current.db=true;
set hive.metastore.warehouse.dir=/hive

hive参数初始化配置set命令:

~/.hiverc

四、HiveQL数据操作

4.1数据类型

1、基本数据类型:与mysql等数据库中基本数据类型类似;

2、复合数据类型:

(1)array 数组类型 如:array[int] 下标访问

(2)struct结构类型 如: struct{name:STRING,age:INT} .访问

(3)Map结构

4.2 数据库/表的定义、操作

默认使用的是“default”数据库,使用命令选择数据库:

hive> use <数据库名>

创建数据库: create database <数据库名>

查看所有数据库: show databases;

查看/删除数据库:desc/drop database <数据库名>;

注:Hive没有 行级别的插入,更新和删除操作,往表中插入数据的唯一方法就是使用成批载入操作

hive>create table 表名(字段名 字段类型,……)

hive>show tables;

hive>create table t2 like t1;

hive> drop table 表名    —删除表

增加列

hive>ALTER TABLE t3 ADD COLUMNS(gender int);

在mysql中hive数据库中show tables; 在TBLS表中可以查看到hie创建的表。

4.3 数据库/表的定义、操作

插入数据:insert overwrite table t_table1 select * from t_table1 where XXXX;

删除数据:insert overwrite table test select * from test where 1=0;

数组类型的表的操作:

定义复合数据类型的表:create table demo_array(id int, mydata array[string])  PARTITIONED BY (dt STRING)  row format delimited fields terminated by ’\t’ collection items terminated by ’|';

–id 与mydata之间是’\t’隔开,其后的mydata数据之间用’|'隔开

4.3.1 Hive的数据模型-管理表

管理表,也称作内部表或受控表

特点:(1)数据全部保存在warehouse目录中;

(2)删除表时元数据和表中的数据都会被删除;

(3)创建表和数据加载可以在同一条语句中实现;

(4)每个表在HDFS中都有相应的目录用来存储表的数据

(5)加载数据的过程,实际数据会被移动到数据仓库目录中;对数据的访问是在数据仓库目录中完成。

4.3.1 Hive的数据模型-管理表

创建数据文件inner_table.dat

创建表

hive>create table inner_table (key string)
row format delimited fields terminated by '\t';
//这个要指定,否则load的时候数据为NULL;

加载数据

hive>load data local inpath '/root/inner_table.dat' into table inner_table;

查看数据

select * from inner_table

select count(*) from inner_table

删除表 drop table inner_table

4.3.2 Hive的数据模型-外部表

包含externable的表叫做外部表

特点:(1)删除外部表只删除metastore的元数据,不删除hdfs中的表数据;

(2)加载数据和创建表是同时完成的,并不会移动到数据,只是与外部数据建立一个链接;删除一个外部表,只是删除了该链接

(3)指向已经在 HDFS 中存在的数据

4.3.2 Hive的数据模型-外部表语法

CREATE EXTERNAL TABLE page_view

( viewTime INT,

userid BIGINT,

page_url STRING,

referrer_url STRING,

ip STRING COMMENT 'IP Address of the User',

country STRING COMMENT 'country of origination‘

)

COMMENT 'This is the staging page view table'

ROW FORMAT DELIMITED FIELDS TERMINATED BY '44'  LINES  TERMINATED BY '12'

STORED AS TEXTFILE

LOCATION 'hdfs://centos:9000/user/data/staging/page_view';

4.3.3 Hive的数据模型-分区表

分区可以理解为分类,通过分类把不同类型的数据放到不同的目录下;

分类的标准就是分区字段,可以一个,也可以多个;

分区表的意义在于优化查询,查询时尽量利用分区字段;如果不使用分区字段,就会全部扫描。

创建数据文件partition_table.dat

创建表

create table partition_table(rectime string,msisdn string) partitioned by(daytime string,city string) row format delimited fields terminated by '\t' stored as TEXTFILE;

加载数据到分区

load data local inpath '/home/partition_table.dat' into table partition_table partition (daytime='2013-02-01',city='bj');

查看数据

select * from partition_table

select count(*) from partition_table

删除表 drop table partition_table

4.3.4 Hive的数据模型-分区表

CREATE TABLE tmp_table #表名

(

title   string, # 字段名称 字段类型

minimum_bid     double,

quantity        bigint,

have_invoice    bigint

)COMMENT '注释:XXX' #表注释

PARTITIONED BY(pt STRING) #分区表字段(如果你文件非常之大的话,采用分区表可以快过滤出按分区字段划分的数据)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY '\001'   # 字段是用什么分割开的

STORED AS SEQUENCEFILE; #用哪种方式存储数据,SEQUENCEFILE是hadoop自带的文件压缩格式

4.4.1 装载数据

从文件中装载数据

hive>LOAD DATA [LOCAL] INPATH '...' [OVERWRITE] INTO TABLE t2 [PARTITION (province='beijing')];

通过查询表重新装载数据

hive>INSERT OVERWRITE TABLE t2 PARTITION (province='beijing') SELECT * FROM xxx WHERE xx

设置job并行数量 hive.exec.parallel =true;

hive.exec.parallel. thread.number =3;

4.4.2 动态分区装载数据

开启动态分区支持

hive>set hive.exec.dynamic.partition=true;

hive>set hive.exec.dynamic.partition.mode=nostrict;

hive>set hive.exec.max.dynamic.partitions.pernode=1000;

#查询字段一样

hive>INSERT OVERWRITE TABLE t3 PARTITION(province, city)

SELECT t.province, t.city FROM temp t;

hive>INSERT OVERWRITE TABLE t3 PARTITION(province='bj', city)

SELECT t.province, t.city FROM temp t WHERE t.province='bj';

单语句建表并同时装载数据

hive>CREATE TABLE t4 AS SELECT ....

select count(0) from (select id from test where name like 'zh%') a join (select id from test where name like '%i%') b on a.id = b.id;

五、hive的存储形式比较

hive在建表时,可以通过‘STORED AS FILE_FORMAT’ 指定存储文件格式。有以下几种:

1.TextFile:存储空间较大,压缩之后的文件不能分割与合并,查询效率低;可直接存储,加载速度最快;

2.sequencefile:hadoop API提供的一种二进制文件支持,存储空间最大,可分割与合并,查询效率高,需要text文件转换来加载

3.RcFile:是一种行列存储相结合的存储方式。(1)将数据按行分块,保证同一个record在一个块上,避免读一个记录需要读取多个block;(2)块数据列式存储,有利于数据压缩和快速的列存取。查询效率最高、存储空间最小、但加载最慢

总结

Hive从概念到安装使用总结的更多相关文章

  1. Hive基础概念、安装部署与基本使用

    1. Hive简介 1.1 什么是Hive Hives是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能. 1.2 为什么使用Hive ① 直接使用 ...

  2. Hive(一)【基本概念、安装】

    目录 一. Hive基本概念 1.1 Hive是什么 1.2 Hive的优缺点 1.3 Hive的架构 1.4 Hive和数据库的区别 二. Hive安装 2.1 安装地址 2.2 Mysql的安装 ...

  3. Hive的三种安装方式(内嵌模式,本地模式远程模式)

    一.安装模式介绍:     Hive官网上介绍了Hive的3种安装方式,分别对应不同的应用场景.     1.内嵌模式(元数据保村在内嵌的derby种,允许一个会话链接,尝试多个会话链接时会报错)   ...

  4. Hive学习之一 《Hive的介绍和安装》

    一.什么是Hive Hive是建立在 Hadoop 上的数据仓库基础构架.它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储.查询和分析存储在 Hadoop 中的大规模数据 ...

  5. Docker教程:dokcer machine的概念和安装

    http://blog.csdn.net/pipisorry/article/details/50920982 Docker machine介绍 做为Docker容器集群管理三剑客之一的Docker ...

  6. Hive/Hbase/Sqoop的安装教程

    Hive/Hbase/Sqoop的安装教程 HIVE INSTALL 1.下载安装包:https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-2.3 ...

  7. Hive 2.1.1安装配置

    ##前期工作 安装JDK 安装Hadoop 安装MySQL ##安装Hive ###下载Hive安装包 可以从 Apache 其中一个镜像站点中下载最新稳定版的 Hive, apache-hive-2 ...

  8. Hive的介绍及安装

    简介 Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件 映射为一张数据库表,并提供类 SQL 查询功能. 本质是将 SQL 转换为 MapReduce 程序. Hive组件 ...

  9. hive学习1(hive基本概念)

    hive基本概念 hive简介 hive是什么 Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能. 为什么使用hive 1)简单易上手.提 ...

随机推荐

  1. Linux 下Mysql自动备份脚本

    backdb.sh 文件 #!/bin/bash USER="root" PASSWORD="888888" DATABASE="mydb" ...

  2. AJAX入门学习(转)

    一.基础概念 1.全称:Asynchronous.JavaScript.And.XML(异步的 JavaScript 和 XML). 2.定义: Ajax不是一个技术,它实际上是几种技术,每种技术都有 ...

  3. DEDECMS织梦列表页每隔N行文章添加一条分隔线

    这是给一个朋友做模板的时候,用到的一个小小的技巧,今天正好用上了,以前看到有人问过不知道解决没有,今天整理了一下,本想保存在自己的电脑里,后来一想,不如咱们一起共享一下,也是对织梦的感恩,有好东西就来 ...

  4. 使用<a>标签,链接到另一个页面

    使用<a>标签可实现超链接,它在网页制作中可以说是无处不在,只要有链接的地方,就会有这个标签. 语法: <a href="目标网址" title="鼠标 ...

  5. Swift - 18 - 数组的基础操作

    //: Playground - noun: a place where people can play import UIKit var str = "Hello, playground& ...

  6. js删除数组指定的某个元素

    1.给js数组对象原型加indexof方法 获得元素索引 Array.prototype.indexOf = function(val) { for (var i = 0; i < this.l ...

  7. JDK1.5中LOCK,Condition的使用

    import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.uti ...

  8. nginx配置无效的问题

    今天修改nginx的一个配置文件,却怎么都没效果,发现是启动nginx指定的配置文件不一样. #ps aux|grep nginx root     17672  0.0  0.0  45856  2 ...

  9. AutoMapper DynamicMap天坑

    如果调用Mapper.DynamicMap该方法,会将所有映射重置为默认映射,即以字段名匹配映射.

  10. 【新手--android日记】实现IOS风格电话界面

    [前言--新手日记] 开始学习android开发,通过做一个通讯录练习,打算实现各种自己想实现的功能. 新手作品,技术含量很浅.主要是记录自己的学习过程. 纯学习之用,求评论,求建议,求教导. [正题 ...