UNMOVE Blog

Thinking will not overcome fear but action will.

C++之指向子类的父类指针

父类指针的作用域如何被限制在父类中及成员函数如何调用

前言 今天在跑C++代码时忽然对一个非常常见的现象产生了疑惑,就是将一个父类指针和一个子类指针指向相同的子类对象时,C++底层是怎么做到父类指针访问父类的作用域,而子类指针访问子类的作用域的,下面就进入正题。 问题起源 整个问题起源于一个关于类的继承的实验,最开始我以为的是,既然父类指针和子类指针指向的是同一个子类对象,那么通过指针调用的成员函数一定就是子类的成员函数了,然而噩...

Spark Main Code

分布式计算平台 Spark 主函数调用

Main Code class DenseVectorV extends Vector[V] { def this(data: Array[V]) = this(data, 0, 1, data.length) … } class LabeledPoint(var label: Double, var features: Vector[Double]) val...

Spark源码分析(6)

Spark 源码分析(6)

UnsafeBuffer的分配和释放 调研在spark中使用UnsafeBuffer分配/释放的内存使用TaskMemoryManager进行记录。 TaskMemoryManager TaskMemoryManager持有的对象说明(方案相关): memoryManager(实际是UnifiedMemoryManager):用于实际的申请内存检查及内存申请。...

Spark源码分析(5)

Spark 源码分析(5)

BytesToBytesMap修改迁移 因需要将代码从spark 1.6迁移到spark 2.2上,而spark 2.2中BytesToBytesMap相关代码做了修改,所以此篇文档从理论上讲解如何进行代码迁移。 Spark 1.6中对于BytesToBytesMap的修改 BytesToBytesMapIterator中使用next方法取数据后,更新offse...

Spark源码分析(4)

Spark 源码分析(4)

BytesToBytesMap分析 查看了spark 2.2版本的BytesToBytesMap的相关函数,细致了解spark 2.2版本的BytesToBytesMap如何工作。 spark 2.2版本BytesToBytesMap变量详解 logger:用于程序运行时输出日志信息。 growthStrategy:控制在该hash map被...

Spark源码分析(5)

Spark 源码分析(5)

ByteToBytesMap差异 查看对比了spark 1.6和spark 2.2的BytesToBytesMap的异同,下面作比较: Spark 1.6版本 spark 1.6版本的BytesToBytesMap主要组成变量:bitset、longArray和dataPage。 bitset:记录longArray中某个位置是否已被使用,例如longArray(2 * pos)已被...

Spark源码分析(2)

分布式计算平台 Spark 源码分析(2)

支持新类的修改流程 最近对代码做了封装,将对对象的转化部分封装成了一个新类FlintSerializer,同时这个新类也会用于shuffle read和shuffle write的序列化和反序列化操作。上层代码只需将对象或者字节数组传入这个类,FlintSerialize会根据其所持有的handle自动将对象转化为字节数组或是将字节数组转化为对象,做了封装之后,上层代码的逻辑更加清晰,而且...

Spark源码分析(1)

分布式计算平台 Spark 源码分析(1)

Shuffle涉及的类型信息使用踪迹 本片文档基于final-dev分支,主要介绍在Shuffle阶段,由driver端设置的相关类型信息在worker端如何使用。 driver端传递类型信息 该分支在生成ShuffleDependency时进行Shuffle Read和Shuffle Write的类型设置,具体文件为Dependency.scala,具体位置为第86行: shuff...