- 博客(112)
- 资源 (3)
- 收藏
- 关注
原创 Shuffle操作的原理与源码分析
普通的shuffle操作第一个特点, 在Spark早期版本中,那个bucket缓存是非常非常重要的,因为需要将一个ShuffleMapTask所有的数据都写入内存缓存之后,才会刷新到磁盘。但是这就有一个问题,如果map side数据过多,那么很容易造成内存溢出。所以spark在新版本中,优化了,默认那个内存缓存是100kb,然后呢,写入一点数据达到了刷新到磁盘的阈值之后,就会将数...
2018-07-25 16:05:13
616
原创 Task原理源码分析
在Executor类中的TaskRunner是执行Task的入口进入updateDependencies()函数进入Task类中的run()方法在上面的Task的run方法中,调用了抽象方法,runTask(),那就意味着关键的操作都要依赖于子类的实现,Task的子类ShuffleMapTask,ResultTask,要运行它们的runTask,才能执行我们自定义的算子...
2018-07-24 20:10:28
778
原创 TaskScheduler原理与源码分析
接DAGScheduler源码分析stage划分算法,task最佳位置计算算法taskScheduler的submitTask()方法在TaskScheduler类中①在SparkContext源码分析中,会创建TaskScheduler的时候,会创建一个SparkDeploySchedulerBackend,这里的backend就是之前创建好了的SparkDeploySchedule...
2018-07-24 14:40:03
640
原创 DAGScheduler源码分析stage划分算法,task最佳位置计算算法
在DAGScheduler类中的HandleJobSubmitted是job调度的核心入口进入了newStage()方法它会创建一个stage对象进入submitStage()方法进入getMissingParentStages方法()进入submitWaitingStages()方法stage划分算法总结1,从finalStage倒推2,通过宽...
2018-07-24 10:33:10
567
原创 Worker原理与源码剖析
在worker这个类中的LaunchDriver一开始就创建了DriverRunner这个类进入DriverRunner类在创建完DriverRunner这个类后会调用start()这个方法进入start()方法进入createWorkingDirectory这个方法进入downloadUserJar()方法进入LaunchDriver()方法...
2018-07-23 16:18:52
419
原创 Master资源调度算法原理剖析与源码分析
在Master类中的schedule方法是master的主要的资源调度的方法首先是对driver进行调度上面中的提交模式在基于YARN的两种提交模式中有介绍进入 Random.shuffle()方法,主要的功能是随机打乱集合内的元素进入到launchDriver(worker, driver)方法接下来是对Application进行调度Application的调...
2018-07-23 11:24:23
1068
1
原创 Master注册机制与源码剖析
Application的注册源码进入createApplication进入registerApplication方法 接下来是Master状态改变处理的机制源码分析(DriverStateChanged)进入removeDriver()方法接下来是ExecutorStateChanged...
2018-07-22 20:11:58
319
原创 Master主备切换原理和源码剖析
completeRecovery()方法,主要就是完成Master的恢复将Application和Worker,过滤出来目前状态还是UNKNOWN然后遍历,分别调用removeWorker和finishApplication方法,对可能已经出故障,或者已经死掉的Application和Worker进行清理进入removeWorker方法进入finishApplicat...
2018-07-22 16:00:22
736
原创 SparkContext源码分析
SparkContext初始化的时候会创建taskScheduler进入createTaskScheduler方法有spark-submit的三种提交模式:这是我们常用的standdlone提交模式,在这种模式下会创建一个TaskSchedulerImpl,也会创建一个SparkDeploySchedulerBackend()并将scheduler传入进去,然后...
2018-07-22 13:35:55
446
原创 基于YARN的两种提交模式
yarn-cluster提交模式:1,spark-submit提交,发送请求到ResourceManager请求启动ApplicationMaster;2,ResourceManager分配container在某个nodemanager上,启动ApplicationMaster(相当于Driver);3,ApplicationMaster找到ResourceManager,进行反注...
2018-07-22 09:10:24
914
原创 宽依赖和窄依赖
窄依赖:一个RDD,对它的父RDD,只有简单的一对一的依赖关系。也就是说,每个RDD的partition,仅仅依赖于父RDD中的一个partition。父RDD和子RDD的partition之间的关系是一对一的。宽依赖:本质就是Shuffle,就是每一个父RDD的partition中的数据,都可能会传输一部分,到下一个RDD的每个partition中。此时就会出现,父RDD和子RDD的pa...
2018-07-22 08:54:42
511
原创 Spark内核架构深度剖析
1,通过spark-submit提交编写好的Spark程序,这时候spark会通过反射的方式,创建和构造一个DriverActor进程出来。2,Driver进程会执行我们的Application应用程序,在代码中SparkContext在初始化的时候会构造出来DAGScheduler和Task Scheduler,3,应用程序每执行到一个action就会创建一个job,job会提交给D...
2018-07-21 20:16:12
479
原创 Spark架构原理
1,编写的Spark程序在Driver上由Driver进程执行,Driver进程启动后,就会做一些初始化操作,在这个操作过程中就会发送请求到Master上,进行Spark应用程序的注册,就是让master知道有一个新的spark应用程序要运行。2,Master接收到Driver的注册请求就开始资源调度和分配,交给Woker进行计算。3,Worker接收到Master的请求之后,会...
2018-07-21 16:48:21
311
原创 匿名内部类工厂模式
interface Service { void method1(); void method2();}interface ServiceFactory { Service getService();}public class Implementation1 implements Service{ public void method1() { System.out.print...
2018-07-07 14:39:48
332
原创 对参数进行调优
查看linux的服务,可以关闭不必要的服务ntsysv停止打印服务#/etc/init.d/cups stop#chkconfig cups off关闭ipv6#vim /etc/modprobe.conf添加内容alias net-pf-10 offalias ipv6 off 调整文件最大打开数查看: ulimit -a 结果:open files (-n) 1024临时修改: ulim...
2018-06-13 09:18:22
595
原创 从应用程序角度进行优化
(1) 避免不必要的reduce任务如果mapreduce程序中reduce是不必要的,那么我们可以在map中处理数据,Reducer设置为0。这样避免了多余的reduce任务。(2) 为job添加一个Combiner为job添加一个combiner可以大大减少shuffle阶段从map task拷贝给远程reducetask的数据量。一般而言,combiner与reducer相同。(3) 根据处...
2018-06-13 09:16:08
362
原创 hadoop框架中怎么来优化
(1) 从应用程序角度进行优化。由于mapreduce是迭代逐行解析数据文件的,怎样在迭代的情况下,编写高效率的应用程序,是一种优化思路。(2) 对Hadoop参数进行调优。当前hadoop系统有190多个配置参数,怎样调整这些参数,使hadoop作业运行尽可能的快,也是一种优化思路。(3) 从系统实现角度进行优化。这种优化难度是最大的,它是从hadoop实现机制角度,发现当前Hadoop设计...
2018-06-13 09:15:18
1129
原创 mapreduce怎么处理数据倾斜问题?
数据倾斜:map /reduce程序执行时,reduce节点大部分执行完毕,但是有一个或者几个reduce节点运行很慢,导致整个程序的处理时间很长,这是因为某一个key的条数比其他key多很多(有时是百倍或者千倍之多),这条key所在的reduce节点所处理的数据量比其他节点就大很多,从而导致某几个节点迟迟运行不完,此称之为数据倾斜。用hadoop程序进行数据关联时,常碰到数据倾斜的情况,这里提供...
2018-06-13 09:14:34
922
原创 elastic安装配置
http://www.elastic.co/guide/en/elasticsearch/reference/current/setup-configuration.htmlhttps://github.com/elastic/elasticsearch###【在多台机器上执行下面的命令】####es启动时需要使用非root用户,所有创建一个bigdata用户:useradd bigdat...
2018-05-27 09:35:59
697
原创 spark-sql
//1.读取数据,将每一行的数据使用列分隔符分割val lineRDD = sc.textFile("hdfs://node1.smart.cn:9000/person.txt", 1).map(_.split(" "))//2.定义case class(相当于表的schema)case class Person(id:Int, name:String, age:Int)//3.导入隐...
2018-05-25 17:31:42
226
原创 spark集群提交任务过程
1,windows客户端向master提交任务请求资源,master会根据worker数量来分配资源;2,真正执行任务的不是worker而是executer,worker调用executer,来接收windows提交过来的任务,并开始执行。...
2018-05-24 17:27:53
409
原创 spark例子ip归属地查询
package cn.smart.sparkimport java.sql.{Connection, Date, DriverManager, PreparedStatement}import org.apache.spark.{SparkConf, SparkContext}/** * Created by Mr.Smart on 2018-05-24. */object I...
2018-05-24 13:30:18
516
原创 spark自定义排序
package cn.smart.sparkimport org.apache.spark.{SparkConf, SparkContext}/** * Created by Mr.Smart on 2018-05-24. */object OrderContext { implicit val girlOrdering = new Ordering[Girl] { ...
2018-05-24 10:13:32
353
原创 Scala的RPC通信(akka)
Master:import akka.actor.{Actor, ActorRef, ActorSystem, Props}import com.typesafe.config.ConfigFactoryclass Master extends Actor { println("constructor invoked") override def preStart(): Uni...
2018-05-20 13:22:40
320
原创 python爬取微信文章
from urllib.parse import urlencodefrom requests.exceptions import ConnectionErrorfrom pyquery import PyQuery as pqimport pymongofrom config import *client = pymongo.MongoClient(MONGO_URL)db = c...
2018-05-19 22:06:48
1032
原创 python爬取淘宝华为手机
import refrom selenium import webdriverfrom selenium.common.exceptions import TimeoutExceptionfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitf...
2018-05-19 22:06:16
1197
原创 实时业务指标代码实例
主类:package kafkaAndStorm;import backtype.storm.Config;import backtype.storm.LocalCluster;import backtype.storm.StormSubmitter;import backtype.storm.topology.TopologyBuilder;import storm.kafka.Kaf...
2018-05-12 21:41:22
920
原创 kafka简单代码实现
生产者:package cn.smart.storm.kafka.simple;import kafka.javaapi.producer.Producer;import kafka.producer.KeyedMessage;import kafka.producer.ProducerConfig;import java.util.Properties;import java.ut...
2018-05-12 21:30:01
1741
原创 kafka知识点总结
1、kafka是什么 类JMS消息队列,结合JMS中的两种模式,可以有多个消费者主动拉取数据,在JMS中只有点对点模式才有消费者主动拉取数据。 kafka是一个生产-消费模型。 Producer:生产者,只负责数据生产,生产者的代码可以集成到任务系统中。 数据的分发策略由producer决定,默认是defaultPartition Utils.abs(key.hashCode) % n...
2018-05-12 11:27:30
317
原创 爬取猫眼电影
import jsonfrom multiprocessing import Poolimport requestsfrom requests import RequestExceptionimport redef get_one_page(url): try: headers = { 'User-Agent': 'Mozilla/5.0...
2018-05-10 20:50:37
403
原创 Storm启动流程分析
Storm启动流程分析1、客户端运行storm nimbus时,会调用storm的python脚本,该脚本中为每个命令编写一个方法,每个方法都可以生成一条相应的Java命令。2、nimbus启动之后,接收客户端提交任务 该命令会执行storm-starter-topologies-o.9.6.jar 中的storm-starter-topologies-o.9.6.jar的main方法,main方...
2018-05-10 16:35:40
550
原创 Storm内部的通信机制原理
1,不同的supervisor之间通过网络进行通信,每个supervisor的工作环境中都会有一个输入和输出的缓存队列;2,由于spout和bolt处理任务的数量不一致,因此在bolt的前面也会有一个消息队列对数据进行缓存,同理WordCountBolt也会有一个消息队列,对数据进行缓存...
2018-05-10 12:28:30
533
原创 storm集群的工作流程
1,客户端向nimbus提交任务请求;2,nimbus接收到客户端的任务获取supervisor的空闲worker,开始分配任务;3,supervisor集群通过监听zookeeper,获取到nimbus所分配的任务,开始启动worker;4,supervisor集群中的worker中的spout开始获取要处理的数据,将数据分发给bolt1,各个集群中的bolt1开始对数据进行切割,互不干扰;5,...
2018-05-10 12:17:11
544
原创 Storm编程模型
Topology:Storm中运行的一个实时应用程序的名称。(拓扑) Spout:在一个topology中获取源数据流的组件。通常情况下spout会从外部数据源中读取数据,然后转换为topology内部的源数据。 Bolt:接受数据然后执行处理的组件,用户可以在其中执行自己想要的操作。Tuple:一次消息传递的基本单元,理解为一组消息就是一个Tuple。 Stream:表示数据的流向。...
2018-05-10 11:43:14
297
原创 storm核心组件
Nimbus:负责资源分配和任务调度。Supervisor:负责接受nimbus分配的任务,启动和停止属于自己管理的worker进程。---通过配置文件设置当前supervisor上启动多少个worker。Worker:运行具体处理组件逻辑的进程。Worker运行的任务类型只有两种,一种是Spout任务,一种是Bolt任务。Task:worker中每一个spout/bolt的线程称为一个task...
2018-05-10 11:40:07
362
原创 Storm架构和编程模型总结
1、编程模型 DataSource:外部数据源 Spout:接受外部数据源的组件,将外部数据源转化成Storm内部的数据,以Tuple为基本的传输单元下发给Bolt Bolt:接受Spout发送的数据,或上游的bolt的发送的数据。根据业务逻辑进行处理。发送给下一个Bolt或者是存储到某种介质上。介质可以是Redis可以是mysql,或者其他。 Tuple:Storm内部中数据传输的基本单元,里面...
2018-05-09 14:52:07
236
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅