Hive 性能
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 的集群上动静增加设施)、可扩大、容错、输出格局的涣散耦合。
外部表
Hive 的外部表与数据库中的 Table 在概念上是相似。每一个 Table 在 Hive 中都有一个相应的目录存储数据。删除表时,元数据与数据都会被删除。
外部示意例:
创立数据文件:test_inner_table.txt
创立表: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_table
删除表: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 界面。
对于慧都数仓建模巨匠
慧都数仓建模巨匠可能疾速、高效地帮忙客户搭建数据仓库供企业决策分析之用。满足数据需要效率、数据品质、扩展性、面向主题等特点。
跨行业数据挖掘流程
基于企业的业务指标,进行数据了解、数据筹备、数据建模,最初进行评估和部署,真正实现数据驱动业务决策。