版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目录目录1一、概念介绍31.1 Cube、维度、度量31.2 OLAP51.3 数据集市51.4 RDD 和 DAG6二、Holodesk 的介绍7三、Holodesk 相关参数检查123.1 fastdisk dir123.2 local dir13四、Holodesk 建表语法144.1 创建 Holodesk 空表144.2 创建 Holodesk 非空表164.3 删除 Holodesk 表174.4 删除 Holodesk 表数据174.5 分区表174.5.1 固定分区表174.5.2 范围分区表21五、Holodesk 表的常见优化方法275.1 小文件入库优化275.2 Hol
2、odesk 表组织成桶285.2.1 分桶字段的选择305.2.2 确定分桶数量305.2.3 创建分桶的方式315.2.4 分桶内部的排序345.3 Index 和 Cube365.3.1 Index.365.3.2 Cube395.3.3 Index 和 Cube 的使用场景介绍425.4 Global Index.445.5 MapJoin.495.5.1 MapJoin 适用条件495.5.2 启用 MapJoin.49六、优化案例526.1 对任务并发处理的用例526.2 Cube 用例546.3 按照字段值存放.576.4 MapJoin 用例586.5 Holodesk V2 与
3、 V1 性能比较64七、Holodesk 表名问题717.1 Metastore 和 Zookeeper717.2 内表和外表727.2.1 内表727.2.2 外表74八、Holodesk 常用开关和注意事项778.1 Hdfs 数据备份的开关778.2 holodesk 是否开启 cube 功能778.3 local mode 超时设置778.4 分桶表注意事项788.5 Rebalance 工具788.6 Clean 工具782一、概念介绍1.1 Cube、维度、度量Data Cube(简称 Cube),即数据立方体,用以表示具有多数列信息的数据集。如Figure 1.1 所示,Cube
4、 实际上是对抽象数据模型的空间式的解释,每个 Cube 都由维度(Dimension)和度量(Measure)两类集合值下的度量值。Cube 中的每个单元内容对应着特定维度Figure 1.1 对 Cube 的图形示意维度是对限制条件的统称,即用户希望用以分析数据的字段,这些字段反应事实的特性,具有提供描述性信息或者指定如何汇总事实数据的能力。注意不要被 Cube 这个名称误导,维度可以大于三维。仅包含维度信息的表称为维度表。度量是基于维度的标准下对用于计算的数值字段的统称,即只有数值字段才有可能属于度量,是所有可以汇总的数字数据。包含度量值的表称为事实表,事实表以一个或多个维度字段为外键,或
5、者理解为索以和维度表相衔接。3一个主要用于保存销售的数据库 Sales_Info。例其中,有三张维度表 Dim_Product、Dim_Customer 和 Dim_Orders,包含的字段分别如下:l Dim_Product:product_id,product_name,manufacturer,production_datel Dim_Customer:customer_id,customer_name,regionl Dim_Orders:order_id,expiry_date,price事实表 Fact_Sale_Volume 包含的字段如下:Fact_Sale_Volume:pr
6、oduct_id,customer_id,order_id,amount,profit。其中只有 amount 和 profit 是度量,其他字段都是维度。事实表 Fact_Sale_Volume 的外键 product_id , customer_id , order_id 分别是维度表Dim_Product、Dim_Customer 和 Dim_Orders 的主键。Figure 1.2 显示了四张表之间的关系。Figure 1.2 Fact_Sale_Volume、Dim_Product、Dim_Customer 和 Dim_Orders 四张表的关系示意41.2 OLAPOnline
7、Analytical Processing(OLAP),中文为联机分析处理,是一项用于弥补关系数据库进行数据综合分析能力不足的一项技术。OLAP 技术的实现基于 Cube 模型概念,面向度多层面,专门为灵活处理大量复杂的数据设计,特别适合服务于企业管理层对于数据在度上的分析,其返回的结果可以为方案、目标的制定起到积极的引导作用。通常企业在分析销售情况、市场状况、财务管理、业务流程管理、预算管理等时涉及该技术的应用。OLAP 实际属于商业智能(BI)应用范畴的一部分,具有模仿管理层进行度思考的能力。它从多角度为用户组建数据模型、提供分析结果,用户在不同维度之间灵活跳转以顾全各方位考虑,接近人类决
8、策思考模式。其中有四个用户经常使用的基本操作:roll-up(合并)、drill down(钻取)、slicing and dicing(切片与切块)、pivot(旋转)。roll-up 负责对数据进行单维或者次的汇总数据,例如计算并得到层面的合并与计算,由低层次的细节数据概括到在不同区域的销售情况。和 roll-up 相反,drill down是从汇总数据到细节数据或者细节维度的分析,例如查看某个区域销售额的每个的具体信息。licing and dicing 是在确定某个或某几个维度上的取值后,从其他剩余维度观察并分析数据,例如查看某一天所有的销售情况。如果剩余维度数量为二,则是 slici
9、ng,若为三,则是 dicing。 pivot 是对维度位置的互换,例如二维时行和列的交换。在 OLAP 配置过的数据库中执行复杂的执行速率。语句,可以获得与普通数据库相比更快的1.3 数据集市数据集市(Data Mart)或者称为数据市场,是从数据仓库(Data Warehouse)中根据需求出的子集,它面向着特定的专业团体,反映了一定的商业性能或者系统功能的特点。数据集市中的彼此之间存在一定的特点共性,不同的数据集市之间既可以表现出差异性也可以表现关联性,可以满足不同特定群体的需求。如果说数据市场对应了一个公司的完整数据的集合,那么数据市场则是将数据按照部门的归类结果,数据集市所属的部门可
10、根据需要,使用、或者增加其中的内容。5创建数据集市的好处是方便用户对于大量数据的使用与分析。用户往往需要在数据集合中寻找对有用的信息,然而在信息量极大的数据库中执行这样的操作是很的,因为里面所含的内容往往是关系不易理清的且具有大量无关信息。数据集市着为特定用户事先计算好的数据,使得对特定数据的变得更容易,提升了语句响应效率,减少了用户的等待时长。另外,数据集市的内容是对历史的快照,对其中数据的分析,可以促使相关业务职能的部门做出更合理的决策和制定更稳妥的战略。1.4 RDD 和 DAGRDD(Resilient Distributed DataSETs),弹性分布式数据集,是分布于不同上的制度
11、的逻辑集合。RDD 是 Spark 中最重要的概念,可以被看做是 Spark 运算的对象。和普通的数据集不同,RDD于集群的内存或者磁盘上,不仅包含数据,而且提供了许多作用于数据的操作接口,并具有数据容错、任务并行处理的能力。RDD 的操作类型主要分为两类:Transformation(转换)和 Action(行动)。Transformation 是将会根据原来的 RDD 创建一个新的 RDD'的一类操作,例如 filter、map、join 等。Action 是经过一定的 方 法 处 理 后 将 结 果 返 回 至 Driver 的 一 类 操 作 , 例 如 reduce 、 co
12、untByKey 、saveAsObjectiveFile 等。由于 Transformation 的作用,原来的 RDD 和新的 RDD'之间会有一定的依赖关系,将完整执行过程中涉及的所有依赖关系组合在一起就了 DAG(Directed Acyclic Graph)即无回路有向图。通过 DAG,我们可以追寻到每个子 RDD 是由哪个父 RDD 转变来的,以及依赖的程度。6二、Holodesk 的介绍于数据集市场景对分析的高性能要求,星环科技(上海)(下面简称星环科技)推出了 Holodesk。Holodesk 作为 Inceptor 中的分布式列式组件,它通过将数据表建在内存或者 S
13、SD 上来提高分析企业级高速分析需求。性能,同时提供以下关键功能特性来满足7功能描述OLAP CubeHolodesk 支持在数据表中内建 Cube,并在数据分析时有效的利用这些 Cube 信息来 分析 。目前对于 10 亿级别的数据量, Transwarp Inceptor 结合 Holodesk 能够在 4 台 X86 PC 服务器组成集群上 5s 内完成实时聚合运算,与传统 Cube 的预先物化计算不同, Holodesk 利用 Cube 信息实时计算,没有过滤条件以及统计粒度的限制,提供完整的 OLAP 能力。索引Holodesk 支持用户对数据列建立索引来,因此对精确并通过智能索引技
14、术自动选择最高效的索引来执行物理计划,从而让 SQL 编程更加简单。为 SSD 优化的模型为了给客户提供更高性价比的解决方案, Holodesk 为 SSD 优化了 模型,从而保证基于 SSD 的 OLAP 性能能够达到基于内存性能的 80%以上,而成本降低到原有 1/10。Inceptor 是 Hadoop 业界首个和 SSD 深度优化的 SQL 执行引擎。容错技术Transwarp Holodesk 通过 Zookeeper 来管理元数据,从而避免因为单点故障而导致的数据丢失,数据 checkpoint 在 HDFS 中。服务在故障恢复之后,Holodesk 能够通过 Zookeeper
15、中的信息自动重建数据与索引,因此有很高的可靠性。Holodesk 是用于应对海量数据 OLAP 高性能分析难题的一款,它着力于交互式分析中即时效率的提高,确保扩展性与稳定性。下图展示了它的组件以及架构方式。Figure 2.1 Holodesk 的组件以及架构8线性扩展Holodesk 中创建一个 Cube 额外消耗的时间和空间是固定的, 创建多个 Cube 的开销是呈线性关系,同时 Cube 的数据也是分散保存在集群各个节点上。另外,通过对 SSD 的 优化与支持,可以将分析容量从基于内存 GB 级扩展到基于 SSD 的 TB 级,同时分析性能与容量随着节点的个数近乎线性增长。SQL 支持使
16、用 Inceptor 作为 SQL 引擎, 支持 SQL 2003 标准以及PL/SQL。与 ORC 相比,Holodesk 更加适合以下场景:当拥有很大的内存或者部署了 SSD 时。推荐用户将 Holodesk 表建于 SSD。如果内存的使用,建议 Holodesk 分配的内存量不超过总内存量的建于内存,必须合理四分之一,同时内存使用情况,避免内存数据进入 swap 分区。过滤高的场景,包括单表扫描和多表 MapJoin 等。聚合率高的场景,例如 GROUP BY 后,信息被大量聚合。对于过滤率高或聚合率高的场景,我们通过 Cube 以及 Index 两种来帮助优化业务执行。运用 Index
17、 以及 Cube过程中,Index 与 Cube 的定义是关键。Index 字段与 Cube组合字段的选取,主要来自于对业务逻辑中维度的取舍,以及对度量条件的选择等。这些将在后面章节做具体介绍。Holodesk 本身属于层,SQL 语句的执行需要交给 Inceptor 计算引擎,Inceptor 主要由两类节点组成:主节点 Inceptor Server,以及计算节点 Executor。SQL 语句由 InceptorServer执行,生成执行计划,最终 RDD 的变换执行过程组成 Transwarp Spark DAG,RDD 中不同的 partition 合理的分配给不同的计算节点 Exe
18、cutor,每个 partition 对应于一个计算子任务,由 Executor 执行具体的计算处理。逻辑如 Figure 2.2 所示。Figure 2.2 Inceptor Server 与 HolodeskInceptor 中一个完整的作业处理流程如 Figure 2.3 所示,其对应如以下的 SQL:9首先由 table_A 与 table_B 构建初始的 RDD1 与 RDD2(RDD 只是数据集合逻辑上概念),然后经过过滤等条件 Transform 为新的 RDD1'与 RDD2',对于 table_A 还有其他的数据转换处理,转化为新的 RDD,由于两表的 JOI
19、N 导致数据 Shuffle,这时候产生了新的Stage(执行的单元),JOIN 产生最终的结果 RDD,这时候并没有发生计算,只是了RDD 之间的转换关系,这就是 SQL 执行的 DAG。最后要将结果取出的 Action 触发整个计算,Stage 的编号从尾向前。在 MapPartition 的 Stage 进行对每个 Partition 数据进行过滤计算,这 现了基于规则的优化,先过滤减少 JOIN 的计算量(优化的基础思路之一,减少Shuffle 的数据量,包括写 SQL 时的优化,如某些场景下写 SQL 的时候可以先 GROUP BY 再 JOIN,而不是先 JOIN 再 GROUP
20、BY)。MapPartition 的 Stage 对应的 Task 个数取决于表的数据切分情况,而类似于 Reduce 的 FileSink Stage 数量一般是 Map 数量与系数 0.6 之积,但是对于聚合率高或者结果集少的情况,可以通过设置 mapred.reduce.tasks 进行设置reduce_tasks 个数,提升 Shuffle 性能,因为 Shuffle 文件的个数为 map_tasks 与 reduce_tasks之积。当然,如果有较为丰富的 SSD,可以将 Shuffle 的数据在 SSD 上,极大提高 Shuffle 性能,因为 SSD 的 IOPS(随机读写性能)
21、是普通磁盘的上千倍。10SELECT FROMtable_A JOIN table_B ONtable_A.id = table_B.idWHEREtable_A.id IN('1234','5678')AND table_A.age > 20AND AND table_B.date > '2015-12-01'Figure 2.3 Inceptor 中处理 SQL 分析语句的流程11三、Holodesk 相关参数检查在使用 Holodesk 之前,必须在 Inceptor 的设置页面中合理配置 Holodesk 相关的主要包括下面的
22、两个目录。,3.1 fastdisk dir内存和 SSD 是 Holodesk 的两种介质。fastdisk dir 是 Holodesk 所在的实际地址。在创建 Holodesk 表之前,用户需要通过在管理界面中查看 fastdisk dir 的位置,检查集群内的内存或者 SSD 是否已专门配置给 Holodesk,并确认所得分配的大小。如不配置为 SSD 地址,则默认配置在 RAM 上。具体过程是,在管理界面的配置页面上找到“ngmr.fastdisk.dir”(可以表格左上方检索栏搜索),选择 Value 值,如 Figure 3.1 所示,可以看到若干服务器节点名称以及对应地址,请根
23、据实际情况对地址值进行修改。Figure 3.1 检查和配置 Holodesk 的所在位置另外存在属性“ngmr.fastdisk.size”, 以供查看和修改 Holodesk 所占的空间比例, 如Figure 3.2 所示。如果0.2 到 0.3 之间。介质是 SSD,建议设置为 0.8 左右;如果是 RAM,建议配置在12Figure 3.2 检查和配置 Holodesk 的占比3.2 local dir“ngmr.localdir”属性负责Shuffle 数据的本地存放位置。如果本地部署了 SSD,则由SSD 保存 Shuffle 数据,该属性值代表位于 SSD 的对应地址;如果未部署
24、 SSD,Shuffle 数据将保存在本地磁盘,该属性值是对应的若干本地磁盘目录。Figure 3.3 展示了在本地配置了SSD 时的情况。Figure 3.3 检查和配置 Shuffle 数据的保存位置13四、Holodesk 建表语法Ø TDH4.6 之前版本的建表语法:Holodesk 表将“cache”属性的值设置为“RAM”或者“SSD”作为开关。实际上,位置均通过 fastdisk dir 配置,“cache”属性值并不表示具体Holodesk 表的创建,因此可以任意选择一个。Ø TDH4.6 版本的建表语法:在哪种介质,只是用来指示类似 ORC 表的创建,建表
25、时使用 STORED AS HOLODESK,指示 holodesk 表的创建。表的位置通过 fastdisk dir 配置。【NOTE】:1)Holodesk 表的操作语句对大小写一律不敏感,这个手册里分大小写只是为了方便将特定操作的名称和列名表名区。2)TDH4.6 及以后版本均支持并推荐使用 STORED AS HOLODESK 建表语法,同时兼容旧的建表语法。4.1 创建 Holodesk 空表Ø TDH4.6 之前版本的建空表语法创建一个空的 Holodesk 表的语法如下:其中 DATATYPE1,DATATYPE2,DATATYPE3 分别定义了 column_name
26、1,14CREATE TABLE holodesk_table_name ( column_name1 DATATYPE1, column_name2 DATATYPE2, column_name3 DATATYPE3,.) TBLPROPERTIES('cache' = 'RAM'或者'SSD');column_name2,column_name3 的数据类型,后面将采用相同的表示方式,不再具体说明。Holodesk 所支持的类型有 boolean,int,byte,short,int,float,double,long,date, times
27、tamp,decimal,string,varchar,不支持嵌套类型。Ø TDH4.6 版本的建空表语法其中 DATATYPE1,DATATYPE2,DATATYPE3 分别定义了 column_name1, column_name2,column_name3 的数据类型,后面将采用相同的表示方式,不再具体说明。Holodesk 所支持的类型有 boolean,int,byte,short,int,float,double,long,date, timestamp,decimal,string,varchar,不支持嵌套类型。【NOTE】之后所有的表操作语法和实例均使用 TDH4.
28、6 版本建表语法。【例如】建立一张名为 holodeskEmployee 的 holodesk 空表,包含有五列字段:“ID”,“Region”,“Sex”,“Department”,“Salary”。15CREATE TABLE holodeskEmployee( ID INT,Region STRING, Sex VARCHAR(4),Department STRING, Salary DECIMAL)STORED AS HOLODESK;CREATE TABLE holodesk_table_name ( COLUMN_NAME1 DATATYPE1, COLUMN_NAME2 DATA
29、TYPE2, COLUMN_NAME3 DATATYPE3,.) STORED AS HOLODESK;4.2 创建 Holodesk 非空表创建一个新的 Holodesk 表,同时导入数据的语法如下:【例如】建立一张名为 holodeskEmployee 的 holodesk 表,同时从 Employee 导入数据。【NOTE】1)如果某列的数据类型为 VARCHAR 则在定义时必须要长度,否则语法报错。另外,如果字段被为 DECIMAL,建议以 DECIMAL(m, n)的格式定义有效位数和精度。2)Holodesk 表仅支持数据表的执行:形式,目前不支持单条数据的。即不可以对其3)Hol
30、odesk 表不支持从本地文件系统或者 HDFS 直接导入数据的 SQL 语法,仅支持插入来源于其他表的全部或部分数据,因此需要先建立 HDFS 外表。 即不可以对其执行:16ûLOAD DATA LOCAL INPATH ' 'INTO TABLE holodesk_table_name;ûINSERT INTO holodesk_table_name VALUES ();CREATE TABLE holodeskEmployee STORED AS HOLODESKCREATE TABLE holodesk_table_name STORED AS HO
31、LODESK4.3 删除 Holodesk 表4.4 删除 Holodesk 表数据4.5 分区表本章我们分别介绍固定分区表和范围分区表的创建、修改以及分区表数据的导入。其中,固定分区与范围分区表的概念如下* 固定分区:一个分区对应分区键的一个值* 范围分区:一个分区对应分区键值的一个范围(区间)【NOTE】:1) Holodesk 的 Partition 在数据前必须创建好相应的 Partition2)目前 Holodesk 的 Partition 分区字段支持int,smallint,tinyint,bigint,Boolean,float,double,decimal(m,n),varc
32、har,string,date,timestamp 等类型4.5.1 固定分区表1)创建空的 holodesk 固定分区表:17TRUNCATETABLEholodesk_table_name;DROPTABLEholodesk_table_name;【NOTE】1)分区表需要指定分区键名称和分区键的数据类型,一张表可以有多个分区键,分区键不能和表中的列名重复,固定分区表建成后,分区键就可以作为一个“伪”列在用。也正因为如此,同一个表的分区键和列不能重名。中使2)固定分区表不能用 CREATE TABLE AS SELECT 方式建表。2)创建分区3)数据18INSERT INTOholode
33、sk_table_name PARTITION(< partition_key1 > = < value1 >,< partition_key2 >= < value2 >,)SELECT< column_name1 >,< column_name2 >,ALTER TABLEholodesk_table_name ADD PARTITION(< partition_key1 > = < value1 >,< partition_key2 > = < value2 >,);C
34、REATE TABLEholodesk_table_name(< column_name1 > < DATATYPE1 >,< column_name2 > < DATATYPE2 >,< column_name3 > < DATATYPE3 >,) PARTITIONED BY(< partition_key1 > < data_type1 >,< partition_key2 > < data_type2 >,) STORED AS HOLODESK;【NOTE】1)数据
35、时,必须指定相应的分区,并且该分区已经通过 alter table 创建。4)其他固定分区表的 DDL 和 DML删除分区添加分区TRUNCATE 分区19TRUNCATE TABLEholodesk_table_name PARTITION(< partition_key1 > = < value1 >,< partition_key2 > = < value2 >,);ALTER TABLEholodesk_table_name ADD PARTITION(< partition_key1 > = < value1 >
36、,< partition_key2 > = < value2 >,);ALTER TABLEholodesk_table_name DROP PARTITION(< partition_key1 > = < value1 >,< partition_key2 > = < value2 >,);< column_name3 >,FROManother_tableWHERECONDITION的 holodesk 固定分区表,分区键为 intType【例 1】建立一张名为 holotest【例 2】建立一张名为 ho
37、lotesttimestampType,doubleType的 holodesk 固定分区表,分区键为20建表CREATE TABLEholotest(id INT) PARTITIONED BY(timestampType TIMESTAMP, doubleType DOUBLE) STORED AS HOLODESK;-创建空表CREATE TABLEholotest(id INT,doubleType DOUBLE) PARTITIONED BY(intType INT) STORED AS HOLODESK;-创建分区ALTER TABLEholotest ADD PARTITION(
38、 intType = 1199231678);INSERT INTOholotest PARTITION(intType = 1199231678) SELECTid, doubleTypeFROMtmptableWHEREintType = 1199231678;-清除数据TRUNCATE TABLEholotest PARTITION(intType = 1199231678);4.5.2 范围分区表1)创建范围分区表并创建 partition21CREATE TABLEholodesk_table_name(< column_name1 > < DATATYPE1 &g
39、t;,< column_name2 > < DATATYPE2 >,< column_name3 > < DATATYPE3 >,) PARTITIONED BY RANGE(< partition_key1 > < data_type1 >,< partition_key2 > < data_type2 >,)(PARTITION partition_name1VALUES LESS THAN(-创建分区ALTER TABLEholotest ADD PARTITION(timestampType
40、 = '2030-11-15 03:39:18',doubleType = 0.599302621669837);INSERT INTOholotest PARTITION(timestampType = '2030-11-15 03:39:18',DOUBLETYPE = 0.599302621669837) SELECTidFROMtmptableWHEREtimestampType = '2030-11-15 03:39:18'AND doubleType = 0.599302621669837;-清除数据TRUNCATE TABLEhol
41、otest PARTITION(timestampType = '2030-11-15 03:39:18',doubleType = 0.599302621669837);【NOTE】1)建表时指定分区键名称和分区键的数据类型,一张表可以有多个分区键,分区键不能和表中的列重复2) 范围分区的关键字是 PARTITIONED by range3) 最后出现的分区可以使用 MAXVALUE 作为上限,MAXVALUE 代表该分区键的数据类型所的最大值4)该建表方式等效以下两个建表语句:22CREATE TABLEholodesk_table_name(< column_nam
42、e1 > < DATATYPE1 >,< column_name2 > < DATATYPE2 >,< column_name3 > < DATATYPE3 >,) PARTITIONED BY RANGE(< partition_key1 > < data_type1 >,< partition_key2 > < data_type2 >,) STORED AS HOLODESK;value11, value21,),PARTITION partition_name2VALUES
43、 LESS THAN(value12, value22,),, PARTITION partition_namekVALUES LESS THAN( MAXVALUE, MAXVALUE,) STORED AS HOLODESK;Ø 3)数据【NOTE】1)数据时,必须指定相应的分区,并且该分区已经被创建23INSERT INTOholodesk_table_name PARTITION partition_name1SELECT< column_name1 >,< column_name2 >,< column_name3 >,< part
44、ition_key1 >,< partition_key2 >,FROManother_tableWHERECONDITION;ALTER TABLEholodesk_table_name ADD PARTITION partrition_name1VALUES less than(value11, value21,);ALTER TABLEholodesk_table_name ADD PARTITION partrition_name2VALUES less than(value12, value22,);ALTER TABLEholodesk_table_name AD
45、D PARTITION partrition_namekVALUES less than(MAXVALUE, MAXVALUE,);2)的列要包含分区键3)目前 holodesk 不支持数据自动寻找分区,的数值范围时需指定目标分区,并满足目标分区4)其他单值分区表 DDL 和 DML删除分区添加分区TRUNCATE分区【NOTE】1)holodesk 的范围分区不支持拆分已有分区。添加范围分区只能增加新的分区,而不能原有的分区。所以,只能向表中末尾的分区之后添加分区,并且新添加的分区的范围和表中已有的分区的范围不能有交集。因为这个限制,如果一张表的最后一个分区是以 MAXVALUE 结尾的,它
46、将不能再增加范围分区。【例 1】建立一张名为 holotest 的 holodesk 范围分区表,分区键为 stringType24TRUNCATE TABLEholodesk_table_name PARTITION partition_name;ALTER TABLEholodesk_table_name ADD PARTITION partitionname VALUES less than(value, value,);ALTER TABLEholodesk_table_name DROP PARTITION partition_name;【例 2】建立一张名为 holotest 的
47、holodesk 范围分区表,分区键为timestampType,doubleType,该表采用的是建表同时创建相应的 partition 方式25建表CREATE TABLEholotest(id INT) PARTITIONED BY RANGE(stringType string) STORED AS HOLODESK;-创建分区ALTER TABLEholotest ADD PARTITION partiton0VALUES less than('zzz');INSERT INTOholotest PARTITION partiton0SELECTid, stringT
48、ypeFROMtmptableWHEREstringType < 'zzz'-创建分区ALTER TABLEholotest ADD PARTITION partiton1VALUES less than(MAXVALUE);INSERT INTOholotest PARTITION partiton1SELECTid, stringTypeFROMtmptableWHEREstringType >= 'zzz'-清除partition0的数据TRUNCATE TABLEholotest PARTITION partiton0;26-建表并创建分区C
49、REATE TABLEholotest(id INT) PARTITIONED BY RANGE(datetype, timestamptype)(PARTITION partiton1VALUES LESS THAN( '1974-10-19','1971-06-18 14:20:43'),PARTITION partiton2VALUES LESS THAN( '2036-01-23','2033-06-23 21:17:19') STORED AS HOLODESK;INSERT INTOholotest PARTITION
50、 partition1SELECTid, dateType,timestamptypeFROMtmptableWHEREdatetype < '1974-10-19'AND timestamptype < '1971-06-18 14:20:43;五、Holodesk 表的常见优化方法为了提高对 Holodesk 表的效率,我们可以在原初始情况的基础上适当的使用某些优化方法。经常采用的优化方法包括:小文件的入库优化,创建分桶,建立 Index 和Cube,建立 Global Index,用 MapJoin。但是如果从已经做了分区的 ORC 表导入数据进入Ho
51、lodesk 表,那么 Holodesk 表就可具有和 ORC 同样的分区特性,一些基于分区的优化策同样适用于 Holodesk。5.1 小文件入库优化Holodesk 以最大容量为 256M 的文件为保存数据,该文件称为 block,每个block 的实际数据大小可以通过集群的 4040 端口查看。执行 SQL 语句时,服务器在默认情况下为每个 block 分别开启一个对应的处理线程。一般情况下这样是合理的,但是小文件过多时会执行效率的问题。automerge 的开启方式如下:“ngmr.partition.automerge = true”表示开启 automerge,它有两种配置合并后
52、Task 任务量的方法。l“ngmr.partition.mergesize = n”,表示额外 merge n 个 block 安排给单个线程处理。n 的默认值为 3,即代表每个 task 处理 4 个 block 的数据。“ngmr.partition.mergesize.mb = m”,表示被 merge 的 blocks 在 HDFS 上的 size 总和不超过 m MBytes。m 的默认值是 8。l可以根据需要仅设置这两个参数其中之一。若将 mergesize.mb 设置为-1,表示忽略merge 之后的 size 限制。在 block 数据量偏少的情况下,单个任务运行的时间短,任
53、务开启的开销很可能占据27SET ngmr.partition.automerge = true; SET ngmr.partition.mergesize = n; SET ngmr.partition.mergesize.mb = m;总开销的大量比例。尤其当小文件数量过于庞大时,过多的线程将导致排队延时的增加。所以对 block 有效的合并处理有助于促进语句执行的高效性。此外, 如果已知数据源中小文件过多, 用户最好在向新表导入数据之前就打开automerge 开关,使一个 Task 处理多个 block。因为同属一个 Task 的结果将被返回在相同文件中,因此导入数据时做任务的合并处理
54、可达到小文件合并效果。然后关闭 automerge开关,今后都不用再对该表开启。除了检查 block 的大小,还可以通过在 4040 端口查看任务第一阶段 Tasks 的数量和每Task 的运行时间是否需要 automerge。第一阶段的 Task 负责 Map 端任务,默认每个Task 服务于一个 block,所以如果第一阶段 Task 过多而且单个执行时间短,表示小体积block 多,Task 运行效率低,需要启用 automerge。注意,不建议为每个线程安排过多的block。在调整相关参数时注意,所设计的下限要尽量保证单个 Task 的处理时间不要低于2s,调整的上限不能使对应 Tas
55、k 的 GC 时间占总执行时间的比例超过 20%。5.2 Holodesk 表组织成桶桶是 bucket 的中文翻译。建桶操作实际是将一张表进一步细分为不同 n 个的 bucket,从 0 至 n-1 将这些 bucket 编号。分桶后,如果 bucket 体积小于 block 的最大容量,那么每个 block 对应一个桶;否则,一个桶由若至不同 bucket 中。lock 保存。数据根据指定字段的列值被分配分配规则如下:对字段值求哈希,这里使用的哈希方法是对 n 取模,取模的结果表示该的bucket 的编号。假设有从 1 到 10 十个值,分配给三个 bucket,根据各值对 10 取模的结果,如 Figure 5.1 所示,为 0 的给第一个桶,为 1 的给第二个桶,为 3 的给第三个桶。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年事业单位行政职位招聘考试模拟试卷
- 2026年能源行业全域运营效率分析报告
- 2026年【地质灾害管理员】考试题库及答案
- 2026年【R2移动式压力容器充装】考试题库及答案解析
- 2026年《医务人员手卫生规范》知识培训考试题(含答案)
- 2026年零售行业数字化转型报告及趋势分析
- 2026年服装行业生产管理及供应链优化报告
- 2026年5G通信设备市场分析报告及未来五年增长预测
- 2026年日用品行业市场机遇与挑战分析报告001
- 2026年旅游行业报告:数字化转型与市场拓展分析001
- 中小学楷书书写规范教学
- 检验检测机构法律法规政策培训测试题及答案
- 5.1.3小数乘法(课件)(共20张)西师大版(新教材)五年级上册
- 2025年上半年CATTI三级笔译实务真题详解(含参考译文)
- 2026年甘肃省兰州新区商贸物流投资集团数投公司大数据专业技术人员招聘10人笔试备考试题及答案详解
- 2026公安联考笔试真题题库及标准答案(公安专业科目完整版)
- 2026年吉林大学中日联谊医院专业技术系列人员招聘笔试参考题库及答案详解
- 护理副高职称评审答辩自我介绍模板
- 2026年陕西省基层法律工作者题库及答案
- 病因考试试题及答案
- 中国国新招聘笔试
评论
0/150
提交评论