- 博客(248)
- 资源 (31)
- 收藏
- 关注

原创 数据仓库 Inmon与Kimball数仓理论对比
Kimball和Inmon是两种主流的数据仓库方法论,分别由 Ralph Kimbal大神 和 Bill Inmon大神提出,在实际数据仓库建设中,业界往往会相互借鉴使用两种开发模式Inmon和Kimball是数据仓库领域伟大的开拓者,他们均多年从事数据仓库的研究,Inmon还被称为“数据仓库之父”。Inmon的《数据仓库》和Kimball的《数据仓库工具箱》都是此领域的经典之作。后来人把这两...
2020-03-21 23:31:15
7228
1
原创 hive解析json数组 array json
在hive的内置函数中,提供了两个函数用来解析json,分别是get_json_object和json_tuple以下出现的hive函数不懂的请到 hive2.0中常用的内置函数大全 这篇博客去查看了解首先来查看下get_json_object函数的详细信息> desc function extended get_json_object;OKtab_nameget_json_object(json_txt, path) - Extract a json object from pa.
2020-12-06 11:18:02
3638
1
原创 Hive优化-大表join大表优化
5、大表join大表优化 如果Hive优化实战2中mapjoin中小表dim_seller很大呢?比如超过了1GB大小?这种就是大表join大表的问题。首先引入一个具体的问题场景,然后基于此介绍各自优化方案。 5.1、问题场景 问题场景如下: A表为一个汇总表,汇总的是卖家买家最近N天交易汇总信息,即对于每个卖家最近N天,其每个买家共成交了多少单,总金额是多少,假设N取90天,汇总值仅取成交单数。 A表的字段有:buyer_id、selle
2020-08-10 15:13:33
10171
2
原创 【hive】cube和rollup/grouping sets函数
cube数据立方体(Data Cube),是多维模型的一个形象的说法.(关于多维模型这里不讲述,在数据仓库设计过程中还挺重要的,有兴趣自行查阅) 立方体其本身只有三维,但多维模型不仅限于三维模型,可以组合更多的维度 为什么叫数据立方体? 一方面是出于更方便地解释和描述,同时也是给思维成像和想象的空间; 另一方面是为了与传统关系型数据库的二维表区别开来 下图为数据立方体的形象图其实并不用把cube理解得很高大上,只要理解为分别按照不同维度进行聚合. hive中也有cube函数,可以实现
2020-08-09 17:41:45
1707
1
原创 Hive中的排序及优化 ORDER BY, SORT BY, DISTRIBUTE BY, CLUSTER BY
Hive 提供了多重排序语句,我们这里对这几种排序方法做一解析,并进行测试编排如下: 试验场景 Hive 中的 ORDER BY 与其不足 Hive 中的 SORT BY,DISTRIBUTE BY Hive 中的CLUSTER BY 与其不足 完成相同功能的Job 执行时长对比实验场景:我们创建了一个按天分区的分区表,将数据按天分区。CREATE EXTERNAL TABLE `clickcube_mid`(`logtyp...
2020-08-09 16:35:30
2770
原创 数仓中面向主题的含义及场景详解
面向主题面向主题是数仓的四大特点之一,听起来很高大上,但是细细理解起来却有些费劲,本文主要是记录一下个人的理解,参考互联网上各种博客进行理解。概念解析抽象概念 主题(Subject) :在较高层次上将企业信息系统中数据进行综合、归类分析利用。属于一个抽象概念,每一个主题基本对应一个宏观分析领域。 逻辑概念 主题(Subject)是对应企业中某一宏观分析领域所涉及的分析对象(重点是分析的对象,对象,仔细理解一下对象的含义)。例如:"销售分析"就是一个分析领域,这个"销售分析"所涉及到的分
2020-08-08 19:17:53
5469
1
原创 SQL 先进先出的库龄计算
库存信息:现有一表记录产品进出库product_id(产品代码) inoutdate(出入库日期) qty(数量)001 20200701 10001 20200703 -8001 20200704 -1001 20200705 ...
2020-08-05 22:01:33
5316
2
原创 SQL 求某天各个直播间最大在线人数
如下需求:一张表有如下字段:1)直播间: live_id2)用户:userid3)时间戳:date_stamp4)登陆类型:entry_type (登入和登出)求直播间在某一天同一时间点的最大在线用户数?逻辑说明:将直播间每登陆一个记为1,每登出一个记为-1,如此将会登陆和登出出现抵消,然后再根据时间进行排序求和。WITH live_tab as (select 1 live_id,'A' userid,to_date('20200801 10:00:00','yyyy
2020-08-05 20:15:27
4344
原创 无懈可击的数据仓库体系规划及实施流程
作者介绍水大人,数据开发小哥,爱折腾、爱记笔记,热衷方法论提炼和效率提升。虽然半路出家,但致力于全栈远景。《七天数据埋点之旅》系列作者。一、前言数仓规划是数仓建设的蓝图,涵盖从需求分析开始到最终的数仓评估验收整个环境;数仓规划之所以重要,是因为它是描述了数据流动的概念性框架,为元数据管理奠定了基础,对数据加工过程的理解、数仓建设的交流分享、数据的使用和问题排查、数仓健康度的评估都提供了极大的帮助。需要强调的是本节是从宏观上描述数仓的框架,具体到数据模型的细节对比、存储选型和管理、接入数据源管
2020-08-04 22:29:59
739
原创 数据仓库维度建模建设步骤
一、数据仓库的架构数据仓库(Data Warehouse DW)是为了便于多维分析和多角度展现而将数据按特定的模式进行存储所建立起来的关系型数据库,它的数据基于OLTP源系统。数据仓库中的数据是细节的、集成的、面向主题的,以OLAP系统的分析需求为目的。数据仓库的架构模型包括了星型架构(图二:pic2.bmp)与雪花型架构(图三:pic3.bmp)两种模式。如图所示,星型架构的中间为事实表,四周为维度表,类似星星;而相比较而言,雪花型架构的中间为事实表,两边的维度表可以再有其关联子表,从而表达了清晰
2020-08-04 22:22:45
2817
原创 深度剖析Hive GroupBy,Distinct 与 Join 原理
Hive 中的 GroupBy, Distinct 和 JoinGroupBy 几种 Mode 原理 相关参数 Distinct Single Distinct Multi Distinct Join Common Join Map Join——Hive MapJoin 优化历程、FaceBook Join优化 Skew Join——Skewed Join Optimization Bucket Join 本文将介绍 Hive GroupBy,Distin
2020-07-30 10:26:58
1461
原创 Hive性能调优之Group By
默认情况下,map阶段同一key数据分发给同一reduce,如果单一key过大就很容易造成数据倾斜。(100条数据分组后一组90条,一组10条,这就会数据倾斜)这样的话,我们就可以预先在map端进行一些聚合操作,减轻reduce端的压力。常用参数:--是否在 Map 端进行聚合,默认为 Truehive.map.aggr = true--在 Map 端进行聚合操作的条目数目hive.groupby.mapaggr.checkinterval = 100000--有数据倾斜的时候进行负载
2020-07-29 10:54:19
1164
原创 Hive Group By的实现原理
group by多字段select rank, isonline, count(*) from city group by rank, isonline;将GroupBy的字段组合为map的输出key值,利用MapReduce的排序,在reduce阶段保存LastKey区分不同的key。MapReduce的过程如下(当然这里只是说明Reduce端的非Hash聚合过程)group by单字段group by 单字段和多字段时的不同在于key上,以如下例子为例(出处太多):SELECT ui
2020-07-29 10:52:11
2590
原创 数据仓库、主题域、主题概念与定义
一、数据仓库 关于数据仓库概念的标准定义业内认可度比较高的,是由数据仓库之父比尔·恩门(Bill Inmon)在1991年出版的“Building the Data Warehouse”(《建立数据仓库》)一书中所提出: 中文定义:数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理决策。 英文定义:A data warehouse is a subject-oriented, integrated, nonvolatile, and ...
2020-07-27 11:14:20
6565
原创 HIVE小文件合并(Map输入端、Map/Reduce输出端合并)
背景Hive query将运算好的数据写回hdfs(比如insert into语句),有时候会产生大量的小文件,如果不采用CombineHiveInputFormat就对这些小文件进行操作的话会产生大量的map task,耗费大量集群资源,而且小文件过多会对namenode造成很大压力。所以Hive在正常job执行完之后,会起一个conditional task,来判断是否需要合并小文件,如果满足要求就会另外启动一个map-only job 或者mapred job来完成合并参数解释hi.
2020-07-25 19:42:37
3046
原创 美团配送数据治理实践【转载美团技术团队博客】
大数据时代的到来,让越来越多的企业看到了数据资产的价值。将数据视为企业的重要资产,已经成为业界的一种共识,企业也在快速探索应用场景和商业模式,并开始建设技术平台。但这里要特别强调一下,如果在大数据“拼图”中遗忘了数据治理,可能再多的技术投入也是一种徒劳。因为没有数据治理这一环节,其带来后果往往是:随处可见的数据不统一,难以提升的数据质量,难以完成的模型梳理,难以保障的数据安全等等,源源不断的基础性数据问题会进一步产生,进而导致数据建设难以真正发挥其商业价值。因此,消除数据的不一致性,建立规范的数据标
2020-07-23 17:14:11
1026
原创 HIVE SQL 将父子/树形结构转换成层级结构
如下需求:将左边父子结构转换成右边层级结构(转换到三个层级即可)。难点解析:父子层级表难点主要在层级深度,父子结构解析需要自连接及id=parent_id逐步进行处理,第一次连接可以获取到两个层级,当第二次自连接即可获取到第三个层级with area_info as (select 1 as id, '北京市' as name, 0 as parent_id union all select 2 as id, '山东省' as name, 0 as parent_id uni
2020-07-20 21:31:16
5508
1
原创 剖析linux下的零拷贝技术(zero-copy)
原文链接:https://www.jianshu.com/p/fad3339e3448本文探讨Linux中主要的几种零拷贝技术以及零拷贝技术适用的场景。为了迅速建立起零拷贝的概念,我们拿一个常用的场景进行引入:引文##在写一个服务端程序时(Web Server或者文件服务器),文件下载是一个基本功能。这时候服务端的任务是:将服务端主机磁盘中的文件不做修改地从已连接的socket发出去,我们通常用下面的代码完成:while((n = read(diskfd, buf, BUF_S..
2020-07-19 23:11:00
298
转载 Hadoop YARN:调度性能优化实践【转载】
原文链接:https://tech.meituan.com/2019/08/01/hadoop-yarn-scheduling-performance-optimization-practice.html背景YARN作为Hadoop的资源管理系统,负责Hadoop集群上计算资源的管理和作业调度。美团的YARN以社区2.7.1版本为基础构建分支。目前在YARN上支撑离线业务、实时业务以及机器学习业务。离线业务主要运行的是Hive on MapReduce, Spark SQL为主的数据仓库作业
2020-07-19 19:09:47
367
原创 YARN调度器(Scheduler)详解
转载:https://my.oschina.net/u/4350851/blog/3443167理想情况下,我们应用对Yarn资源的请求应该立刻得到满足,但现实情况资源往往是有限的,特别是在一个很繁忙的集群,一个应用资源的请求经常需要等待一段时间才能的到相应的资源。在Yarn中,负责给应用分配资源的就是Scheduler。其实调度本身就是一个难题,很难找到一个完美的策略可以解决所有的应用场景。为此,Yarn提供了多种调度器和可配置的策略供我们选择。YARN架构如下:ResourceMana.
2020-07-19 16:26:30
1357
原创 解决Hive创建文件数过多的问题
一. Hive的创建文件数的限制Hive对文件创建的总数是有限制的,这个限制取决于参数:hive.exec.max.created.files,默认值是10000。如果现在你的表有60个分区,然后你总共有2000个map,在运行的时候,每一个mapper都会创建60个文件,对应着每一个分区,所以60*2000> 120000,就会报错:exceeds 100000.Killing the job解决办法:最简单的解决办法就是调大hive.exec.max.created.files参数
2020-07-19 16:23:02
929
原创 Linux 源码安装 Python3
Linux 源码安装 Python3下载源码包https://www.python.org/downloads/ 解压(以3.64版本为例) wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tgz tar -zxvf Python-3.6.4.tgz cd Python-3.6.4 安装 ./configure --prefix=/home/hadoop/python3 make && make insta
2020-07-19 00:10:54
163
原创 Hive分桶 详解
语法格式CREATE [EXTERNAL] TABLE <table_name>(<col_name> <data_type> [, <col_name> <data_type> ...])][PARTITIONED BY ...]CLUSTERED BY (<col_name>)[SORTED BY (<col_name> [ASC|DESC] [, <col_name> [ASC|DESC]..
2020-07-18 18:52:07
3290
1
原创 在Hive中通过Java和Python实现UDF
原文链接:http://whlminds.com/2015/10/07/hive-udf-java-python/#Python%E5%AE%9E%E7%8E%B0UDF当业务数据量过大,不能在关系型数据库中统计时,可以通过 Sqoop 导入到 HDFS 上进行统计,类似日志数据一样。导入到 HDFS 上数据,每一条记录通过\t或Ctrl+A等分割每一个字断,通过\n分割每一条记录。然后,通过建立 Hive 表指向 HDFS 对应的路径数据,对 HDFS 上的数据添加 Schema 定义,可...
2020-07-18 17:32:09
540
原创 Hive UDF Python
python udf存在的问题:在数据清洗过程中,如果使用的是TransForm而不是UDF的话,因为Python是直接向系统申请资源的,而不是像ResourceManager申请资源,故会导致启动的Python脚本对内存和CPU的使用不可控,尤其是当启动多个Map时,因为一个map将启动一个Python因此,当同时运行的map有几十个时(测试集群较小),同时将尝试启动相同个数的python(资源够用的话仍然会启动几十个),且此时Map占用的内存是不会释放掉的他在一直等待P...
2020-07-18 15:44:25
474
原创 Spark性能调优-Shuffle相关参数配置
Shuffle 相关Shuffle操作大概是对Spark性能影响最大的步骤之一(因为可能涉及到排序,磁盘IO,网络IO等众多CPU或IO密集的操作),这也是为什么在Spark 1.1的代码中对整个Shuffle框架代码进行了重构,将Shuffle相关读写操作抽象封装到Pluggable的Shuffle Manager中,便于试验和实现不同的Shuffle功能模块。例如为了解决Hash Based的Shuffle Manager在文件读写效率方面的问题而实现的Sort Base的Shuffle Manag
2020-07-15 00:23:23
1164
原创 Spark 内存管理模型的基本原理
原文链接:https://mp.weixin.qq.com/s?__biz=MzI4MzY5MDU5Mg==&mid=2247483849&idx=1&sn=3a53d18d44a0c272e570ddafe1cd904d&chksm=eb8792c6dcf01bd04110e20459718cac96295213802d0dda066c350c4486206865664978714b&scene=21#wechat_redirectSpark 作为一个基于.
2020-07-15 00:12:47
294
原创 Hive数据倾斜的原因及主要解决方法
数据倾斜产生的原因数据倾斜的原因很大部分是join倾斜和聚合倾斜两大类Hive倾斜之group by聚合倾斜原因: 分组的维度过少,每个维度的值过多,导致处理某值的reduce耗时很久; 对一些类型统计的时候某种类型的数据量特别多,其他的数据类型特别少。当按照类型进行group by的时候,会将相同的group by字段的reduce任务需要的数据拉取到同一个节点进行聚合,而当其中每一组的数据量过大时,会出现其他组的计算已经完成而这个reduce还没有计算完成,其他的节点一直等待这个节点的
2020-07-13 22:35:44
1731
原创 RCFile和ORCFile
1. RCFileRCFile文件格式是FaceBook开源的一种Hive的文件存储格式,首先将表分为几个行组,对每个行组内的数据进行按列存储,每一列的数据都是分开存储,正是先水平划分,再垂直划分的理念。在存储结构上:如上图是HDFS内RCFile的存储结构,我们可以看到,首先对表进行行划分,分成多个行组。一个行组主要包括:16字节的HDFS同步块信息,主要是为了区分一个HDFS块上的相邻行组;元数据的头部信息主要包括该行组内的存储的行数、列的字段信息等等;数据部分我们可以看出RCFile将
2020-07-13 22:17:24
485
原创 Spark shuffle机制演进史及原理说明(sort-based/hash-based/bypassShuffleManager)
spark shuffle 演进的历史Spark 0.8及以前 Hash Based ShuffleSpark 0.8.1 为Hash Based Shuffle引入File Consolidation机制Spark 0.9 引入ExternalAppendOnlyMapSpark 1.1 引入Sort Based Shuffle,但默认仍为Hash Based ShuffleSpark 1.2 默认的Shuffle方式改为Sort Based ShuffleSpark 1.4 引入Tung
2020-07-13 17:04:58
1371
原创 spark任务运行流程及内部任务的调度机制
原文链接:https://juejin.im/post/5e7485e76fb9a07caf447f12本文将针对spark中的Driver和Executor讲起,简述了spark的运行流程,部署模式以及内部任务调度机制,希望针对spark任务执行过程进行尽可能好理解的解析1.两个重要的主角 在spark中,有两个重要的主角是绕不开的,driver和executor,他们的结构呈一主多从模式,driver就是那个单身狗,控制欲很强,权利也很大,每天独自一人没别的事,就想法设法的指挥着手下一
2020-07-13 12:00:07
1288
原创 Spark 运行模式与运行流程
概述Spark,是一种通用的大数据计算框架,正如传统大数据技术Hadoop的MapReduce和Storm流式实时计算引擎等。Spark包含了大数据领域常见的各种计算框架, 比如:Spark Core用于离线计算 Spark SQL用于交互式查询 Spark Streaming用于实时流式计算 Spark MLlib用于机器学习 Spark GraphX用于图计算Spark VS MapReduce这部分由于水平有限,只能转至其他大神的总结www.cnblogs.com/dea
2020-07-12 13:22:38
608
原创 Spark Stage和宽窄依赖
窄依赖和宽依赖窄依赖:指父RDD的每一个分区最多被一个子RDD的分区所用,表现为一个父RDD的分区对应于一个子RDD的分区,和两个父RDD的分区对应于一个子RDD 的分区。图中,map/filter和union属于第一类,对输入进行协同划分(co-partitioned)的join属于第二类。宽依赖:指子RDD的分区依赖于父RDD的所有分区,这是因为shuffle类操作,如图中的groupByKey和未经协同划分的join。DAGDAG,有向无环图,Direct...
2020-07-12 13:16:42
307
原创 hive使用动态分区插入数据详解
往hive分区表中插入数据时,如果需要创建的分区很多,比如以表中某个字段进行分区存储,则需要复制粘贴修改很多sql去执行,效率低。因为hive是批处理系统,所以hive提供了一个动态分区功能,其可以基于查询参数的位置去推断分区的名称,从而建立分区。1.创建一个单一字段分区表hive> create table dpartition(id int ,name string ) partitioned by(ct string );2.往表里装载数据,并且动态建立分区...
2020-07-11 18:59:01
3334
原创 HIVE窗口函数---窗口大小(累加等)
selectname,orderdate,cost,sum(cost) over() as sample1,--所有行相加sum(cost) over(partition by name) as sample2,--按name分组,组内数据相加sum(cost) over(partition by name order by orderdate) as sample3,--按name分组,组内数据累加sum(cost) over(partition by name order by or..
2020-07-11 18:27:53
1034
原创 hive中控制map和reduce数量的简单实现方法
0、先说结论: 由于mapreduce中没有办法直接控制map数量,所以只能曲线救国,通过设置每个map中处理的数据量进行设置;reduce是可以直接设置的。控制map和reduce的参数set mapred.max.split.size=256000000; -- 决定每个map处理的最大的文件大小,单位为Bset mapred.min.split.size.per.node=1; -- 节点中可以处理的最小的文件大小set mapred.min.spli...
2020-07-11 17:17:05
1754
2
原创 Hive存储格式对比
Apache Hive支持Apache Hadoop中使用的几种熟悉的文件格式,如TextFile,RCFile,SequenceFile,AVRO,ORC和Parquet格式。ClouderaImpala也支持这些文件格式。在建表时使用STORED AS (TextFile|RCFile|SequenceFile|AVRO|ORC|Parquet)来指定存储格式。TextFile每一行都是一条记录,每行都以换行符(\ n)结尾。数据不做压缩,磁盘开销大,数据解析开销大。可结合Gzip、Bzip2使..
2020-07-10 22:12:03
1163
原创 Hive之配置使用snappy压缩
https://zhuanlan.zhihu.com/p/103740807https://blog.youkuaiyun.com/xsdxs/article/details/53152599为什么要压缩 在Hive中对中间数据或最终数据做压缩,是提高数据吞吐量和性能的一种手段。对数据做压缩,可以大量减少磁盘的存储空间,比如基于文本的数据文件,可以将文件压缩40%或更多。同时压缩后的文件在磁盘间传输和I/O也会大大减少;当然压缩和解压缩也会带来额外的CPU开销,但是却可以节省更多的I/O和使用更..
2020-07-10 19:53:41
7017
3
原创 Apache Kylin VS Apache Doris全方位对比
原文链接:https://cloud.tencent.com/developer/article/14772341 系统架构 1.1 What is Kylin 1.2 What is Doris 2 数据模型 2.1 Kylin的聚合模型 2.2 Doris的聚合模型 2.3 Kylin Cuboid VS Doris RollUp 2.4 Doris的明细模型 3 存储引擎 4 数据导入 5 查询 6 精确去重 7 元数据 8 高性能 9 高可用 10
2020-07-10 18:15:00
5684
1
原创 MapReduce程序中的经过几次排序?三次
在Map任务和Reduce任务的过程中,一共发生了3次排序1)当map函数产生输出时,会首先写入内存的环形缓冲区,当达到设定的阀值,在刷写磁盘之前,后台线程会将缓冲区的数据划分成相应的分区。在每个分区中,后台线程按键进行内排序2)在Map任务完成之前,磁盘上存在多个已经分好区,并排好序的,大小和缓冲区一样的溢写文件,这时溢写文件将被合并成一个已分区且已排序的输出文件。由于溢写文件已经经过第一次排序,所有合并文件只需要再做一次排序即可使输出文件整体有序。3)在reduce阶段,需要将多个Map任务
2020-07-10 11:14:40
5394
2
Hadoop构建数据仓库实践_王雪迎PDF原版
2019-03-11
公共仓库元模型开发指南_彭蓉
2018-10-12
公共仓库元模型_数据仓库集成标准导论
2018-10-12
Oracle PLSQL程序设计 上 (第五版)_高清版
2018-07-18
bbed 10g x64 bit
2018-07-18
PLSQL developer 12.0.5+注册机+client
2018-07-18
Oracle Database 11gR2性能调整与优化
2018-07-18
Oracle查询优化改写 技巧与案例_高清带书签版本
2018-07-18
数据仓库工具箱:维度建模的完全指南(第二版翻译好)
2018-07-18
剑破冰山__Oracle开发艺术
2017-11-20
数据仓库工具箱 维度建模权威指南 第3版
2017-11-20
OCA Oracle Database 11g Administrator Certified Associate Study Guide
2014-08-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人