大数据
文章平均质量分 67
Leo Han
Leo Han
展开
-
11. spark源代码分析(基于yarn cluster模式)- 聊聊Stage和Task
通过前面的分析,我们了解到,在Spark中只存在两种Stage:ResultStageShuffleMapStageStage之前划分的条件是遍历当前RDD和父RDD的依赖列表,如果遇到了ShuffleDependency则进行Stage的划分,Spark中最后一个Stage永远都是ResultStage,其他的都是ShuffleMapStage。每个ShuffleMapStage都对应一个ShuffleMapTask而每个ResultStage都对应一个ResultTask我们经常说一个S原创 2021-11-02 15:20:03 · 159 阅读 · 0 评论 -
10. spark源代码分析(基于yarn cluster模式)- 聊聊RDD和Depedency
我们知道在Spark中RDD是一个特别重要的概念,可以说spark所有的逻辑都需要依赖RDD,这篇我们简单聊聊Spark中的RDD,spark中RDD的定义如下:abstract class RDD[T: ClassTag]( @transient private var _sc: SparkContext, @transient private var deps: Seq[Dependency[_]] ) extends Serializable with Logging {原创 2021-11-02 15:01:59 · 938 阅读 · 0 评论 -
9. spark源代码分析(基于yarn cluster模式)- Task执行,Reduce端读取shuffle数据文件
本系列基于spark-2.4.6通过上一节的分析,我们了解了Spark中ShuflleMapTask中Map端数据的写入流程,这个章节我们分析下Reduce端是如何读取数据的。在ShulleMapTask.runTask中,有这么一个步骤:writer.write(rdd.iterator(partition, context).asInstanceOf[Iterator[_ <: Product2[Any, Any]]])其中rdd.iterator: final def iterat原创 2021-10-28 17:40:51 · 1143 阅读 · 0 评论 -
8. spark源码分析(基于yarn cluster模式)- Task执行,Map端写入实现,ShuffleMapTask,SortShuffleWriter,ResultStage,ResultT
通过上一节分析,我们知道,task提交之后通过launchTasks来具体执行任务,这一章节我们看下其具体实现.private def launchTasks(tasks: Seq[Seq[TaskDescription]]) { for (task <- tasks.flatten) { val serializedTask = TaskDescription.encode(task) if (serializedTask.limit() >= m原创 2021-10-26 14:24:23 · 735 阅读 · 0 评论 -
7. spark源码分析(基于yarn cluster模式)- Task划分、资源分配、提交
通过上一节的分析,我们最后发现spark通过submitMissingTasks来提交Stage。这个章节我们来分析一下其实现以及Task的划分和提交。private def submitMissingTasks(stage: Stage, jobId: Int) { val partitionsToCompute: Seq[Int] = stage.findMissingPartitions() val properties = jobIdToActiveJob(jobId).prope原创 2021-10-22 17:07:31 · 412 阅读 · 0 评论 -
6. spark源码分析(基于yarn cluster模式)- job任务提交、Stage划分、Stage提交
我们知道,Spark中必须Action算子才会真正执行,这里我们以saveAsTextFile为例来说明整个过程。def saveAsTextFile(path: String): Unit = withScope { val nullWritableClassTag = implicitly[ClassTag[NullWritable]] val textClassTag = implicitly[ClassTag[Text]] val r = this.mapPartition原创 2021-10-21 20:08:24 · 264 阅读 · 0 评论 -
5. spark源码分析(基于yarn cluster模式)- SparkContext启动
当我们在程序中new SparkCotext的时候,首先根据传入的SparkConf创建一个新的SparkConf: private[spark] def createSparkEnv( conf: SparkConf, isLocal: Boolean, listenerBus: LiveListenerBus): SparkEnv = { SparkEnv.createDriverEnv(conf, isLocal, listenerBus, SparkC原创 2021-10-21 19:38:56 · 215 阅读 · 0 评论 -
4. spark源码分析(基于yarn cluster模式)-YARN contaienr启动-CoarseGrainedExecutorBackend
通过上一节的分析,我们确定,container中启动的为org.apache.spark.executor.CoarseGrainedExecutorBackend,接下来,我们看下其实现。def main(args: Array[String]) { var driverUrl: String = null var executorId: String = null var hostname: String = null var cores: Int = 0 va原创 2021-10-21 17:28:10 · 360 阅读 · 0 评论 -
3. spark源码分析(基于yarn cluster模式)-YARN ApplicationMaster启动
经过上一节我们分析到,Spark通过yarn client项RM提交了一个ApplicationMaster并启动,我们接下来看看其细节。 def main(args: Array[String]): Unit = { SignalUtils.registerLogger(log) val amArgs = new ApplicationMasterArguments(args) master = new ApplicationMaster(amArgs) System.原创 2021-10-20 17:30:43 · 259 阅读 · 0 评论 -
2. spark源码分析(基于yarn cluster模式)-YARN client启动,提交ApplicationMaster
通过上一节的研究,我们发现,spark提交任务后,启动了org.apache.spark.deploy.yarn.Client.run()方法,这里实际上就是spark利用yanr的客户端API在向YARN提交任务了,接下来我们一起来分析这个过程:def run(): Unit = { this.appId = submitApplication() if (!launcherBackend.isConnected() && fireAndForget) { v原创 2021-10-20 16:15:49 · 446 阅读 · 0 评论 -
1. spark源码分析(基于yarn cluster模式)-任务提交
首先声明,这个系列研究的源码基于spark-2.4.6我们在使用spark-shell提交任务的时候,一般采用如下模式提交任务:park-submit --class xxxxx --name 'test_xxxx' --master yarn-cluster --queue yarn-test --principal ad-bigdata-test --keytab 'xxxx.keytab' --num-executors 30 --drive原创 2021-10-20 15:40:09 · 213 阅读 · 0 评论 -
Yarn整体架构,客户端编程
YARN(Yet Another Resource Negotiator)是hadoop生态中重要的组成部分,一种资源管理调度系统,官方给出的整体架构和交互如下:Container首先说明一下Container这个概念,方便后续的展开说明。YARN是一个资源管理框架,在YARN中将资源抽象成Container这个概念,YARN将CPU和内存资源抽象封装在Container中,在具体代码实现上org.apache.hadoop.yarn.server.nodemanager.containermana原创 2021-10-18 16:49:50 · 584 阅读 · 0 评论 -
HDFS架构原理和读写流程分析,数据完整性,HA,fsimage,editlog
HDFS全称为Hadoop Distributed File System,是hadoop分布式文件系统的简称,也是hadoop的核心。数据最小存储粒度按照块存储。在HDFS中主要有如下几个角色: NameNode,DataNode,SecondaryNameNode,Client原创 2021-05-19 22:10:54 · 399 阅读 · 1 评论 -
impala中常用SQL操作,建表,增加分区,增加统计信息,增加字段,修改字段信息,impala-shell使用
impala中常用SQL操作:建表并创建分区,指定存储类型create EXTRENAL table IF NOT EXISTS testDB.testTable(a INT,b BIGINT,c STRING,d FLOAT,e DOUBLE,f BOOLEAN) PARTITIONED BY (year INT,month INT,day INT)stored as parquet从指定位置导入表:CREATE table testDB.testTable(a I原创 2021-05-06 20:31:17 · 12989 阅读 · 0 评论 -
spark shuffle过程详解,优化
Spark中的shuffle过程与Mapreduce的Shuffle过程很多概念都很类似。在spakr中,如果发生了宽依赖,前一个stage 的 ShuffleMapTask 进行 shuffle write, 把数据存储在 blockManager 上面, 并且把数据位置元信息上报到 driver 的 mapOutTrack 组件中, 下一个 stage 根据数据位置元信息, 进行 shuffle read, 拉取上个stage 的输出数据。在spark目前的版本中,主要有两种shuffle:Has原创 2021-05-02 22:08:37 · 730 阅读 · 0 评论 -
mapreduce过程shuffle详解,相关优化
我们知道,在大数据计算中,MapReduce主要有如下三个流程:MapShuffleReduce原创 2021-05-01 13:57:06 · 499 阅读 · 0 评论 -
java连接impala,jdbc,带kerberos认证登录
添加依赖: <dependency> <groupId>com.cloudera.impala</groupId> <artifactId>jdbc</artifactId> <version>2.5.31</version> ...原创 2020-05-06 14:24:17 · 1539 阅读 · 0 评论