`

Hadoop 之Hive

 
阅读更多
/*
Hive提供了sql语言到map-reduce的映射器
Hive不算是完整的数据库,它是基于hadoop的数据查询分析工具,它不具备行数据的DML操作。
Hive提供了诸如分区,外部表,集合类型列,正则表达式等高级特性。

*/

NoSQL,NOT Only SQL。并非是表格式的数据机构,甚至它的表结构是不固定的。不仅仅用sql来查询。
NewSQL,SQL的逆袭
解决"即席查询"的问题
Hive还不算是完整的数据库系统

数据仓库工具,可以把Hadoop下的原始结构化数据变为Hive中的表。
支持一种与SQL几乎完全相同的语言HiveQL。除了不支持更新,索引和事务,几乎SQL的其他
特征都能支持。
可以看成是SQL到Map-Reduce的映射器。
提供shell,JDBC/ODBC,Thrift,web等接口。


Hive 构架:
Hive用户接口:shell,thrift,web等.
Thrift服务器(Java 接口)
元数据库 "Derby,Mysql"等
解析器
Hadoop


UDF = USER DEFINITION FUNCTION

Hive安装

内嵌模式: 元数据保持在内嵌的Derby模式,只允许一个会话连接。
本地独立模式:在本地安装Mysql,把元数据放在Mysql内。
远程模式:元数据放置在远程的Mysql数据库。

Hive Sql语言
--创建表sql
create table Loc(
CDRID STRING,
IMSI INT,
....
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|'
STORED AS TEXTFILE;

--观看表的描述

DESCRIBE EXTENDED mydb.employees;

--插入数据sql
LOAD DATA LOCAL INPATH '/home/james/location_20120316.txt'
OVERWRITE INTO TABLE LOC;

INSERT OVERWRITE TABLE RESULT
SELECT 
IMSI,IMEI,SUBSTR(CGI,8),STARTTIME,NULL,UPDATETYPE,3......
FROM LOC
WHERE IMSI IS NOT NULL;

--查询SQL
SELECT IMSI,CGI,TIME FROM RESULT;
SELECT BAR FROM POKES LIMIT 5;

--表连接
SELECT RESULT.IMSI,LOC.INSTIME
FROM RESULT JOIN LOC ON (RESULT.IMSI = LOC.IMSI);


--显示库中的表名
show tables;

--删除表
drop table abc;



JDBC/ODBC接口

用户可以像传统关系数据库一样使用JDBC或ODBC连接Hive
目前还不成熟
使用jdbc的方式连接Hive,首先做的事情就是需要启劢hive的Thrift Server,否则连接hive的时候会报connection refused的错误。
启动命令:
hive -- service hiveserver

Hive的数据放在那儿?
数据在HDFS的warehouse目录下,一个表对应一个子目录。
桶与reduce
本地的/tmp目录存放日志和执行计划

集合数据类型
struct('John','Doe')
map('first','john','last','Doe')
array('john','Doe')

使用样例
create table employees(
name STRING,
salary FLOAT,
subordinates ARRAY(<TRING>,
deductions MAP<STRING,FLOAT>,
address STRUCT<street:STRING,city:STRING,state:STRING,zip:INT>);
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
COLLECTION ITEMS TERMINATED BY '\002'
MAP KEYS TERMINATED BY '\003'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;

DDL操作
定义数据库
定义表

--创建和列表数据库
CREATE DATABASE financials;
CREATE DATABASE IF NOT EXISTS financials;
SHOW DATABASES;
SHOW DATABASES LIKE 'h.*'

--改变数据库存放目录
CREATE DATABASE financials
LOCATION '/my/preferred/directory'

--切换数据库
USE financials;
--显示数据库名称
set hive.cli.print.current.db=true;
--删除和更改数据库
DROP DATABASE IF EXISTS financials;
DROP DATABASE IF EXISTS financials CASCADE;
--数据库的扩展属性信息
ALTER DATABASE financials SET DBPROPERTIES('edited-by','Joe Dba');

--外部表
--方便对外部数据文件的阅读,而且不会将数据加载到oracle
Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径, 
不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除, 
而外部表只删除元数据,不删除数据。这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。


CREATE EXTERNAL TABLE IF NOT EXISTS stocks
(
exchange STIRNG,
...
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/data/stocks'

--分区表
--将数据物理上划分,但并不影响sql的操作。
create table employees(
name STRING,
salary FLOAT,
...
)
PARTITIONED BY (country STRING,state STRING);

注意分区关键字并不需要出现在列字段当中。它会自动保存在目录名称中。
分区表的存储:会变成一个子目录里面的一系列文件。

--Strict模式及其对操作的影响
set hive.mapred.mode=strict;

若设置为strict模式,则不允许不指定条件查询,即where中没有分区条件的过滤。
除非设置为nostrict模式。


--列出分区

SHOW PARTITIONS employees PARTITION(country='US');
SHOW PARTITIONS employees PARTITION(country='US','state=AK');

--更改表
alter table xx rename to xx;
--添加分区
alter table xx add if not exists
partition(year=2011,month=1,day=1) location '/logs/2011/01/01'


--列操作
--修改列的类型
alter table xx change column xx int;

--新增列
alter table xx add columns (xx string comment '');
--replace列
alter table log_messages replace columns
(
xx int comment ''
);

DML操作

不支持行级别的DML操作。将数据放入表中的唯一办法就是批量载入。

--数据批量加载语句
Load data local input 'path'
overwrite into table employees
partition(country='US',state='CA')

--insert overwrite语句

insert overwrite table employees
partition(country='US',state='OR')
select * from staged_employees se
where se.cnty='US' and se.st='OR';


--数据插入分区表。Hadoop需要呆板的指定各个分区的数据,然后插入到分区表中。
--除非通过参数开启动态分区插入
FROM staged_employees se
INSERT OVERWRITE table employees
partition(country='US',state='OR')
select * where se.cnty='US' and se.st='OR'
INSERT OVERWRITE table employees
partition(country='US',state='CA')
select * where se.cnty='US' and se.st='CA'
INSERT OVERWRITE table employees
partition(country='US',state='IL')
select * where se.cnty='US' and se.st='IL';

--动态分区插入,不必要指定分区条件。
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nostrict;
set hive.exec.max.dynamic.partitions.pernode=1000;

insert overwrite table employees
partition(country,state)
select ..,se.cty,se.st
from staged_employees se;
--创建表
create table ... as select ...

--导出数据
--由于数据文件本身是文本明文,可以直接使用hdfs的拷贝文件导出
--
INSERT OVERWRITE LOCAL DIRECTORY 'tmp/ca_employees'
select name,salary,address
from employees
where se.state = 'CA';

--使用正则表达式
--查询以prick开头的任意列
SELECT sysmbol,price.* FROM stocks;

--%相当于任意多个字符。_表示任意单个字符
SELECT NAME,ADDRESS.STREET FROM EMPLOYEES WHERE ADDRESS.STREET
LIKE '%Ave.';

--RLIKE 指正则表达式
select name,address.street
from employees where address.street RLIKE '.*(Chicago|Ontario).*';

--explode 函数

select array(1,2,3) from dual;
[1,2,3]

select explode(array(1,2,3)) as elements from src;
1,
2,
3

--嵌套视图
FROM
(
select upper(name),salary,deductions["Federal Taxes"] as fed_taxes,
round(salary*(1-deductions["Federal Taxes"])) as salary_minus_fed_taxes
from employees
)e
select e.name,e.salary_minus_fed_taxes
where e.salary_minus_fed_taxes >70000;

--查询优化小技巧
--加快聚组统计的速度,原理相当于map-reduce中的combine。
--先在每个节点汇总统计,然后将汇总数推送到reduce节点
set hive.map.aggr=true;
select count(*),avg(salary) from employees;


--连接操作,支持大部分的关系代数连接方式(各种内连接,外连接,半连接)
--连接是缓慢的操作!
--原本是将数据送到reduce节点进行连接,使用"map-side joins",它会将两个表中的小表完整的复制到各个存在大表数据的节点,
--然后连接后发送到reduce节点。
--不太成熟,会经常判断失误
支持大部分常见的关系代数连接方式
连接是缓慢的操作
使用map-side joins优化连接.

select /*+ MAPJOIN(d) */
s.ymd,s.symbol,s.price_close,d.dividend
FROM stocks s JOIN dividends d on s.ymd = d.ymd
and s.symbol=d.symbol
where s.symbol='AAPL';

--hive.auto.convert.join=true
--hive 将自动判断是否适合使用mapjoin.
--判断的条件是两个表中的其中小表是否足够小。
--hive.mapjoin.smalltable.filesize=25000000
--此参数是判断小表是否足够小的标准


--排序

order by --全局排序
sort by --多个reduce排序,不保证全局有序.仅在reducer节点内排序
distribute by--将相同的字段值送到同一个reduce节点,通常与sort by一块使用
select s.ymd,s.symbol,s.price_close
from stocks s
distribute by s.symbol
sort by s.symbol asc,s.ymd asc;


cluster by -- 相当于sort by + distribute by 

--bucket 抽样查询
抽样查询时数据分析里常见的操作
select * from number tablesample(BUCKET 3 OUT OF 10 ON rand())s;
--块级抽样
select * from numbersflat TABLESAMPLE(0.1 PERCENT) S;

--视图与索引
--Hive具有与关系型数据库基本类似的视图功能
Hive只有非常简单的索引,关系型数据库的索引时B+树算法
实现的,Hive的索引只是简单低把排序数据放到另外一个表中。

 

分享到:
评论

相关推荐

    Hadoop之hive安装

    Hadoop之Hive安装 本篇文章将指导您如何在CentOS 6.4下安装Hive,并解决可能遇到的错误。 环境及软件介绍 本篇文章使用的环境是CentOS 6.4-x86_64-bin-DVD1.iso,软件版本为Hadoop 2.2.0和Hive 0.12.0,以及MySQL...

    大数据与云计算技术 Hadoop之Hive详解三.rar

    **大数据与云计算技术:Hadoop之Hive详解** 在当今数据驱动的世界中,大数据和云计算技术扮演着至关重要的角色。Hadoop是Apache软件基金会开发的一个开源框架,它为大规模数据处理提供了分布式存储和计算能力。而...

    完整图文版 阿里巴巴数据产品平台 大数据与云计算技术系列教程 Hadoop之Hive学习笔记(共63页).rar

    《阿里巴巴数据产品平台 大数据与云计算技术系列教程:Hadoop之Hive学习笔记》是一部深入探讨Hadoop生态中Hive技术的专业教程。这本笔记共计63页,旨在为读者提供一个全面、系统的学习Hive的平台,帮助读者理解和...

    elasticsearch-hadoop-hive-2.3.4.jar包下载

    elasticsearch-hadoop-hive-2.3.4.jar包下载

    基于Hadoop Hive健身馆可视化分析平台项目源码+数据库文件.zip

    基于Hadoop Hive健身馆可视化分析平台项目源码+数据库文件.zip启动方式 环境启动 hadoop hive2元数据库 sql导入 导入hivesql脚本,修改application.yml 启动主程序 HadoopApplication 基于Hadoop Hive健身馆可视化...

    hadoop,hive安装总结

    【Hadoop与Hive安装详解】 Hadoop和Hive是大数据处理领域中的核心组件,Hadoop提供了分布式存储和计算框架,而Hive则是基于Hadoop的数据仓库工具,用于数据查询和分析。以下是对Hadoop和Hive安装过程的详细解释。 ...

    Hadoop和Hive的安装配置

    在大数据处理领域,Hadoop和Hive是两个非常重要的组件。Hadoop是一个开源框架,主要用于分布式存储和计算大规模数据集,而Hive则是一个基于Hadoop的数据仓库工具,提供了SQL-like查询语言(HQL)来方便地管理和分析...

    hadoop,hive,hbase学习资料

    【标题】:“hadoop,hive,hbase学习资料”是一份综合性的学习资源,涵盖了大数据处理领域中的三个核心组件——Hadoop、Hive和Hbase。这些工具在大数据处理和分析中发挥着至关重要的作用。 【描述】:描述指出这份...

    基于Hadoop+Hive的数据查询优化设计与实现

    "基于Hadoop+Hive的数据查询优化设计与实现" 本文旨在介绍基于Hadoop和Hive的数据查询优化设计与实现,旨在解决大数据处理的需求。该文涵盖了Hadoop和Hive的工作原理、系统设计与实现、数据查询优化等方面的知识点...

    Hadoop+Hive集群搭建步骤

    VM虚拟机上,安装ubantu搭建hadoop+Hive集群,步骤详细。

    hadoop和hive调优个人总结

    hadoop和hive调优个人总结 Hadoop和Hive调优是当前大数据处理中非常重要的一部分,如何提高Hadoop和Hive的性能,将直接影响到整个数据处理的效率和质量。本文将总结个人在学习和测试Hive过程中的调优经验,包括...

    hadoop+hive+mapreduce的java例子

    基于hadoop的Hive数据仓库JavaAPI简单调用的实例,关于Hive的简介在此不赘述。hive提供了三种用户接口:CLI,JDBC/ODBC和 WebUI CLI,即Shell命令行 JDBC/ODBC 是 Hive 的Java,与使用传统数据库JDBC的方式类似 Web...

    Mac 搭建 Hadoop和hive环境.pdf

    ### Mac环境下Hadoop与Hive搭建详解 #### 标题:Mac 搭建 Hadoop和hive环境 #### 描述:手把手教你进行mac搭建hadoop和hive环境 #### 标签:hadoop, hive, mac, mysql #### 详细知识点解析: ##### 一、前言 ...

    大数据离线分析系统,基于hadoop的hive以及sqoop的安装和配置

    本主题将深入探讨如何构建一个基于Hadoop的大数据离线分析系统,并着重讲解Hive和Sqoop的安装与配置。Hadoop是分布式计算框架,而Hive是基于Hadoop的数据仓库工具,用于数据 warehousing 和 SQL-like 查询。另一方面...

    毕业设计,采用Hadoop+Hive构建数据仓库,使用django+echarts构建前端web网站对业务指标进行可视化呈现

    毕业设计,采用Hadoop+Hive构建数据仓库,使用django+echarts构建前端web网站对业务指标进行可视化呈现 1. Hadoop+Hive构建数据仓库 2. django+echarts网站开发 3. 数据清洗,数据模型构建 毕业设计,采用Hadoop+...

    基于hadoop平台hive数据库处理电影数据(8965字数32页).doc

    【标题】:“基于Hadoop平台Hive数据库处理电影数据”的文档详细介绍了如何在Hadoop分布式环境中利用Hive进行大规模电影数据的分析。该系统的主要目标是建立一个分布式Hadoop集群,并在此基础上对电影数据进行深入...

    毕设基于Hadoop+Hive构建数据仓库使用django+echarts构建前端web网站对业务指标进行可视化呈现源码.zip

    毕设基于Hadoop+Hive构建数据仓库使用django+echarts构建前端web网站对业务指标进行可视化呈现源码.zip毕设基于Hadoop+Hive构建数据仓库使用django+echarts构建前端web网站对业务指标进行可视化呈现源码.zip毕设基于...

    Hadoop,Hive,Hbase等框架详解

    该文档保护了目前比较流行的大数据平台的原理过程梳理。Hadoop,Hive,Hbase,Spark,MapReduce,Storm

Global site tag (gtag.js) - Google Analytics