partition

分析函数之开窗函数over

匿名 (未验证) 提交于 2019-12-03 00:40:02
一、分析函数 -- Oracle从8.1.6开始提供分析函数,专门用于解决复杂报表统计需求的功能强大的函数, -- 它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计值。分析函数用于计算基于组的某种聚合值。 -- 它和聚合函数的不同之处是:对于每个组返回多行,而聚合函数对于每个组只返回一行。普通的聚合函数用group by分组, -- 每个分组返回一个统计值;而分析函数采用partition by分组,并且每组每行都可以返回一个统计值。 -- 1、分析函数的形式: -- 分析函数带有一个开窗函数over(),在窗口函数中包含三个分析子句:分组(partition by), 排序(order by), 窗口(rows) , -- 他们的使用形式如下:over(partition by xxx order by yyy rows between zzz)。 -- 注:窗口子句在这里我只说rows方式的窗口,range方式和滑动窗口也不提。 -- 例如:统计函数+over()、排序函数+over()、数据分布函数+over()、统计分析函数+over()。 -- 2、开窗函数: 开窗函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能 /* 会随着行的变化而变化 */ 。例如over函数 二、窗口函数 -- 窗口函数中常用的子句有:分区

spark 优化算子选择

匿名 (未验证) 提交于 2019-12-03 00:40:02
ժҪ   2.使用mapPartitions替代普通map   3.使用foreachPartitions替代foreach   4.使用filter之后进行coalesce操作   5.使用repartitionAndSortWithinPartitions替代repartition与sort类操作   6.使用broadcast使各task共享同一Executor的集合替代算子函数中各task传送一份集合   7.使用相同分区方式的join可以避免Shuffle   8.map和flatMap选择   9.cache和persist选择   10.zipWithIndex和zipWithUniqueId选择    内容 1.使用reduceByKey/aggregateByKey替代groupByKey 2.使用mapPartitions替代普通map mapPartitions类的算子,一次函数调用会处理一个partition所有的数据,而不是一次函数调用处理一条,性能相对来说会高一些。但是有的时候,使用mapPartitions会出现OOM(内存溢出)的问题。因为单次函数调用就要处理掉一个partition所有的数据,如果内存不够,垃圾回收时是无法回收掉太多对象的,很可能出现OOM异常。所以使用这类操作时要慎重! 3.使用foreachPartitions替代foreach

Hive分区表创建,增加及删除

匿名 (未验证) 提交于 2019-12-03 00:39:02
1.创建Hive分区表,按字段分区 CREATE TABLE test1 ( id bigint , create_time timestamp , user_id string) partitioned by (partition_key int) ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\001‘ LINES TERMINATED BY ‘\n‘; 2.增加Hive分区表 ALTER TABLE test1 ADD PARTITION(partition_key=20180620) LOCATION ‘/user/hive/warehouse/demo.db/test1/partition_key=20180620‘; 3.删除分区Partition alter table user_behaviour drop partition(partition_key=20180620); 原文:https://www.cnblogs.com/qizhelongdeyang/p/9240546.html

Spark任务中如何确定park分区数、task数目、core数、worker节点个数、excutor数量

匿名 (未验证) 提交于 2019-12-03 00:37:01
晚上找了半天,总结一下网上的资源: 先上图: 每一个过程的任务数,对应一个inputSplit1, Partition Block 绉颁负 InputSplit Task Executor 注意: 这里的core是虚拟的core而不是机器的物理CPU核,可以理解为就是Executor的一个工作线程。 而 Task被执行的并发度 = Executor数目 * 每个Executor核数。 至于partition的数目: 对于数据读入阶段,例如sc.textFile,输入文件被划分为多少InputSplit就会需要多少初始Task。 在Map阶段partition数目保持不变。 在Reduce阶段,RDD的聚合会触发shuffle操作,聚合后的RDD的partition数目跟具体操作有关,例如repartition操作会聚合成指定分区数,还有一些算子是可配置的。 RDD在计算的时候,每个分区都会起一个task,所以rdd的分区数目决定了总的的task数目。 申请的计算节点(Executor)数目和每个计算节点核数,决定了你同一时刻可以并行执行的task。 比如的RDD有100个分区,那么计算的时候就会生成100个task,你的资源配置为10个计算节点,每个两2个核,同一时刻可以并行的task数目为20,计算这个RDD就需要5个轮次。 如果计算资源不变,你有101个task的话

分布式系统理论基础3 :CAP

匿名 (未验证) 提交于 2019-12-03 00:34:01
分布式系统理论基础 - CAP 12513 0 收藏 编辑 引言 CAP是分布式系统、特别是分布式存储领域中被讨论最多的理论,“ 什么是CAP定理? ”在Quora 分布式系统分类下排名 FAQ 的 No.1。CAP在程序员中也有较广的普及,它不仅仅是“C、A、P不能同时满足,最多只能3选2”,以下尝试综合各方观点,从发展历史、工程实践等角度讲述CAP理论。希望大家透过本文对CAP理论有更多地了解和认识。 CAP定理 CAP由 Eric Brewer 在2000年PODC会议上提出 [1][2] ,是Eric Brewer在Inktomi [3] 期间研发搜索引擎、分布式web缓存时得出的关于数据一致性(consistency)、服务可用性(availability)、分区容错性(partition-tolerance)的猜想: It is impossible for a web service to provide the three following guarantees : Consistency, Availability and Partition-tolerance. 该猜想在提出两年后被证明成立 [4] ,成为我们熟知的CAP定理: 数据一致性 (consistency):如果系统对一个写操作返回成功,那么之后的读请求都必须读到这个新数据;如果返回失败

Array Partition

匿名 (未验证) 提交于 2019-12-03 00:30:01
#include <iostream> using namespace std; int n, a[100000 + 10],b[100000+10],ans; int main() { int s1, s2, s3; cin >> n; for (int i = 1; i <= n;i++) { cin >> a[i]; } b[0] = 0; for (int i = 1; i <= n;i++) { //前缀和 b[i] = b[i - 1] + a[i]; } ans = 0; for (int p = 1; p <= n - 2;p++) { for (int q = p + 1; q <= n - 1;q++) { s1 = b[p]; s2 = b[q] - b[p]; s3 = b[n] - b[q]; if (abs(s1-s2) &&abs(s1-s3)&&abs(s2-s3)) { ans++; } } } cout << ans << endl; return 0; } 文章来源: Array Partition

hive参数调优

匿名 (未验证) 提交于 2019-12-03 00:27:02
Map Reduce数量相关 数据分片大小 (分片的数量决定map的数量) 计算公式: splitSize = Math.max(minSize, Math.min(maxSize, blockSize)) set mapreduce.input.fileinputformat.split.maxsize=750000000; 单个reduce处理的数据量 (影响reduce的数量) 计算公式: Max(1, Min(hive.exec.reducers.max [1099], ReducerStage estimate/hive.exec.reducers.bytes.per.reducer)) x hive.tez.max.partition.factor set hive.exec.reducers.bytes.per.reducer=629145600; tez将会根据vertice的输出大小动态预估调整reduce的个数 set hive.tez.auto.reducer.parallelism = true; hive执行引擎 mr/tez/spark set hive.execution.engine=mr; 调整Join顺序,让多次Join产生的中间数据尽可能小,选择不同的Join策略 set hive.cbo.enable=true;

Kafka介绍和使用

匿名 (未验证) 提交于 2019-12-03 00:25:02
什么是Kafka? 分布式 、 流数据 平台,类似消息队列 流数据平台可以:1、发布和订阅流数据 用于暂存重要数据) Kafka通常用来做告诉输出的缓存,这是由于它变态的性能。另外它可以暂存重要数据,因为从Kafka消费(读取)数据后数据是不会立即删除的,而且这些数据可以设置备份。 Kafka的API Producer:用于向Kafka生产数据,单个producer可以对应多topics Consumer:用于从Kafka消费数据,单个consumer可以对应多topics Streams:用于做简单的流数据处理,可生产可消费,多topics Connector:用于创建运行多个producer和consumer 多语言:Java等主流语言都有对应的API Topic:records的分类,所有record都是发布到某一个topic的 Record:{key,value,timestamp} 可以把Kafka理解为不可修改的queue(of records),保存一段历史时间的数据eg.两天 每个consumer元数据只保存一个offset,可由consumer自由控制,也就是说offset不一定是简单递增的,如果有这个需要,可以返回读取两天前的数据,或者直接读取最新的数据 Partition 一个topic被分为多个partition,可存在不同机器上

spark分区数详解

匿名 (未验证) 提交于 2019-12-03 00:22:01
spark.default.parallelism:(默认的并发数)= 2 当配置文件spark-default.conf中没有显示的配置,则按照如下规则取值: 1、本地模式(不会启动executor,由SparkSubmit进程生成指定数量的线程数来并发): spark.default.parallelism = 1 spark.default.parallelism = N (使用N个核) spark.default.parallelism = 1 2、伪集群模式(x为本机上启动的executor数,y为每个executor使用的core数,z为每个 executor使用的内存) 3、其他模式(这里主要指yarn模式,当然standalone也是如此) 经过上面的规则,就能确定了spark.default.parallelism的默认值(前提是配置文件spark-default.conf中没有显示的配置,如果配置了,则spark.default.parallelism = 配置的值) 还有一个配置比较重要,spark.files.maxPartitionBytes = 128 M(默认) The maximum number of bytes to pack into a single partition when reading files.

OVER(PARTITION BY... ORDER BY...)的使用说明和意义

匿名 (未验证) 提交于 2019-12-03 00:22:01
这个函数长这个样子:OVER(PARTITION BY... ORDER BY...) 顾名思义,PARTITION 中文是分割的意思,ORDER 是排序的意思,所以翻译一下就是先把一组数据按照制定的字段进行分割成各种组,然后组内按照某个字段排序。 以实际案例来说明这个函数的使用, 首先,我们先看一组普通排序的数据: 然后对其进行新加一个伪劣ROWNUM,看看数据原本的顺序: OVER(ORDER BY ...)的意思是以按照某个字段排序,所以和直接对表的order by效果是一样的: 这里就显示了OVER(ORDER BY ...)的第一个功能,就是对新查询得到的数据进行重新编号,即RNO的值,由于这里没有PARTITION BY...,所以可以比作整个列就是一个大块,然后对大块的内容进行排序,这个时候再加上PARTITION BY...,查询结果: 它会按照制定的字段,把相同值的排在一起,分为一个块,也就是分组,然后组内排序编号,这样你就可以取不同组内的任意第几个值,类似于TOP-N的分析。 在这里over之前使用的函数是ROW_NUMBER(),就是对数据的编号。 与OVER(PARTITION BY... ORDER BY...)匹配使用的函数 row_number() over()、rank() over()和dense_rank() over() sum() over(