<深入理解Spark:核心思想与源码分析>一书前言的内容请看链接<深入理解SPARK:核心思想与源码分析>一书正式出版上市 <深入理解Spark:核心思想与源码分析>一书第一章的内容请看链接<第1章 环境准备> 本文主要展示本书的第2章内容: Spark设计理念与基本架构 “若夫乘天地之正,而御六气之辩,以游无穷者,彼且恶乎待哉?” ——<庄子·逍遥游> n  本章导读: 上一章,介绍了Spark环境的搭建,为方便读者学习Spark做好准备.本章…
<深入理解Spark:核心思想与源码分析>一书前言的内容请看链接<深入理解SPARK:核心思想与源码分析>一书正式出版上市 <深入理解Spark:核心思想与源码分析>一书第一章的内容请看链接<第1章 环境准备> <深入理解Spark:核心思想与源码分析>一书第二章的内容请看链接<第2章 SPARK设计理念与基本架构> 由于本书的第3章内容较多,所以打算分别开辟四篇随笔分别展现. <深入理解Spark:核心思想与源码分析>一…
自己牺牲了7个月的周末和下班空闲时间,通过研究Spark源码和原理,总结整理的<深入理解Spark:核心思想与源码分析>一书现在已经正式出版上市,目前亚马逊.京东.当当.天猫等网站均有销售,欢迎感兴趣的同学购买.我开始研究源码时的Spark版本是1.2.0,经过7个多月的研究和出版社近4个月的流程,Spark自身的版本迭代也很快,如今最新已经是1.6.0.目前市面上另外2本源码研究的Spark书籍的版本分别是0.9.0版本和1.2.0版本,看来这些书的作者都与我一样,遇到了这种问题.由于研究和…
自己牺牲了7个月的周末和下班空闲时间,通过研究Spark源码和原理,总结整理的<深入理解Spark:核心思想与源码分析>一书现在已经正式出版上市,目前亚马逊.京东.当当.天猫等网站均有销售,欢迎感兴趣的同学购买.我开始研究源码时的Spark版本是1.2.0,经过7个多月的研究和出版社近4个月的流程,Spark自身的版本迭代也很快,如今最新已经是1.6.0.目前市面上另外2本源码研究的Spark书籍的版本分别是0.9.0版本和1.2.0版本,看来这些书的作者都与我一样,遇到了这种问题.由于研究和…
自己牺牲了7个月的周末和下班空闲时间,通过研究Spark源码和原理,总结整理的<深入理解Spark:核心思想与源码分析>一书现在已经正式出版上市,目前亚马逊.京东.当当.天猫等网站均有销售,欢迎感兴趣的同学购买.我开始研究源码时的Spark版本是1.2.0,经过7个多月的研究和出版社近4个月的流程,Spark自身的版本迭代也很快,如今最新已经是1.6.0.目前市面上另外2本源码研究的Spark书籍的版本分别是0.9.0版本和1.2.0版本,看来这些书的作者都与我一样,遇到了这种问题.由于研究和…
<深入理解Spark 核心思想与源码分析> 耿嘉安著 本书共计486页,计划每天读书20页,计划25天完成. 2018-12-20   1-20页 凡事豫则立,不豫则废:言前定,则不跲:事前定,则不困. ——<礼记.中庸> 第一章: 1.运行环境,安装JDK. 2.运行环境,安装scala. wget http://downloads.typesafe.com/scala/2.10.4/scala-2.10.4.tgz 安装版本2.10.4 chmod 775 scala-2.10…
_ 阅读目录 一. 什么是Vue.nextTick()? 二. Vue.nextTick()方法的应用场景有哪些? 2.1 更改数据后,进行节点DOM操作. 2.2 在created生命周期中进行DOM操作. 三. Vue.nextTick的调用方式如下: 四:vm.$nextTick 与 setTimeout 的区别是什么? 五:理解 MutationObserver 六:nextTick源码分析 回到顶部 一. 什么是Vue.nextTick()? 官方文档解释为:在下次DOM更新循环结束之…
spark的存储系统--BlockManager源码分析 根据之前的一系列分析,我们对spark作业从创建到调度分发,到执行,最后结果回传driver的过程有了一个大概的了解.但是在分析源码的过程中也留下了大量的问题,最主要的就是涉及到的spark中重要的几个基础模块,我们对这些基础设施的内部细节并不是很了解,之前走读源码时基本只是大概了解每个模块的作用以及对外的主要接口,这些重要的模块包括BlockMananger, MemoryMananger, ShuffleManager, MapOut…
Solr4.8.0源码分析(4)之Eclipse Solr调试环境搭建 由于公司里的Solr调试都是用远程jpda进行的,但是家里只有一台电脑所以不能jpda进行调试,这是因为jpda的端口冲突.所以只能在Eclipse 搭建Solr的环境,折腾了一小时终于完成了. 1. JDPA远程调试 搭建换完成Solr环境后,对${TOMCAT_HOME}/bin/startup.sh 最后一行进行修改,如下所示: set JPDA_ADDRESS= exec "$PRGDIR"/"$…
http://spark.apache.org/docs/latest/mllib-decision-tree.html 以决策树作为开始,因为简单,而且也比较容易用到,当前的boosting或random forest也是常以其为基础的 决策树算法本身参考之前的blog,其实就是贪婪算法,每次切分使得数据变得最为有序   那么如何来定义有序或无序? 无序,node impurity 对于分类问题,我们可以用熵entropy或Gini来表示信息的无序程度 对于回归问题,我们用方差Variance…
一.前述 Spark中资源调度是一个非常核心的模块,尤其对于我们提交参数来说,需要具体到某些配置,所以提交配置的参数于源码一一对应,掌握此节对于Spark在任务执行过程中的资源分配会更上一层楼.由于源码部分太多本节只抽取关键部分和结论阐述,更多的偏于应用. 二.具体细节 1.Spark-Submit提交参数 Options: --master MASTER_URL, 可以是spark://host:port, mesos://host:port, yarn,  yarn-cluster,yarn…
天行健,君子以自强不息:地势坤,君子以厚德载物.——<易经> 本章导读 Spark的初始化阶段.任务提交阶段.执行阶段,始终离不开存储体系. Spark为了避免Hadoop读写磁盘的I/O操作成为性能瓶颈,优先将配置信息.计算结果等数据存入内存,极大的提升了系统的执行效率. 4.1 存储体系的概述 4.1.1 块管理器BlockManager的实现 块管理器BlockManager是Spark存储体系中的核心组件,Driver Application和Executor都会创建BlockMana…
由于gitbook网速不好,所以复制自https://zx150842.gitbooks.io/spark-1-6-1-source-code/content/,非原创,纯属搬运工,若作者要求,可删除. 这本书主要用来记录学习spark 1.6.1源码,希望通过阅读本书,对spark主要功能模块以及模块之间的调用有一个新的认识,对模块中核心的代码会附上个人的注释.由于个人能力有限,书中内容可能会有错误,还请指正.…
events模块对外提供了一个 EventEmitter 对象,即:events.EventEmitter. EventEmitter 是NodeJS的核心模块events中的类,用于对NodeJS中的事件进行统一管理,使用events可以对特定的API事件进行添加,触发和移除等.我们可以通过 require('events')来访问该模块. 比如如下代码: // 引入 events 模块 const events = require('events'); console.log(events)…
原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/4024733.html 在spark mllib 1.1版本中增加stat包,里面包含了一些统计相关的函数,本文主要分析其中的相关系数计算的原理与实现: 一.基本原理 在stat包中实现了皮尔逊(Pearson)与斯皮尔曼(Spearman)两类相关系数的计算 (1)Pearson:   (x,y)协方差/[(x标准方差)*(y标准方差)]…
原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/4019131.html 在spark mllib 1.1版本中增加stat包,里面包含了一些统计相关的函数,本文主要分析其中的卡方检验的原理与实现: 一.基本原理 在stat包中实现了皮尔逊卡方检验,它主要包含以下两类 (1)适配度检验(Goodness of Fit test):验证一组观察值的次数分配是否异于理论上的分配. (2)独立性检验(independence test) :验证从两个变量抽出…
原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/4042467.html 本文主要以mllib 1.1版本为基础,分析朴素贝叶斯的基本原理与源码 一.基本原理 理论上,概率模型分类器是一个条件概率模型. 独立的类别变量有若干类别,条件依赖于若干特征变量 ,,...,.但问题在于如果特征数量较大或者每个特征能取大量值时,基于概率模型列出概率表变得不现实.所以我们修改这个模型使之变得可行. 贝叶斯定理有以下式子: 对于朴素贝叶斯,它的特征变量,,...,是…
ThreadLocal,叫做线程本地存储,也可以叫做线程本地变量.ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量. 一.如何使用 class Accessor implements Runnable { private final int id; public Accessor(int id) { this.id = id; } @Override public void run() { while (!Thread.currentThread(…
本文主要以mllib 1.1版本为基础,分析决策树的基本原理与源码 一.基本原理 二.源码分析 1.决策树构造 指定决策树训练数据集与策略(Strategy)通过train函数就能得到决策树模型DecisionTreeModel 决策树策略包含了:algo(算法类型:分类.回归),impurity(信息增益计算算法).maxDepth(数最大深度). numClassesForClassification(数分类分支数目,为2就是二叉数),maxBins(特征变量最大的分类数目限制). quan…
若夫乘天地之正,而御六气之辩解,以游无穷者,彼且恶乎待哉? ——<庄子.逍遥游> 翻译:至于遵循宇宙万物的规律,把握“六气”的变化,遨游于无穷无尽的境域,他还仰赖什么呢! 2.1 初始Spark 第一点是关于MRv1与MRv2的区别对比. 2.2 Spark基础知识 主要解释Spark的各个版本,介绍Spark的主要概念,介绍scala与java之间的语言差异. 2.3 Spark基本设计思想 2.4 Spark基本架构 Cluster Manager:Spark集群资源管理器,主要负责资源的…
3.1 SparkContext概述 SparkConf负责配置参数,主要通过ConcurrentHaspMap来维护各种Spark的配置属性. class SparkConf(loadDefaults: Boolean) extends Cloneable with Logging with Serializable { import SparkConf._ /** Create a SparkConf that loads defaults from system properties an…
摘要: 本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. prepareRefresh函数主要是做些准备工作,例如对系统属性及环境变量的初始化及验证. protected void prepareRefresh() { this.startupDate = System.currentTimeMillis(); this.closed.set(false); this.active.set(true); if (logger.isDe…
RDD是Spark对各类数据计算模型的统一抽象,被用于迭代计算过程以及任务输出结果的缓存读写. 在所有MapReduce框架中,shuffle是连接map任务和reduce任务的桥梁.shuffle性能优劣直接决定了 整个计算引擎的性能和吞吐量. 6.1 迭代计算 MappedRDD的iterator方法 6.2 什么是shuffle shuffle是所有MapReduce计算框架所必须经过的阶段,shuffle用于打通map任务的输出与reduce任务的输入, map任务的中间输出结果按照ke…
即欲捭之贵周,即欲阖之贵密.周密之贵,微而与道相随.---<鬼谷子> 解释:译文:如果要分析问题,关键在于周详,如果要综合归纳问题,关键在于严密.周详严密的关键在于精深而与道相随. 解词:捭阖(bǎihé):开合.意为运用某些计策和手段,使双方联合或分化.含此义的成语有“纵横捭阖”. 解析:<鬼谷子>是一部充满着谋略和智慧的名著.“即欲捭之贵周,即欲阖之贵密”十分鲜明地体现了此书的特点.文中首先提出了“捭”和“阖”,这是两种不同的克敌制胜的计策.然后,再提出运用这两种计策必须具有的…
1.关联式容器的概念 上一篇文章讲序列式容器,序列式容器的概念与关联式容器相对,不提供按序索引.它分为set和map两大类,这两大类各自有各自的衍生体multiset和multimap,的底层机制都是用红黑树实现,红黑树是一种基本平衡的二叉搜索树,红黑树的原理wiki上讲得很清楚,书中只是把算法实现在了底层而已,在SGI STL中RB-tree是作为底层数据结构供其他容器配接用,因此关联容器可以看做都是adaptor模式的应用. 关联式容器的概念类似于关联式数据库,为获得良好的搜索效率,一般用平…
1.准备知识 typename用法 用法1:等效于模板编程中的class 用法2:用于显式地告诉编译器接下来的名称是类型名,对于这个区分,下面的参考链接中说得好,如果编译器不知道 T::bar 是类型名的话 T::bar * p可能就被理解成了T::bar 乘以p,T::bar & p可能就被理解成为了 T::bar 和p做逻辑与操作. 事实上,在模板编程时,如果传入的模板参数为T(T里面有模板参数的非独立名字bar),那么在不显示指定的话,c++或假定T::bar为变量名以消除歧义. "…
1.Example 使用Spark MLlib中决策树分类器API,训练出一个决策树模型,使用Python开发. """ Decision Tree Classification Example. """ from __future__ import print_function from pyspark import SparkContext from pyspark.mllib.tree import DecisionTree, Decisi…
一.内核源码之我见 Linux内核代码的庞大令不少人“望而生畏”,也正因为如此,使得人们对Linux的了解仅处于泛泛的层次.如果想透析Linux,深入操作系统的本质,阅读内核源码是最有效的途径.我们都知道,想成为优秀的程序员,需要大量的实践和代码的编写.编程固然重要,但是往往只编程的人很容易把自己局限在自己的知识领域内.如果要扩展自己知识的广度,我们需要多接触其他人编写的代码,尤其是水平比我们更高的人编写的代码.通过这种途径,我们可以跳出自己知识圈的束缚,进入他人的知识圈,了解更多甚至我们一般短…
Vuex是一个专为Vue服务,用于管理页面数据状态.提供统一数据操作的生态系统.它集中于MVC模式中的Model层,规定所有的数据操作必须通过 action - mutation - state change 的流程来进行,再结合Vue的数据视图双向绑定特性来实现页面的展示更新.统一的页面状态管理以及操作处理,可以让复杂的组件交互变得简单清晰,同时可在调试模式下进行时光机般的倒退前进操作,查看数据改变过程,使code debug更加方便. 最近在开发的项目中用到了Vuex来管理整体页面状态,遇到…
1.简述 MyBatis是一个优秀的轻ORM框架,由最初的iBatis演化而来,可以方便的完成sql语句的输入输出到java对象之间的相互映射,典型的MyBatis使用的方式如下: String resource = "org/mybatis/example/mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new Sql…