partition

高效的使用STL

血红的双手。 提交于 2020-01-26 18:45:13
高效的使用STL 仅仅是个选择的问题,都是STL,可能写出来的效率相差几倍; 熟悉以下条款,高效的使用STL; 当对象很大时,建立指针的容器而不是对象的容器 1)STL基于拷贝的方式的来工作,任何需要放入STL中的元素,都会被复制; 这也好理解,STL工作的容器是在堆内开辟的一块新空间,而我们自己的变量一般存放在函数栈或另一块堆空间中;为了能够完全控制STL自己的元素,为了能在自己的地盘随心干活;这就涉及到复制; 而如果复制的对象很大,由复制带来的性能代价也不小 ; 对于大对象的操作,使用指针来代替对象能消除这方面的代价; 2)只涉及到指针拷贝操作, 没有额外类的构造函数和赋值构造函数的调用; vecttor <BigObj> vt1; vt1.push_bach(myBigObj); vecttor <BigObj* > vt2; vt2.push_bach(new BigObj()); 注意事项: 1)容器销毁前需要自行销毁指针所指向的对象;否则就造成了内存泄漏; 2)使用排序等算法时,需要构造基于对象的比较函数,如果使用默认的比较函数,其结果是基于指针大小的比较,而不是对象的比较; 用empty() 代替size()来检查是否为空 因为对于list,size()会遍历每一个元素来确定大小,时间复杂度 o(n),线性时间;而empty总是保证常数时间;

Kafka 基本原理

核能气质少年 提交于 2020-01-26 18:36:16
目录 简介 Kafka架构 Kafka存储策略 Kafka删除策略 Kafka broker Kafka Design The Producer The Consumer 复制(Replication) 日志压缩(Log Compaction) Distribution Zookeeper协调控制 开发环境搭建 一些example 参考 简介 Apache Kafka是分布式发布-订阅消息系统。它最初由LinkedIn公司开发,之后成为Apache项目的一部分。Kafka是一种快速、可扩展的、设计内在就是分布式的,分区的和可复制的提交日志服务。 Kafka架构 它的架构包括以下组件: 话题(Topic):是特定类型的消息流。消息是字节的有效负载(Payload),话题是消息的分类名或种子(Feed)名。 生产者(Producer):是能够发布消息到话题的任何对象。 服务代理(Broker):已发布的消息保存在一组服务器中,它们被称为代理(Broker)或Kafka集群。 消费者(Consumer):可以订阅一个或多个话题,并从Broker拉数据,从而消费这些已发布的消息。 https://images2015.cnblogs.com/blog/434101/201605/434101-20160514145613421-1488903046.png Kafka存储策略 1

Spark学习之路 (二十八)分布式图计算系统[转]

天涯浪子 提交于 2020-01-26 18:09:04
引言   在了解GraphX之前,需要先了解关于通用的分布式图计算框架的两个常见问题:图存储模式和图计算模式。 图存储模式   巨型图的存储总体上有边分割和点分割两种存储方式。2013年,GraphLab2.0将其存储方式由边分割变为点分割,在性能上取得重大提升,目前基本上被业界广泛接受并使用。 边分割(Edge-Cut)   每个顶点都存储一次,但有的边会被打断分到两台机器上。这样做的好处是节省存储空间;坏处是对图进行基于边的计算时,对于一条两个顶点被分到不同机器上的边来说,要跨机器通信传输数据,内网通信流量大。 点分割(Vertex-Cut)   每条边只存储一次,都只会出现在一台机器上。邻居多的点会被复制到多台机器上,增加了存储开销,同时会引发数据同步问题。好处是可以大幅减少内网通信量。 对比   虽然两种方法互有利弊,但现在是点分割占上风,各种分布式图计算框架都将自己底层的存储形式变成了点分割。主要原因有以下两个。   磁盘价格下降,存储空间不再是问题,而内网的通信资源没有突破性进展,集群计算时内网带宽是宝贵的,时间比磁盘更珍贵。这点就类似于常见的空间换时间的策略。   在当前的应用场景中,绝大多数网络都是“无尺度网络”,遵循幂律分布,不同点的邻居数量相差非常悬殊。而边分割会使那些多邻居的点所相连的边大多数被分到不同的机器上,这样的数据分布会使得内网带宽更加捉襟见肘

Spark学习之路 (三)Spark之RDD[转]

前提是你 提交于 2020-01-26 17:59:47
RDD的概述 什么是RDD? RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。RDD具有数据流模型的特点:自动容错、位置感知性调度和可伸缩性。RDD允许用户在执行多个查询时显式地将工作集缓存在内存中,后续的查询能够重用工作集,这极大地提升了查询速度。 RDD的属性 (1)一组分片(Partition),即数据集的基本组成单位。对于RDD来说,每个分片都会被一个计算任务处理,并决定并行计算的粒度。用户可以在创建RDD时指定RDD的分片个数,如果没有指定,那么就会采用默认值。默认值就是程序所分配到的CPU Core的数目。 (2)一个计算每个分区的函数。Spark中RDD的计算是以分片为单位的,每个RDD都会实现compute函数以达到这个目的。compute函数会对迭代器进行复合,不需要保存每次计算的结果。 (3)RDD之间的依赖关系。RDD的每次转换都会生成一个新的RDD,所以RDD之间就会形成类似于流水线一样的前后依赖关系。在部分分区数据丢失时,Spark可以通过这个依赖关系重新计算丢失的分区数据,而不是对RDD的所有分区进行重新计算。 (4)一个Partitioner,即RDD的分片函数。当前Spark中实现了两种类型的分片函数

Kafka

痴心易碎 提交于 2020-01-26 17:52:04
1、kafka0.11.0.0版本之前,Kafka只能支持两种语义:At most once和At least once。Kafka在0.11.0.0版本支持增加了对幂等的支持。幂等是针对生产者角度的特性。幂等可以保证生产者发送的消息,不会丢失,而且不会重复 要实现 exactly-once 在 Kafka 0.11.0 中有两个官方策略: 1)幂等 每个 Producer 在初始化的时候都会被分配一个唯一的 PID,对于每个唯一的 PID,Producer 向指定的 Topic 中某个特定的 Partition 发送的消息都会携带一个从 0 单调递增的 Sequence Number。 1)启用幂等producer:在producer程序中设置属性enabled.idempotence=true,但不要设置transational_id.注意是不要设置,而不是设置为空字符串 幂等性不能跨多个 Topic-Partition,只能保证单个 partition 内的幂等性。即单个分区内数据不丟不重。如果要保证多个分区不丢不重,需要以下事务性来实现 2)事务 保证操作的原子性,要么全部成功,要么全部失败。 启用事务支持:在producer程序中设置属性transcational.id为一个指定字符串(你可以认为这是你的额事务名称,故最好七个有意义的名字),同时设置enable

Hive性能优化

帅比萌擦擦* 提交于 2020-01-26 17:27:17
http://www.cnblogs.com/smartloli/ 1.概述   这个标题也是用血的教训换来的,希望对刚进入hive圈的童鞋和正在hive圈爬坑的童鞋有所帮助。打算分以下几个部分去描述: Hive的结构 Hive的基本操作 Hive Select Hive Join Hive UDF Hive的M/R 使用Hive注意点 优化及优化详情 优化总结 调优的经常手段 解决Hive问题的途径   这篇文章只是起个头,为描述其他部分做下准备。下面我赘述下Hive的结构和一些基本的操作。 2.介绍    Hive 是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。   首先,我来说说什么是hive(What is Hive?),请看下图:   由于是在Retina下截的屏,为避免网络原因显示不出图片,这里为也用文字描述以下。这个和介绍中描述的内容大致是一致的

MySQL information_schema表查询导致内存暴涨

冷暖自知 提交于 2020-01-26 13:54:15
case:下面的一条sql语句,导致mysql实例内存暴涨:    select * from tables where table_name not in(select table_name from partitions group by table_name having count(*)>1 );    mysql 5.5, 1w+的innodb表。 下面看下调查的结果: 1. sql的执行情况以及内存分配: step1 : 构造information_schema.tables临时表 1.1 构造临时表tables结构: 说明:func=create_schema_table; engine=heap 内存: tables是heap引擎的表,临时构造,使用堆内存;语句结束close_tmp_tables释放。 1.2 填充临时表tables数据:一共由三类表来填充tables的内存 1. memory 引擎: 说明:information_schema下的表,创建临时table, 内存: 使用堆内存,填充完数据后 close_tmp_tables,释放内存。 2. mysiam 引擎: 说明:information_schema下一部分表,是mysiam引擎的临时表。 内存: 使用堆内存,创建磁盘临时文件,close_tmp_tables,释放内存,删除临时文件。 3.

spark学习13(spark RDD)

雨燕双飞 提交于 2020-01-25 22:37:29
RDD及其特点 1)RDD(Resillient Distributed Dataset)弹性分布式数据集,是spark提供的核心抽象。它代表一个不可变、可分区、里面的元素可并行计算的集合 2)RDD在抽象上来说是一种元素集合,包含了数据。它是被分区的,分为多个分区,每个分区分布在集群中的不同节点上,从而让RDD中的数据可以被并行操作(分布式数据集) 3)RDD通常通过hadoop上的文件,即hdfs文件或者hive表来进行创建,有时也可以通过应用程序中的集合来创建。 4)RDD最重要的特性就是提供了容错性,可以自动从节点失败中恢复过来,即某节点上的RDD partition,因为节点故障,导致数据丢了,那么RDD会自动通过自己数据来源重新计算该partition,这一切对使用者是透明的 5)RDD的数据默认情况下存在内存中,但是在内存资源不足是,spark会自动将RDD数据写入磁盘(弹性) 注意:RDD的每个partition,在spark节点上存储时,默认都是放在内存中的,但是如果说内存放不下这么多数据,比如每个节点最多放5w数据,结果每个partition市10w数据,那么就会把partition中的部分数据写入磁盘,进行保存。而上述这一切,对于用户来说,都是完全透明的,也就是不用去管RDD的数据存放在内存还是磁盘,只要关注你针对RDD来进行计算和处理等操作即可

oracle的分析函数over(Partition by...) 及开窗函数

痞子三分冷 提交于 2020-01-25 09:53:14
http://zonghl8006.blog.163.com/blog/static/4528311520083995931317/ over(Partition by...) 一个超级牛皮的ORACLE特有函数。 天天都用ORACLE,用了快2年了。最近才接触到这个功能强大而灵活的函数。真实惭愧啊! oracle的分析函数over 及开窗函数 一:分析函数over Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是 对于每个组返回多行,而聚合函数对于每个组只返回一行。 下面通过几个例子来说明其应用。 1:统计某商店的营业额。 date sale 1 20 2 15 3 14 4 18 5 30 规则:按天统计:每天都统计前面几天的总额 得到的结果: DATE SALE SUM ----- -------- ------ 1 20 20 --1天 2 15 35 --1天+2天 3 14 49 --1天+2天+3天 4 18 67 . 5 30 97 . 2:统计各班成绩第一名的同学信息 NAME CLASS S ----- ----- ---------------------- fda 1 80 ffd 1 78 dss 1 95 cfe 2 74 gds 2 92 gf 3 99 ddd 3 99 adf 3 45 asdf

资料搜集-JAVA系统的梳理知识14-Kafka

梦想的初衷 提交于 2020-01-25 07:34:19
> 本文由 JavaGuide 读者推荐,JavaGuide 对文章进行了整理排版!原文地址:https://www.wmyskxz.com/2019/07/17/kafka-ru-men-jiu-zhe-yi-pian/ , 作者:我没有三颗心脏。 # 一、Kafka 简介 ------ ## Kafka 创建背景 **Kafka** 是一个消息系统,原本开发自 LinkedIn,用作 LinkedIn 的活动流(Activity Stream)和运营数据处理管道(Pipeline)的基础。现在它已被[多家不同类型的公司](https://cwiki.apache.org/confluence/display/KAFKA/Powered+By) 作为多种类型的数据管道和消息系统使用。 **活动流数据**是几乎所有站点在对其网站使用情况做报表时都要用到的数据中最常规的部分。活动数据包括页面访问量(Page View)、被查看内容方面的信息以及搜索情况等内容。这种数据通常的处理方式是先把各种活动以日志的形式写入某种文件,然后周期性地对这些文件进行统计分析。**运营数据**指的是服务器的性能数据(CPU、IO 使用率、请求时间、服务日志等等数据)。运营数据的统计方法种类繁多。 近年来,活动和运营数据处理已经成为了网站软件产品特性中一个至关重要的组成部分