- 博客(56)
- 资源 (4)
- 收藏
- 关注
原创 C语言中的volatile关键字
谈谈我理解和总结的volatile关键字吧,volatile关键字是C语言不常用的一个关键字,估计很多人都没听说过,我们项目中由于多线程设计的时候也是用到了volatile关键字,特此总结一下:1,首先说一下编译器优化。
2014-09-16 18:53:47
777
原创 shuffle的简单实现
在分布式系统的实现中,shuffle是一个非常关键的操作,直接决定算法在分布式环境下执行的可行性。shuffle被称为数据混洗,它在某些并行系统中被称作exchange。shuffle最简单的实现方式就是对数据做某种策略上的切分(比如说哈希切分,比如说范围切分),然后可以选择切分之后的数据直接传输或者将数据持久化供容错,我们比较一下这两种方式。
2014-08-04 15:36:38
1584
原创 合并两个排序数组
这是leetcode中的合并两个排序数组的题目,题目为:A和B两个数组已经排序,A可以容纳A和B的数组,我的思路为:将A往后移,因为移动之后就不用再移动了,然后合并就不需要总是去赋值。
2014-07-31 13:58:25
896
原创 C++实现高性能哈希表
构建哈希表的时候,必须指定有多少个bucket,下面我们以6个bucket为例,当我们指定哈希规则为模6的话,哈希表初始化的时候是建立6个bucket。首先由6个指针分别指向这6个bucket,然后申请具体的6个bucket所需要的空间,且每个bucket所需要的空间后面有两个指针,这两个指针一个指向这个bucket中的空闲位置,还有一个是指向当此bucket溢出之后重新申请空间的bucket,比
2014-07-30 13:15:25
1612
原创 redhat上安装clusterssh
没有付费的红帽系统不能执行yum在线安装,比较苦闷,现有一种非常好用的集群软件clusterssh。在红帽上安装然后使用的步骤如下:1,安装:红帽6.3版本上安装一些包,这些包放于我的csdn上面,猛戳这里下载。然后按照依赖关系的顺序安装这几个包。
2014-07-28 10:45:10
867
原创 归并排序C++版
归并排序首先找中间节点。如果是链表,利用快慢指针寻找中间节点,如果是数组,直接使用(start+end)/2找到中间节点位置,链表版本中,需要O(1)的空闲复杂度去存一个头节点,而数组版本,需要O(N)的空间复杂度需要构造一个缓存数组存下所有节点。两种版本的实现时间复杂度都是O(N*logN)。下面看代码
2014-07-15 09:19:40
725
原创 后缀表达式求值--leetcode第二题
后缀表达式求值的输入是一个string的数组,或者vector。还得建一个辅助栈,存储当前需要计算的两个数值。这个可以扩展为database中的expression系统,满足数据库中所有的计算。例如aggregation函数,系统函数,基本数值计算(需要设计所有数据类型处理)。
2014-07-12 19:15:30
1147
原创 Spark SQL完善的表达式系统
首先spark sql的设计总体上:1,首先我们要有一个树的节点,通过这个节点可以继承出单孩子节点,双孩子节点,叶子节点以及多孩子节点。1.1,树的节点有最基本的遍历操作,这个遍历操作支持各种遍历,前缀后缀中缀,因为有些expression的折叠方式这样要求。2,expression继承的是树的节点,因为expression可能含有两个孩子,一个孩子,多个孩子,也可能没有孩子。3,
2014-07-11 16:47:49
1707
原创 Spark SQL查询优化代码解析
Spark sql是Apache spark在即将发布的1.0版本的新特性。本文从SQL解析,分析器解析,查询优化到物理执行计划执行,结合spark core模块详细分析spark sql的实现细节。Spark sql中,TreeNode贯穿始终,继承于TreeNode的有三类数据结构,分别为LogicalPlan,SparkPlan和Expression(LogicalPlan和SparkP
2014-07-11 16:41:47
3224
原创 spark sql中join的filter下推规则
object PushPredicateThroughJoin extends Rule[LogicalPlan] with PredicateHelper { // split the condition expression into 3 parts, // (canEvaluateInLeftSide, canEvaluateInRightSide, haveToEvaluat
2014-06-24 19:52:21
4185
1
原创 spark mllib初探练习
spark mllib是基于spark core的机器学习库。1,我们首先用mllib跑一个简单的KMeans的例子(来自官方网站)。 KMeans是一个无监督学习问题,我们基于一些相似性将点集聚类在一起。KMeans常用于探索性分析,或者作为分级监督学习管道的一个组件。KMeans实现的是这篇论文的变种:http://theory.stanford.edu/~sergei/pap
2014-06-24 19:50:00
914
原创 scala类型参数化以及上下界
直接看代码:package common.typeparaimport scala.math.Orderedimport scala.collection.immutable.Listclass Animalclass Human extends Animal class Toy/* * 类型参数化,<:的意思是T为Animal的子类 * */class Duck[
2014-06-19 22:05:39
1421
原创 Eclipse中Java连接sql server数据库
最近几天写论文,实在是写不动了,在此写一个简单的教程,不是故意要写这个的,要给人讲,没办法,虽然对sql server这些微软软件用起来很不习惯。1,配置eclipse 首先下载eclipse版本,推荐下载eclipse 4.2 juno,我用的是这个,然后下载jdk-1.7,现在java 8都出来了,注意下载两个东西的时候看看操作系统版本。下载之后解压eclipse就可以使用。然
2014-04-22 23:43:12
2417
原创 多线程之信号量--生产消费者问题
在诸如生产者消费者问题中,信号量被广泛使用,前段时间网上流传的奶茶京东的例子,就是一个信号量的问题。下面以生产者消费者问题为例,说一下信号量和锁的结合应用:一般有两个信号量:对于生产者的缓冲区可用资源数目和对于消费者的产品可用的资源数目。一般有两个函数指针:生产者函数指针在生产,消费者函数指针在消费。这个两个函数指针指向的函数中如果是多线程情况会有锁来避免多个线程修改缓冲区。代
2014-04-22 23:35:44
870
原创 spark sql逻辑计划(优化完)转物理计划
在org.apache.spark.sql.execution中实现了有所有的数据库操作,但是注意这里仅仅是物理算子,这些操作分为三类:UnaryNode,LeafNode和BinaryNode。一元节点UnaryNode的操作有:Aggregate,DebugNode,EXchange,Filter,Generate,Project,Sample,Sort,StopAfter,TopK。
2014-04-07 23:41:17
3825
原创 spark sql和catalyst实例结合源码分析
这周关注了一下spark sql和catalyst,看了一下相关资料和各种社区内的动态,特此总结:spark sql和catalyst为什么会出现?这要从shark说起,shark在spark生态中相当于hadoop生态中的hive,但是shark为了实现和hive的兼容,使用了hql解析,逻辑查询计划的翻译和优化生成物理查询计划。hive是将物理执行计划转化为了MR作业,但是shark则是将
2014-04-05 21:39:37
1296
原创 数据库学习之触发器
此为触发器使用练习:三张表:学生表(学生ID,学生名)课程表(课程ID,课程名)选课表(学生ID,课程ID)下面是五个练习:1,加入一门新课时,自动为所有的学生选上该门课程2,更改一门课程的课程号时,自动修改相应的选课记录的课程号3,删除一个学生时,自动删除该学生的选课记录4,删除一条选课记录时,如果对应的课程号没有人选了,则删除该课程课号5,增
2014-04-02 22:35:40
1521
原创 eclipse中配置github
这里是百度文库中一篇非常好的教程:http://wenku.baidu.com/view/d88ecee7aeaad1f346933f63.html
2014-04-01 20:29:55
784
原创 用eclipse读spark源码
最近没有时间研究IDEA开发环境,相信也有很多人和我一样习惯使用eclipse开发环境,幸好spark源码提供了生成eclipse工程的插件。当然首先你得下载Scala的eclipse插件,对于不同版本的eclipse环境,你要下载的Scala插件也有所不同。具体请参考这里对应你的eclipse版本。然后从spark的主页或者github主页下载spark的源码包(github上是最新的代码)
2014-03-27 16:43:19
2035
原创 多个线程barrier操作--条件变量
在多个线程协同工作时,有一种应用为,当多个线程都完成工作之后,才进行下一阶段的工作,最典型的为hashjoin算法中的build阶段并行化。在build阶段,多个线程同时读取一个relation建立hash表,在此我们不考虑线程之间写hash表冲突造成的性能降低。N个线程读relation然后build hash表,N个线程都完成工作之后,才能开始下一步的probe阶段,否则probe阶段“见
2014-03-26 22:54:59
1277
原创 const char*,char *和string之间的转换
const char *和char *,还有string之间的转换为:1,const char *转换为char *就是首先申请一段空间,然后复制进去,不能直接赋值是因为const const char *pp="aaa"; char *p=new char[enoughspace]; strcpy(p,pp);2,char *转换为const char*可以直接赋值
2014-03-25 17:46:33
1743
原创 sbt构建scala工程
利用sbt构建scala工程,其中引用了akka的包和Eclipse插件,其中Eclipse插件用来生成Eclipse工程。首先写好scala文件,在此sbt构建工程师自动按照src/main/scala,src/main/java,src/main/resources;src/test/scala,src/test/java,src/test/resources来寻找然后构建工程,在工程
2014-03-23 14:36:32
1757
原创 数据库存储过程和游标
三张表,学生表,课程表和选课表use [20140319]; create tableCourse(courseIdint,courseNamechar(10),primary key (courseId)); create tableStudent(studentIdint,namechar(10),primary key (student
2014-03-20 12:37:42
1202
原创 "spark is now FAILED (Command exited with code 1)" 错误解决
今天配置spark开发环境,出现了一个问题,这个问题网上有人问到,但是没有查询到解决方法,最后问题得以解决。出现的问题是,当启动一个集群的spark-shell的时候,出现了:"spark is now FAILED (Command exited with code 1)",这个问题的出现伴随着executor节点启动后马上又和master失去了联系,如下:14/03/08 10:5
2014-03-08 11:00:51
5025
6
原创 agent admitted failure to sign using the key 解决方法
在按要求配置好ssh无密码登录之后,还是出现了"agent admitted failure to sign using the key" 的错误。解决方法:ssh-add ~/.ssh/id_rsa用ssh-add命令添加私钥即可解决。
2014-03-07 22:20:00
1131
原创 数据库主键和外键
主键,唯一标示一个实体。是保证数据库的实体完整性,保证数据中数据的正确性和合理性,取值非空唯一。外键,是用来使表与表之间联系。用来保证数据库的参照完整性,外键的取值必须来自参照表参照列的值,可以为空也可不为空。以学生表,课程表和选课表为例:create database db003;use db003;create table Course(courseId int,teacher
2014-03-06 11:47:09
988
原创 返回值为函数指针
今天项目中用到函数指针,故做笔记。函数指针的声明和普通变量的声明很不一样,在此返回值为int,输入参数为两个int的函数指针为:函数指针声明为:int (*func)(int,int)返回函数指针的函数声明为:int (*fun())(int,int)见代码:#include using namespace std;class Test{public: Test(){
2014-02-24 17:03:46
986
原创 spark源码分析之shuffleFetcher
我们首先看看shuffleBlockId是什么样的,比如:shuffle_0_3_3,这个shuffleBlockId是如何组成的呢?shuffleBlockId=shuffleId+mapId+reduceId,因此这里的shuffleId是0,mapId是3,reduceId是3现在来看ShuffleFetcher,这个抽象类现在只有一种实现,其中最重要的函数是fetch,这个函数是在
2014-02-22 21:16:16
1165
原创 spark与磁盘交互,spark读hdfs
spark系统有几处与磁盘交换的地方:1,spark的shuffle依然要将map的数据存储在磁盘上,所以在spark的环境变量中可以设置"spark.local.dir"的值保存spark的shuffle数据存储的位置,如果没有设置,shuffle的数据将放在"java.io.tmpdir"中,这段代码在core当中为: def getLocalDir(conf: SparkConf)
2014-02-22 16:41:47
2680
原创 传值传地址和传引用
传值传地址和传引用的小结或者笔记程序的目的是在改变两个指向整形的指针的指向,也就是在改变指针的值见代码:#include using namespace std;void swap1(int *x,int *y){ //传递的是指针的值,形参和实参并不是同一个对象 //交换的是形参(两个指针)的值,实参中两个指针的指向并没有发生改变 int *tmp; tmp=x; x
2014-02-17 09:39:39
876
原创 第一个scala程序
第一个standalone的scala程序:package transobject HelloWorld { def main(args: Array[String]): Unit = { println("Hello World!!!"); } }
2014-01-30 11:09:32
812
原创 python字符串拼接
python的字符串拼接代码:场景:给定一个文件,这个文件中有若干条关系元组数据,选出其中几列拼接为一个列,然后将这个列加到列的最末尾,写通配程序注意:命令行参数的输入处理,文件处理,字符串处理函数#!/usr/bin/python#!/usr/bin# Filename: extract_and_merge.pyimport sys;def handle_the_recor
2014-01-20 11:39:25
1101
原创 C++中基类中应该有虚析构函数
当一个类中一旦有虚函数的时候,这个类的内存空间就会维护一张虚函数表,这张虚函数表会浪费类所占用的内存空间,同时虚函数是运行时多态,一旦函数被调用的次数非常多,就会产生性能的瓶颈,一般在数据库中的物理算子的实现中,会有这种情况的发生,因为数据库所处理的数据条数有时候是很多的。但是如果一个基类的析构函数如果不是虚函数,我们看会发生什么事情。#include using namespace s
2014-01-11 22:26:14
876
原创 spark中的action和transformation
RDD提供了两种类型的操作:transformation和action1,transformation是得到一个新的RDD,方式很多,比如从数据源生成一个新的RDD,从RDD生成一个新的RDD2,action是得到一个值,或者一个结果(直接将RDD cache到内存中)所有的transformation都是采用的懒策略,就是如果只是将transformation提交是不会执行计算的,计
2014-01-06 19:13:13
8871
原创 hadoop yarn安装
hadoop yarn已经解决了MRv1中的诸多问题,在此安装一下hadoop yarn,然后方便学习spark,yarn在hadoop第一版中的如/etc/hosts,ssh无密码登录等问题在此不会详细介绍,在此只是介绍一下yarn和hadoop version1的基本的配置不一样的地方基本的三个配置文件会有区别,在此列出我自己的三个文件的配置情况,也是最基本的配置,然后给出yarn-s
2013-12-23 20:52:30
991
原创 运行时多态与编译时多态
运行时多态是显示接口,一般由基类+virtual实现,在基类中写好子类有可能要实现的函数接口,在运行时绑定父类指针究竟指向哪个子类的函数编译时多态是隐示接口,一般由template(模板)实现,优点是如果程序需要反复调用其中的接口函数,例如来处理大量数据,运行时多态的性能必然赶不上template,编译期多态已经在编译的时候就确定要调用的函数,而运行时多态会在每次调用函数的时候都要做判断要调用
2013-12-08 17:44:57
1056
原创 facebook presto安装
presto最好是用一个专门存储data的目录,这个目录存储log和local metadata,独立开来的data目录有利于更新配置presto
2013-11-09 20:28:15
2320
5
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人