BI
文章平均质量分 83
wzy0623
25年的数据库、数据仓库、大数据相关工作。《Hadoop构建数据仓库实践》、《HAWQ数据仓库与数据挖掘实战》、《SQL机器学习库——MADlib技术解析》、《MySQL高可用实践》、《Kettle构建Hadoop ETL》、《Greenplum构建实时数据仓库实践》作者。
展开
-
HAWQ技术解析(十) —— 过程语言
HAWQ支持用户自定义函数(user-defined functions,UDF),还支持给HAWQ内部的函数起别名。编写UDF的语言可以是SQL、C、Java、Perl、Python、R和pgSQL。其中除SQL和C是HAWQ的内建语言,其它语言通常被称为过程语言(PLs),支持过程语言编程是对HAWQ核心的功能性扩展。HAWQ我所使用过的SQL-on-Hadoop解决方案中唯一支持过程化编程的原创 2017-03-24 19:48:57 · 5231 阅读 · 1 评论 -
HAWQ技术解析(七) —— 存储分布
在HAWQ中创建一个表时,应该预先对数据如何分布、表的存储选项、数据导入导出方式和其它HAWQ特性做出选择,这些都将对数据库性能有极大影响。理解有效选项 的含义以及如何在数据库中使用它们,将有助于做出正确的选择。一、数据存储模型 create table的with子句用于设置表的存储选项。例如:db1=# create table t1 (a int) with db1-#原创 2017-04-01 16:53:14 · 9532 阅读 · 2 评论 -
HAWQ技术解析(十一) —— 数据管理
一、基本操作1. INSERT 在常用的增删改查数据库操作中,HAWQ仅支持INSERT和SELECT两种,不支持UPDATE和DELETE,这主要是因为HDFS是一个只能追加数据而不能更新的文件系统。SELECT语句最熟悉不过,它应该是数据库中最常用的语句了,在下一篇“查询优化”时再进一步讨论。INSERT语句用于创建表行,该命令需要表名和表中每个列的值。在HAWQ中,该命令有四种原创 2017-04-06 14:39:33 · 9083 阅读 · 5 评论 -
HAWQ技术解析(十二) —— 查询优化
即便对SELECT等数据库查询语句已经很熟悉了,但HAWQ里的查询有其自己的特点,还是需要研究一下。一、HAWQ的查询处理流程 理解HAWQ的查询处理过程有助于写出更加优化的查询。与任何其它数据库管理系统类似,HAWQ也有如下的查询执行步骤:用户使用客户端应用(如psql)连接到HAWQ master主机上的数据库实例,并向系统提交SQL语句。master接收到查询后,由查询编译器解原创 2017-04-14 10:41:50 · 6315 阅读 · 2 评论 -
HAWQ技术解析(十三) —— 资源管理
一、HAWQ如何管理资源 HAWQ使用多种机制管理CPU、内存、I/O、文件句柄等系统资源,包括全局资源管理、资源队列、强制资源使用限额等。1. 全局资源管理 Hadoop通常使用YARN全局管理资源。YARN是一个通用的资源管理框架,为MapReduce作业或其它配置了YARN的应用提供资源。在YARN环境中,资源分配的单位被称为容器(container),YARN还原创 2017-04-21 16:09:45 · 7186 阅读 · 2 评论 -
HAWQ技术解析(十四) —— 高可用性
一、HAWQ高可用简介 HAWQ作为一个传统数仓在Hadoop上的替代品,其高可用性至关重要。通常硬件容错、HAWQ HA、HDFS HA是保持系统高可用时需要考虑并实施的三个层次。另外实时监控和定期维护,也是保证集群所有组件健康的必不可少的工作。 总的来说,HAWQ容错高可用的实现方式包括:硬件冗余master镜像双集群1. 硬件级别的冗余(RAID和JBOD)原创 2017-04-24 17:52:28 · 5380 阅读 · 0 评论 -
HAWQ技术解析(十五) —— 备份恢复
一、为什么还需要备份 HAWQ作为一个数据库管理系统,备份与恢复是其必备功能之一。HAWQ的用户数据存储在HDFS上,系统表存储在master节点主机本地。HDFS上的每个数据块缺省自带三份副本,而且一个数据块的三份副本不会存储在同一个DataNode上,因此一个DataNode节点失效不会造成数据丢失。而配置了HDFS NameNode HA与HAWQ master HA后,Nam原创 2017-04-25 13:51:31 · 3613 阅读 · 0 评论 -
HAWQ技术解析(十六) —— 运维监控
与任何IT系统一样,为了保证HAWQ集群的高可用和高性能,需要进行一系列监控与维护活动。本篇讨论HAWQ推荐的运维与监控活动。一、推荐的监控与维护任务 表1至表5是HAWQ向系统管理员推荐定期执行的活动,包括系统与数据库监控、数据与数据库的维护、补丁与升级等,目的是要确认系统的所有组件都可以正常工作。监控工作有助于在早期发现和诊断问题。维护任务帮助用户保持系统是最新的,应用了所有错误原创 2017-04-27 16:54:56 · 4320 阅读 · 0 评论 -
HAWQ技术解析(十八) —— 问题排查
(原文地址:http://hawq.incubator.apache.org/docs/userguide/2.1.0.0-incubating/troubleshooting/Troubleshooting.html) 本章描述如何解决HAWQ系统中常见的错误和问题。一、查询性能问题 问题:查询慢。 原因:一个查询执行缓慢可能有多个原因。例如,数据分布的翻译 2017-04-28 15:10:30 · 6701 阅读 · 1 评论 -
HAWQ取代传统数仓实践(二)——搭建示例模型(MySQL、HAWQ)
一、业务场景 本系列实验将应用HAWQ数据库,为一个销售订单系统建立数据仓库。本篇说明示例的业务场景、数据仓库架构、实验环境、源和目标库的建立过程、测试数据和日期维度的生成。后面陆续进行初始数据装载、定期数据装载、调度ETL工作流自动执行、维度表技术、事实表技术、OLAP和数据可视化等实验。目的是演示以HAWQ代替传统数据仓库的具体实现全过程。1.操作型数据源 ...原创 2017-05-11 15:31:39 · 10037 阅读 · 2 评论 -
HAWQ取代传统数仓实践(三)——初始ETL(Sqoop、HAWQ)
一、用sqoop用户建立初始抽取脚本 本示例要用Sqoop将MySQL的数据抽取到HDFS上的指定目录,然后利用HAWQ外部表功能将HDFS数据文件装载到内部表中。表1汇总了示例中维度表和事实表用到的源数据表及其抽取模式。 源数据表 HDFS目录 对应EXT模式中的表 抽取模式 customer /data/ext/customer customer 整体、拉取原创 2017-05-12 11:00:54 · 6040 阅读 · 0 评论 -
HAWQ取代传统数仓实践(四)——定期ETL(Sqoop、HAWQ)
一、变化数据捕获(CDC) 初始装载只在数据仓库开始使用前执行一次,然而,必须要周期性地执行装载源数据过程。与初始装载不同,定期装载一般都是增量的,并且需要捕获并且记录数据的变化历史。1. 识别数据源与装载类型 定期装载首先要识别数据仓库的每个事实表和每个维度表用到的并且是可用的源数据。然后要决定适合装载的抽取模式和维度历史装载类型。表1总了本示例的这些信息。 数据原创 2017-05-12 16:03:17 · 5974 阅读 · 9 评论 -
HAWQ取代传统数仓实践(五)——自动调度工作流(Oozie、Falcon)
一旦数据仓库开始使用,就需要不断从源系统给数据仓库提供新数据。为了确保数据流的稳定,需要使用所在平台上可用的任务调度器来调度ETL定期执行。调度模块是ETL系统必不可少的组成部分,它不但是数据仓库的基本需求,也对项目的成功起着举足轻重的作用。本篇说明如何使用HDP中的Oozie和Falcon服务实现ETL执行自动化。一、Oozie简介 Oozie是一个管理Hadoop作业、可伸缩、可原创 2017-05-18 17:35:22 · 8138 阅读 · 4 评论 -
HAWQ取代传统数仓实践(六)——增加列
业务的扩展或变化是不可避免的,尤其像互联网行业,需求变更已经成为常态,唯一不变的就是变化本身,其中最常碰到的扩展是给一个已经存在的表曾加列。 以销售订单为例,假设因为业务需要,在操作型源系统的客户表中增加了送货地址的四个字段,并在销售订单表中增加了销售数量字段。由于数据源表增加了字段,数据仓库中的表也要随之修改。本篇说明如何在客户维度表和销售订单事实表上添加列,并在新列上应用SCD2原创 2017-05-23 17:18:25 · 6078 阅读 · 0 评论 -
HAWQ取代传统数仓实践(七)——维度表技术之维度子集
有些需求不需要最细节的数据。例如更想要某个月的销售汇总,而不是某天的数据。再比如相对于全部的销售数据,可能对某些特定状态的数据更感兴趣等。此时事实数据需要关联到特定的维度,这些特定维度包含在从细节维度选择的行中,所以叫维度子集。维度子集比细节维度的数据少,因此更易使用,查询也更快。 有时称细节维度为基本维度,维度子集为子维度,基本维度表与子维度表具有相同的属性或内容,称这样的维度表具原创 2017-05-24 14:21:20 · 5940 阅读 · 0 评论 -
HAWQ取代传统数仓实践(八)——维度表技术之角色扮演维度
单个物理维度可以被事实表多次引用,每个引用连接逻辑上存在差异的角色维度。例如,事实表可以有多个日期,每个日期通过外键引用不同的日期维度,原则上每个外键表示不同的日期维度视图,这样引用具有不同的含义。这些不同的维度视图具有唯一的代理键列名,被称为角色,相关维度被称为角色扮演维度。 当一个事实表多次引用一个维度表时会用到角色扮演维度。例如,一个销售订单有一个是订单日期,还有一个请求交付日原创 2017-05-25 15:47:41 · 5874 阅读 · 0 评论 -
HAWQ取代传统数仓实践(九)——维度表技术之退化维度
退化维度技术减少维度的数量,简化维度数据仓库模式。简单的模式比复杂的更容易理解,也有更好的查询性能。 有时,维度表中除了业务主键外没有其它内容。例如,在本销售订单示例中,订单维度表除了订单号,没有任何其它属性,而订单号是事务表的主键,这种维度就是退化维度。业务系统中的主键通常是不允许修改的。销售订单只能新增,不能修改已经存在的订单号,也不会删除订单记录。因此订单维度表也不会有历史数据原创 2017-05-26 13:29:04 · 6421 阅读 · 0 评论 -
HAWQ取代传统数仓实践(十)——维度表技术之杂项维度
一、什么是杂项维度 简单地说,杂项维度就是一种包含的数据具有很少可能值的维度。事务型商业过程通常产生一系列混杂的、低基数的标志位或状态信息。与其为每个标志或属性定义不同的维度,不如建立单独的将不同维度合并到一起的杂项维度。这些维度,通常在一个模式中标记为事务型概要维度,一般不需要所有属性可能值的笛卡尔积,但应该至少包含实际发生在源数据中的组合值。 例如,在销售订单中,可原创 2017-05-27 13:59:03 · 5202 阅读 · 0 评论 -
HAWQ取代传统数仓实践(十一)——维度表技术之维度合并
有一种合并维度的情况,就是本来属性相同的维度,因为某种原因被设计成重复的维度属性。例如,在销售订单示例中,随着数据仓库中维度的增加,我们会发现有些通用的数据存在于多个维度中。客户维度的客户地址相关信息、送货地址相关信息里都有邮编、城市和省份。下面说明如何把客户维度里的两个邮编相关信息合并到一个新的维度中。一、修改数据仓库表结构 为了合并维度,需要改变数据仓库表结构。图1显示了修改后的原创 2017-05-31 15:03:12 · 5448 阅读 · 1 评论 -
HAWQ取代传统数仓实践(十二)——维度表技术之分段维度
一、分段维度简介 在客户维度中,最具有分析价值的属性就是各种分类,这些属性的变化范围比较大。对某个个体客户来说,可能的分类属性包括:性别、年龄、民族、职业、收入和状态,例如,新客户、活跃客户、不活跃客户、已流失客户等。在这些分类属性中,有一些能够定义成包含连续值的分段,例如年龄和收入这种数值型的属性,天然就可以分成连续的数值区间,而象状态这种描述性的属性,可能需要用户根据自己的实际业原创 2017-06-01 11:42:25 · 5301 阅读 · 0 评论 -
HAWQ取代传统数仓实践(十三)——事实表技术之周期快照
一、周期快照简介 周期快照事实表中的每行汇总了发生在某一标准周期,如一天、一周或一月的多个度量。其粒度是周期性的时间段,而不是单个事务。周期快照事实表通常包含许多数据的总计,因为任何与事实表时间范围一致的记录都会被包含在内。在这些事实表中,外键的密度是均匀的,因为即使周期内没有活动发生,通常也会在事实表中为每个维度插入包含0或空值的行。 周期快照是在一个给定的时间对事实原创 2017-06-02 15:32:53 · 6544 阅读 · 0 评论 -
HAWQ中的行列转置
行列转置是ETL或报表系统中的常见需求,HAWQ提供的内建函数和过程语言编程功能,使行列转置操作的实现变得更为简单。原创 2017-06-21 17:11:26 · 1400 阅读 · 0 评论 -
HAWQ取代传统数仓实践(十四)——事实表技术之累积快照
一、累积快照简介 累积快照事实表用于定义业务过程开始、结束以及期间的可区分的里程碑事件。通常在此类事实表中针对过程中的关键步骤都包含日期外键,并包含每个步骤的度量,这些度量的产生一般都会滞后于数据行的创建时间。累积快照事实表中的一行,对应某一具体业务的多个状态。例如,当订单产生时会插入一行。当该订单的状态改变时,累积事实表行被访问并修改。这种对累积快照事实表行的一致性修改在三种类型的原创 2017-06-05 14:52:29 · 6655 阅读 · 0 评论 -
HAWQ取代传统数仓实践(十六)——事实表技术之迟到的事实
一、迟到的事实简介 数据仓库通常建立于一种理想的假设情况下,这就是数据仓库的度量(事实记录)与度量的环境(维度记录)同时出现在数据仓库中。当同时拥有事实记录和正确的当前维度行时,就能够从容地首先维护维度键,然后在对应的事实表行中使用这些最新的键。然而,各种各样的原因会导致需要ETL系统处理迟到的事实数据。例如,某些线下的业务,数据进入操作型系统的时间会滞后于事务发生的时间。再或者出现原创 2017-06-08 17:00:26 · 4628 阅读 · 0 评论 -
HAWQ取代传统数仓实践(十七)——事实表技术之累积度量
累积度量指的是聚合从序列内第一个元素到当前元素的数据,例如统计从每年的一月到当前月份的累积销售额。本篇说明如何在销售订单示例中实现累积月销售数量和金额,并对数据仓库模式、初始装载、定期装载做相应地修改。累积度量是半可加的,而且它的初始装载要复杂一些。一、建立累积度量事实表 执行下面的脚本创建month_end_balance_fact事实表,用来存储销售订单金额和数量的月累积值。se原创 2017-06-09 18:38:13 · 3634 阅读 · 0 评论 -
利用Flume将MySQL表数据准实时抽取到HDFS
一、为什么要用到Flume 在以前搭建HAWQ数据仓库实验环境时,我使用Sqoop抽取从MySQL数据库增量抽取数据到HDFS,然后用HAWQ的外部表进行访问。这种方式只需要很少量的配置即可完成数据抽取任务,但缺点同样明显,那就是实时性。Sqoop使用MapReduce读写数据,而MapReduce是为了批处理场景设计的,目标是大吞吐量,并不太关心低延时问题。就像实验中所做的,每天定原创 2017-06-23 17:25:34 · 25623 阅读 · 13 评论 -
HAWQ取代传统数仓实践(十八)——层次维度
一、层次维度简介 大多数维度都具有一个或多个层次。例如,示例数据仓库中的日期维度就有一个四级层次:年、季度、月和日。这些级别用date_dim表里的列表示。日期维度是一个单路径层次,因为除了年-季度-月-日这条路径外,它没有任何其它层次。为了识别数据仓库里一个维度的层次,首先要理解维度中列的含义,然后识别两个或多个列是否具有相同的主题。例如,年、季度、月和日具有相同的主题,因为它们都原创 2017-06-12 17:34:36 · 3997 阅读 · 0 评论 -
HAWQ取代传统数仓实践(十九)——OLAP
一、OLAP简介1. 概念 OLAP是英文是On-Line Analytical Processing的缩写,意为联机分析处理。此概念最早由关系数据库之父E.F.Codd于1993年提出。OLAP允许以一种称为多维数据集的结构,访问业务数据源经过聚合和组织整理后的数据。以此为标准,OLAP作为单独的一类技术同联机事务处理(On-Line Transaction Processing,原创 2017-06-14 13:37:15 · 7312 阅读 · 1 评论 -
HAWQ + MADlib 玩转数据挖掘之(一)——安装
一、MADlib简介 MADlib是Pivotal公司与伯克利大学合作的一个开源机器学习库,提供了精确的数据并行实现、统计和机器学习方法对结构化和非结构化数据进行分析,主要目的是扩展数据库的分析能力,可以非常方便的加载到数据库中, 扩展数据库的分析功能,2015年7月MADlib成为Apache软件基金会的孵化项目,其最新版本为MADlib1.11,可以用在Greenplum、Pos原创 2017-06-30 16:58:09 · 7252 阅读 · 4 评论 -
HAWQ技术解析(五) —— 连接管理
服务器启动后,还要经过一系列配置,才能被客户端程序所连接。本篇说明如何配置客户端身份认证,HAWQ的权限管理机制,HAWQ最常用的命令行客户端工具psql及与mysql命令行常用命令类比,最后还将列举一些客户端连接HAWQ数据库的常见问题排查。一、配置客户端身份认证 上一篇曾经提到,HAWQ系统初始安装后,数据库包含一个预定义的超级用户。这个用户和安装HAWQ的操作系统用户用户具有相原创 2017-03-03 17:46:49 · 7764 阅读 · 4 评论 -
HAWQ + MADlib 玩转数据挖掘之(二)——矩阵
矩阵是Madlib中数据的基本格式,通常是二维的。在Madlib中,数组的概念与向量类似,数组通常是一维的,是矩阵的一种特殊形式。一、矩阵表示 MADlib为矩阵提供了两种表示形式:稠密和稀疏。1. 稠密 矩阵被表示为一维数组的分布式集合,例如3x10的矩阵如下表: row_id | row_vec--------+------------------原创 2017-07-19 18:03:32 · 1369 阅读 · 0 评论 -
HAWQ + MADlib 玩转数据挖掘之(三)——向量
一、定义 这里不讨论向量严格的数学定义。在Madlib中,可以把向量简单理解为矩阵。矩阵是Madlib中数据的基本格式,当矩阵只有一维时,就是向量,1行n列的矩阵称为行向量,m行1列的矩阵称为列向量,1行1列的矩阵称为标量。二、线性代数函数 Madlib的线性代数模块(linalg module)包括基本的线性代数操作的实用函数。利用线性代数函数可以很方便地实现新算法。原创 2017-07-19 18:48:47 · 1701 阅读 · 0 评论 -
HAWQ + MADlib 玩转数据挖掘之(四)——低秩矩阵分解实现推荐算法
一、潜在因子(Latent Factor)推荐算法 本算法整理自知乎上的回答@nick lee。应用领域:“网易云音乐歌单个性化推荐”、“豆瓣电台音乐推荐”等。 这种算法是在NetFlix(没错,就是用大数据捧火《纸牌屋》的那家公司)的推荐算法竞赛中获奖的算法,最早被应用于电影推荐中,在实际应用中比现在排名第一的 @邰原朗所介绍的算法误差(RMSE)会小不少,效率更高。原创 2017-07-20 09:09:50 · 3122 阅读 · 0 评论 -
HAWQ + MADlib 玩转数据挖掘之(七)——关联规则方法之Apriori算法
一、关联规则简介 关联规则挖掘的目标是发现数据项集之间的关联关系,是数据挖据中一个重要的课题。关联规则最初是针对购物篮分析(Market Basket Analysis)问题提出的。假设超市经理想更多地了解顾客的购物习惯,特别是想知道,哪些商品顾客可能会在一次购物时同时购买?为回答该问题,可以对商店的顾客购买记录进行购物篮分析。该过程通过发现顾客放入“购物篮”中的不同商品之间的关联,原创 2017-08-09 11:27:37 · 2599 阅读 · 0 评论 -
HAWQ + MADlib 玩转数据挖掘之(九)——回归方法之Logistic回归
一、回归方法简介 回归指研究一组随机变量(Y1 ,Y2 ,…,Yi)和另一组(X1,X2,…,Xk)变量之间关系的统计分析方法,又称多重回归分析。通常前者叫做因变量,后者叫做自变量。 事物之间的关系可以抽象为变量之间的关系。变量之间的关系可以分为两类:一类叫确定关系,也叫函数关系,其特征是一个变量随着其它变量的确定而确定。另一类关系叫相关关系,变量之间的关系很难用一种精原创 2017-08-16 16:32:01 · 2593 阅读 · 0 评论 -
HAWQ + MADlib 玩转数据挖掘之(十)——图算法之单源最短路径
一、图算法简介1. 定义 在计算中,常将运算方程或实验结果绘制成由若干有标尺的线条所组成的图,称为“算图”。计算时根据已知条件,从有关线段上一点开始,连结相关线段上的点,连线与表示所求量线段的交点即为答案。 无向图、有向图和网络能运用很多常用的图算法。这些算法包括:各种遍历算法(这些遍历类似于树的遍历),寻找最短路径的算法,寻找网络中最低代价路径的算法,用于回答一些简单原创 2017-08-17 15:35:53 · 1195 阅读 · 0 评论 -
HAWQ + MADlib 玩转数据挖掘之(六)——主成分分析与主成分投影
一、主成分分析(Principal Component Analysis,PCA)简介 在数据挖掘中经常会遇到多个变量的问题,而且在多数情况下,多个变量之间常常存在一定的相关性。例如,网站的“浏览量”和“访客数”往往具有较强的相关关系,而电商应用中的“下单数”和“成交数”也具有较强的相关关系。这里的相关关系可以直观理解为当浏览量较高(或较低)时,应该很大程度上认为访客数也较高(或较低原创 2017-08-03 17:28:03 · 3175 阅读 · 0 评论 -
HAWQ + MADlib 玩转数据挖掘之(八)——聚类方法之k-means
一、聚类方法简介 所谓“物以类聚,人以群分”,其核心思想就是聚类。通过聚类,人们能意识到密集和稀疏的区域,发现全局的分布模式,以及数据属性之间有趣的相互关系。 在实践中,聚类往往为分类服务,即先通过聚类来判断事务的合适类别,然后再利用分类技术对新的样本进行分类。分类与聚类的区别是:分类是事先定义好类别,类别数不变,分类需要由人工标注训练得到,属于监督学习范畴。聚类则没有原创 2017-08-14 22:55:00 · 2872 阅读 · 0 评论 -
HAWQ + MADlib 玩转数据挖掘之(十一)——分类方法之决策树
一、分类方法简介1. 分类的概念 数据挖掘中分类的目的是学会一个分类函数或分类模型(也常常被称作分类器),该模型能把数据库中的数据项映射到给定类别中的某一个。分类可描述如下:输入数据,或称训练集(Training Set),是由一条条数据库记录(Record)组成的。每一条记录包含若干个属性(Attribute),组成一个特征向量。训练集的每条记录还有一个特定的类标签(Class L原创 2017-08-24 16:50:18 · 1933 阅读 · 0 评论 -
HAWQ + MADlib 玩转数据挖掘之(五)——奇异值分解实现推荐算法
一、奇异值分解简介 奇异值分解简称SVD(singular value decomposition),可以理解为:将一个比较复杂的矩阵用更小更简单的三个子矩阵的相乘来表示,这三个小矩阵描述了大矩阵重要的特性。SVD的用处有很多,比如:LSA(隐性语义分析)、推荐系统、数据降维、信号处理与统计等。 任何矩阵都可以使用SVD进行分解,对于一个MxN(M>=N)的矩阵M,存在原创 2017-07-20 10:01:02 · 5104 阅读 · 3 评论