0%

JobManager,相当于Spark 中的ApplicationMaster中的Driver
作业管理器,是一个JVM进程,接收作业
分发执行图到taskManager

TaskManager,相当于Spark 中的Executor
任务管理器,是一个JVM进程,执行作业,它可能会在独立的线程上执行一个或多个subtask
Flink中会有多个TaskManager
每个TaskManager都包含一定数量的插槽slots

Read more »

Spark 架构进阶

一些重要的源码类
DAGScheduler.scala
EventLoop.scala

spark DAG引擎

Read more »

JVM 内存管理

参考文档

1. 堆和栈

JVM内存划分:

  1. 寄存器(程序计数器PC拿到指令地址,放入指令寄存器IR中,cpu执行指令)
  2. 本地方法区(本地方法栈):主要是调用native方法
  3. 方法区:记录类的信息,常量等

    这个方法区在jdk8之前是叫永久代,存储一些类的信息,方法的信息等类似元数据信息一样的东西,如果程序加载的类过多,也可能会导致OOM。JDK8 把这个区域挪出来,不再保存在虚拟机中,而是本地内存,叫做元空间,这样就不局域于jvm可使用的系统内存

  4. 栈内存(stack)
    • 由编译器自动分配,存放函数的参数值,局部变量的值(定义在方法中的都是局部变量,方法外的是全局变量,for循环内部也是局部变量)
    • 先加载函数才能进行局部变量的定义,所以方法先进栈,再定义变量,变量离开作用域后释放,生命周期都很短
  5. 堆内存(heap,不是数据结构中的堆)
    • 由程序猿分配释放,如果程序猿不释放,程序结束时由GC回收
    • 存储的是数组和对象,凡是new的都在堆中,实体(对象)里面封装了多个数据,一个数据消失,实体不会消失,还可以用,所以堆不会随时释放,会由GC不定时回收
Read more »

Interview-1

1. 线程的状态

  • 新建(NEW):新建一个线程
  • 可运行(RUNNABLE):调用start,等待cpu的使用权
  • 运行(RUNNING):可运行(RUNNABLE)的线程拿到cpu时间片,开始执行
  • 阻塞(BLOCKED):指线程因为某种原因放弃了cpu 使用权,即让出了cpu时间片
    • 等待阻塞:运行(running)的线程执行o.wait()方法,JVM会把该线程放入等待队列(waitting queue)中
    • 同步阻塞:运行(running)的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池(lock pool)中。
    • 其他阻塞:运行(running)的线程执行Thread.sleep(long ms)或t.join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入可运行(runnable)状态。
    Read more »

Linux 常用命令

1. vim

  1. dd 删除一整行,下一行提上来;D删除一整行,光标在行头
  2. S删除一整行并插入,相当于D+i;s 删除当前位置的字符并插入
  3. I 到行首插入;i 在当前光标位置插入
  4. :set nu 行号;:set nonu 取消行号
  5. J 合并当前行和下一行
  6. ctrl+f 向下翻页
  7. ctrl+b 向上翻页
  8. n 向下查找匹配项
  9. N 向上查找匹配项
Read more »