关闭

spark shuffle过程分析

shuffle是作业执行过程中的一个重要阶段,对作业性能有很大影响,不管是对hadoop还是spark,shuffle都是一个核心环节,spark的shuffle和hadoop的shuffle的原理大致相同,shuffle发生在ShuffleMapTask中,在一个task处理partition数据时,需要对外输出作为下个stage的数据源,这个输出可能是不落盘的,但如果数据量很大,导致内存放不下...
阅读(498) 评论(0)

spark task启动

woker接受到LaunchTask消息后会启动task,以local模式为例,代码如下。task是由executor来启动的 override def receiveWithLogging = { case ReviveOffers => reviveOffers() ...... def reviveOffers() { val offers = Seq(new W...
阅读(358) 评论(0)

spark shuffle内存申请策略

在一个executor中可以并行执行多个task,这些task都可能发生shuffle,每个task看作一个线程,这些线程公用一个内存池,这时就涉及到内存的使用策略了,申请过多会导致其他task spill内存不足,过少又会影响自身效率,spark中对这块的内存管理位于ShuffleMemoryManager类中,基本的分配策略是如果线程数为n,那么spark可以确保一个线程的内存在1/n和1/2...
阅读(660) 评论(0)

Spark TaskSet提交及执行准备

一个stage是由一组相同运算的task组成,他们分别计算不同的partition,stage的提交实际是向调度器提交一组包含相同计算的task,这里调度器的名字是TaskScheduler,其调度单位是taskset,stage在提交是使用了递归算法,会先提交没有parent stage的stage,代码如下: private def submitStage(stage: Stage) {...
阅读(889) 评论(0)

Spark stage切分和提交

客户端构建好RDD的DAG以后,会提交至DAGScheduler来处理,这是一个Stage级别的调度器,他首先会把作业切分为一个个Stage,每个Stage由一组相同运算的tasks组成,然后会以taskset的形式提交给TaskScheduler。DS还会跟踪stage的输出与物化情况、检测task运行时的最优位置,重新提交失败的stage。     DAGSheduler接收到JobSubm...
阅读(867) 评论(0)

Spark中RDD DAG图的建立

RDD是spark计算的核心,是分布式数据元素的集合,具有不可变、可分区、可被并行操作的特性,基础的RDD类包含了常用的操作,如果需要特殊操作可以继承RDD基类进行自己的扩展,基础预算包括map、filter、reduce等。   RDD包含5个主要特性:partition、针对split的算子、自身依赖哪些RDD、分区类型(默认hash)、split计算是的分区位置(例如计算HDFS bloc...
阅读(1990) 评论(0)

隧道打通自动化脚本

平时我们可能有打通网络的需求,也就是建立隧道,比如两个建立两个只有内网IP机器的直连。openssh给我们提供了这个功能,但有时隧道可能不稳定,超时、网络波动等情况,这时就需要重新建立连接,而且每次要输入密码,比较麻烦,下面这个脚本可以让你高枕无忧了,把下面这个脚本丢入crontab中,每一个小时执行一次。 #!/bin/bash HOST=root@110.110.110.110 PORT=5...
阅读(649) 评论(0)

JStorm之Woker启动流程

我们知道,在Jstorm中具体任务执行是由Woker来完成的,Woker的启动是由Supervisor组件负责,下面就介绍一个Woker的启动流程。 Sueprvisor在启动后会启动一个检测任务分配的线程,该线程周期性的到Zookeeper中查询任务分配的情况,一旦有新的任务到来,就会把自己负责的Woker启动起来,当然其中具体细节还有很多,大概流程就是这样的。 线程的执行体定义在Event...
阅读(2199) 评论(0)

JStorm之Topology调度

topology在服务端提交过程中,会经过一系列的验证和初始化:TP结构校验、创建本地目录并拷贝序列化文件jar包、生成znode用于存放TP和task等信息,最后一步才进行任务分配,如下图: 提交主函数位于ServiceHandler.java中 private void makeAssignment(String topologyName, String topologyId, ...
阅读(1079) 评论(0)

maven安装本地jar包

在日常开发中我们经常使用maven,但仓库中有时并未包含我们使用的jar文件,比如oracle的jdbc驱动,这时就需要我们手工安装才能正常进行开发,在此记录下这个简单过程: 1、首先要有一个oracle的jdbc驱动jar包 2、使用maven命令行安装该jar包,命令如下: 3、在pom文件中引入该依赖...
阅读(761) 评论(0)

JStorm之Topology提交服务端

topology提交前会先判断集群中是否存在同名作业,如果存在在提交失败,如果没有则会增加集群提交次数SubmittedCount,每次提交成功,该变量都会加1,然后会为该作业分配一个id,生成规则如下: public static String TopologyNameToId(String topologyName, int counter) { return topologyNam...
阅读(1304) 评论(0)

JStorm之Topology提交客户端

一个topology包含一或多个spout bolt,spout负责在数据源获得数据并发送给bolt,每个bolt负责做完处理后发给下一个bolt。通常topology的创建是由TopologyBuilder来创建的,该组件会记录包含哪些spout bolt,并做相应验证:各组件是否有id冲突,校验方法如下: private void validateUnusedId(String id) {...
阅读(1004) 评论(0)

JStorm之Supervisor启动流程

Supervisor中文翻译是监督者,意思简单明了,就是对资源进行监控,其实主要是woker资源。该组件所做的事情概括如下:     1、每隔一段时间发送心跳证明自己还活着     2、下载新的topology     3、释放无效的woker     4、分配新的任务   该组件主要包含:心跳线程、supervisor事件接受线程、处理线程,一旦事件接受到则会进入任务分配环节,主要逻辑...
阅读(2780) 评论(0)

JStorm之NimbusServer启动流程

NimbusServer相当于hadoop里的JobTracker或yarn里的ResourceManager,在集群中属于首脑地位,负责分发任务,监控集群状态,与supervisor的通信主要通过Zookeeper。nimbus在启动过程中会做以下工作,以保证集群稳定运行: 1、清理无效topology 2、建立zk连接并创建相应znode 3、启动监控线程 4、启动httpserver...
阅读(1477) 评论(0)

Docker命令速记

1、启动容器并映射宿主机到容器端口 docker run -p 127.0.0.1:20001:22 -ti centos /bin/bash 2、daemon方式启动容器 docker run -d -p 127.0.0.1:5000:22 -ti centos /bin/bash docker run -ti -p 0.0.0.0:7600:9600 -p 0.0.0.0...
阅读(882) 评论(0)
96条 共7页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:125127次
    • 积分:2160
    • 等级:
    • 排名:第18386名
    • 原创:93篇
    • 转载:3篇
    • 译文:0篇
    • 评论:6条
    文章分类
    最新评论