23 Feb 2021
文章分析spark
在yarn-client
、yarn-cluster
模式下启动的流程,yarn
是apache
开源的一个资源管理的组件。JobTracker
在yarn
中大致分为了三块:一部分是ResourceManager
,负责Scheduler
及ApplicationsManager
;一部分是ApplicationMaster
,负责job
生命周期的管理;最后一部分是JobHistoryServer
,负责日志的展示;
先看一个spark
官网上通过yarn
提交用户应用程序的spark-submit
脚本,从该脚本开始分析在yarn
环境下执行的流程。
./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \ # can be client for client mode
--executor-memory 20G \
--num-executors 50 \
/path/to/examples.jar \
1000
在分析源码前需要在父pom.xml
中引入yarn
资源代码模块,使得其class
文件加载到classpath
中。
18 Feb 2021
spark目前支持以standalone、Mesos、YARN、Kubernetes等方式部署,本文主要分析apache spark在standalone模式下资源的初始化、用户application的提交,在spark-submit脚本提交应用时,如何将–extraClassPath等参数传递给Driver等相关流程。
从spark-submit.sh
提交用户app
开始进行分析,--class
为jar
包中的main
类,/path/to/examples.jar
为用户自定义的jar
包、1000
为运行SparkPi
所需要的参数(基于spark 2.4.5
分析)。
# Run on a Spark standalone cluster in client deploy mode
./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://207.184.161.138:7077 \
--executor-memory 20G \
--total-executor-cores 100 \
/path/to/examples.jar \
1000
在spark
的bin
目录下的spark-submit.sh
脚本中存在调用spark-class.sh
,同时会将spark-submit
的参数作为"$@"
进行传递:
10 Feb 2021
java
相对于C++
优势在于自动的垃圾回收,提供对象的构造函数后,不需要再提供析构函数(销毁对象,释放之前申请的内存),更易避免了内存泄露的问题。主要归功于虚拟机进行垃圾回收,虚拟机版本有Sun
公司的HotSopt VM
、BEA
的JRockit
、微软的JVM
及IBM
的J9 VM
。
内存区域划分
Java
虚拟机在执行程序时会把管理的内存划分为若干个不同的数据区域,这些区域有各自的用途,以及创建和销毁的时间。
1)程序计数器(Program Counter Register
)占用一块较小的内存空间,可看作是当前线程执行字节码的行号指示器(与操作系统中的PC
的概念相同,指定下一条指令的位置)。在执行分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。每个线程都有一个独立的程序计数器;
2)Java
虚拟机栈也是线程私有的,声明周期与线程相同。描述Java
方法执行的内存模型,每个方法执行会创建一个栈帧 用于存储局部变量表、操作数栈、动态链接、方法出口等信息。递归方法调用超过最大深度时 将跑出StackOverflowError
的异常;
12 Nov 2019

12 Oct 2019

Kafka分布式消息中间件使用:
Kafka
是为了解决LinkedIn
数据管道问题应用而生的,它的设计目的是提供一个高性能的消息系统,可以处理多种数据类型,并能够实时提供纯净且结构化的用户活动数据和系统度量指标。
数据为我们所做的每一件事都提供了动力。—— Jeff Weiner, LinkedIn CEO
一、基础环境搭建:
Kafka
依赖于Zookeeper
的分布式节点选举功能,安装Kafka
需安装Jdk
、Zookeeper
、Scala
组件。
从Apache
官网中心下载Zookeeper
组件,然后安装Zookeeper
环境: