Hive是基于Hadoop构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop分布式文件系统中的数据:能够将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能;能够将SQL语句转换为MapReduce任务运行,经过本身的SQL查询分析须要的内容,这套SQL简称Hive SQL,使不熟悉mapreduce的用户能够很方便地利用SQL语言查询、汇总和分析数据。而mapreduce开发人员能够把本身写的mapper和reducer做为插件来支持Hive作更复杂的数据分析。它与关系型数据库的SQL略有不一样,但支持了绝大多数的语句如DDL、DML以及常见的聚合函数、链接查询、条件查询。它还提供了一系列的1:具进行数据提取转化加载,用来存储、查询和分析存储在Hadoop中的大规模数据集,并支持UDF(User-Defined Function)、UDAF(User-Defnes AggregateFunction)和UDTF(User-Defined Table-Generating Function),也能够实现对map和reduce函数的定制,为数据操做提供了良好的伸缩性和可扩展性。算法
Hive不适合用于联机(online)上事务处理,也不提供实时查询功能。它最适合应用在基于大量不可变数据的批处理做业。Hive的特色包括:可伸缩(在Hadoop的集群上动态添加设备)、可扩展、容错、输入格式的松散耦合。sql
Hive的内部表与数据库中的Table在概念上是相似。每个Table在Hive中都有一个相应的目录存储数据。删除表时,元数据与数据都会被删除。数据库
内部表示例:架构
建立数据文件:test_inner_table.txtapp
建立表:create table test_inner_table (key string)分布式
加载数据:LOAD DATA LOCAL INPATH ‘filepath’ INTO TABLE test_inner_table函数
查看数据:select from test_inner_table; select count() from test_inner_tableoop
删除表:drop table test_inner_table性能
外部表指向已经在HDFS中存在的数据,能够建立Partition。外部表加载数据和建立表同时完成(CREATE EXTERNAL TABLE ……LOCATION),实际数据是存储在LOCATION后面指定的 HDFS 路径中,并不会移动到数据仓库目录中。当删除一个External Table时,仅删除该连接。大数据
外部表示例:
建立数据文件:test_external_table.txt
建立表:create external table test_external_table (key string)
加载数据:LOAD DATA INPATH ‘filepath’ INTO TABLE test_inner_table
查看数据:select from test_external_table; •select count() from test_external_table
删除表:drop table test_external_table
Partition对应于数据库中的Partition列的密集索引。在Hive中,表中的一个Partition对应于表下的一个目录,全部的Partition的数据都存储在对应的目录中。
分区表示例:
建立数据文件:test_partition_table.txt
建立表:create table test_partition_table (key string) partitioned by (dt string)
加载数据:LOAD DATA INPATH ‘filepath’ INTO TABLE test_partition_table partition (dt=‘2006’)
查看数据:select from test_partition_table; select count() from test_partition_table
删除表:drop table test_partition_table
Buckets是将表的指定列经过Hash算法进一步分解成不一样的文件存储。它对指定列计算hash,根据hash值切分数据,目的是为了并行,每个Bucket对应一个文件。当须要并行执行Map任务时,桶是不错的选择。
桶的示例:
建立数据文件:test_bucket_table.txt
建立表:create table test_bucket_table (key string) clustered by (key) into 20 buckets
加载数据:LOAD DATA INPATH ‘filepath’ INTO TABLE test_bucket_table
查看数据:select * from test_bucket_table; set hive.enforce.bucketing = true;
视图与传统数据库的视图相似。视图是只读的,它基于的基本表,若是改变,数据增长不会影响视图的呈现;若是删除,会出现问题。若是不指定视图的列,会根据select语句后的生成。
示例:create view test_view as select * from test
对大数据系统来说,数据量大并不可怕,可怕的是数据倾斜。
数据倾斜,是并行处理的数据集中,某一部分的数据显著多于其它部分,从而使得该部分的处理速度成为整个数据集的瓶颈。
在Spark中,同一个Stage的不一样Partition能够并行处理,而具备依赖关系的不一样Stage之间是串行处理的。换句话说,一个Stage所耗费的时间,主要由最慢的那个Task决定。因为同一个Stage内的全部Task执行相同的计算,在排除不一样计算节点计算能力差别的前提下,不一样Task之间耗时的差别主要由该Task所处理的数据量决定。
倾斜表是一种特殊类型的表,其中常常出现的值(重误差)被分割成单独的文件,其他的值将转到其余文件。经过指定偏斜值,Hive会自动将它们分解为单独的文件,并在查询期间能够跳过(或包含)整个文件,从而提升性能。
建立表语法:create table <T> (schema) skewed by (keys) on (values) [STORED as DIRECTORIES];
具体例子: create table T (c1 string, c2 string) skewed by (c1) on ('x1')
存储过程是在数据库系统中为了完成特定功能的SQL 语句集,通过第一次编译后再次调用不须要再次编译,用户经过指定存储过程的名字并给出参数(若是该存储过程带有参数)来执行它。
CREATE PROCEDURE proc_test
BEGIN
Drop table order_base.O_ORDER_DETAIL;
create table order_base.O_ORDER_DETAIL (customernumber string, invoicenumber string, invoicedate string, ordernumber string, itemnumberid string, ordertypeen string, ordertypesc string, salesrepid string, warehouse string, lineamount string, linecostamount string, invoicequantity string, lineno string) clustered by (ordertypeen) into 2 buckets stored as orc TBLPROPERTIES ('transactional'='true');
TRUNCATE TABLE order_base.O_ORDER_DETAIL;
INSERT INTO order_base.O_ORDER_DETAIL select * from ORDER_DETAIL;
update order_base.O_ORDER_DETAIL set itemnumberid=replace(itemnumberid,'*','');
END;
CALL proc_test
执行存储过程
hplsql -f /home/hadoop/proc_test.sql
查询结果
select * from order_base.O_ORDER_DETAIL where ordernumber=8800840;
CLI:command line interface,命令行接口。
Thrift客户端: Hive架构的许多客户端接口是创建在thrift客户端之上,包括JDBC和ODBC接口。
WEBGUI:Hive客户端提供了一种经过网页的方式访问Hive所提供的服务。这个接口对应Hive的HWI组件(Hive Web Interface),生产环境可用Hue组件代替,下图为Hue界面。
慧都数仓建模大师可以快速、高效地帮助客户搭建数据仓库供企业决策分析之用。知足数据需求效率、数据质量、扩展性、面向主题等特色。
跨行业数据挖掘流程
基于企业的业务目标,进行数据理解、数据准备、数据建模,最后进行评价和部署,真正实现数据驱动业务决策。