Technical Blog

Welcome to my world! 有问题请osswangxining(at)163.com


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

Writing YARN Applications

发表于 2016-04-09

Hadoop: Writing YARN Applications

  • 原生开发YARN应用
    • 参考: http://hadoop.apache.org/docs/r3.0.0-alpha2/hadoop-yarn/hadoop-yarn-site/WritingYarnApplications.html
    • 在YARN上编写一个应用程序,你需要开发Client和ApplicationMaster两个模块,并了解涉及到的几个协议的若干API和参数列表,其中ApplicationMaster还要负责资源申请,任务调度、容错等,总之,整个过程非常复杂。
  • 基于Twill开发
    • 参考: http://twill.apache.org/GettingStarted.html
    • 优点: 简化了YARN开发的复杂性;
    • 缺点: 不容易trouble shooting,封装部分不易detect问题,另外也不能支持最新的Hadoop cluster;文档也太少;
  • 基于Slider开发
    • 参考: http://slider.incubator.apache.org
    • 优点: 简化了YARN开发的复杂性;
    • 缺点: 不容易trouble shooting,封装部分不易detect问题,另外也不能支持最新的Hadoop cluster;本身的框架也很复杂,
  • 基于Spring Hadoop开发
    • 参考: https://spring.io/guides/gs/yarn-basic/
    • 优点: 简化了YARN开发的复杂性;
    • 缺点: 不容易trouble shooting,封装部分不易detect问题,另外也不能支持最新的Hadoop cluster;

开发Client和ApplicationMaster

当用户向YARN中提交一个应用程序后,YARN将分两个阶段运行该应用程序: 第一个阶段是启动ApplicationMaster; 第二个阶段是由ApplicationMaster创建应用程序,为它申请资源,并监控它的整个运行过程,直到运行完成。

1.开发Client启动AM

Client部分是用于将应用提交到YARN, 从而可以启动application master.
客户端通常只需与ResourceManager交互,期间涉及到多个数据结构和一个RPC协议,具体如下:

阅读全文 »

YARN基本架构

发表于 2016-03-29

YARN基本架构

YARN是Hadoop 2.0中的资源管理系统,它的基本设计思想是将MRv1中的JobTracker拆分成了两个独立的服务:

  • 一个全局的资源管理器ResourceManager
  • 每个应用程序特有的ApplicationMaster。

    其中ResourceManager负责整个系统的资源管理和分配,而ApplicationMaster负责单个应用程序的管理。

YARN 总体上仍然是Master/Slave结构,在整个资源管理框架中,ResourceManager为Master,NodeManager为 Slave,ResourceManager负责对各个NodeManager上的资源进行统一管理和调度。当用户提交一个应用程序时,需要提供一个用以 跟踪和管理这个程序的ApplicationMaster,它负责向ResourceManager申请资源,并要求NodeManger启动可以占用一 定资源的任务。由于不同的ApplicationMaster被分布到不同的节点上,因此它们之间不会相互影响。
yarn_architecture

1.ResourceManager(RM)

RM是一个全局的资源管理器,负责整个系统的资源管理和分配。它主要由两个组件构成:调度器(Scheduler)和应用程序管理器(Applications Manager,AM)。

阅读全文 »

Running Spark on YARN

发表于 2016-03-09

To launch a Spark application in cluster/yarn mode:

1
$ ./bin/spark-submit --class path.to.your.Class --master yarn --deploy-mode cluster [options] <app jar> [app options]

For example:

1
2
3
4
5
6
7
8
9
$ ./bin/spark-submit --class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
--driver-memory 4g \
--executor-memory 2g \
--executor-cores 1 \
--queue thequeue \
lib/spark-examples*.jar \
10

阅读全文 »

Java并发编程(4) - ThreadLocal | volatile | Lock

发表于 2016-01-13 | 分类于 分布式&云计算 , Java并发编程

ThreadLocal

ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。

阅读全文 »

Java并发编程(3) - Timer和TimerTask

发表于 2016-01-12 | 分类于 分布式&云计算 , Java并发编程

Timer和TimerTask

使用 Timer 实现任务调度的核心类是 Timer 和 TimerTask。其中 Timer 负责设定 TimerTask 的起始与间隔执行时间。使用者只需要创建一个 TimerTask 的继承类,实现自己的 run 方法,然后将其丢给 Timer 去执行即可。
Timer 的设计核心是一个 TaskList 和一个 TaskThread。Timer 将接收到的任务丢到自己的 TaskList 中,TaskList 按照 Task 的最初执行时间进行排序。TimerThread 在创建 Timer 时会启动成为一个守护线程。这个线程会轮询所有任务,找到一个最近要执行的任务,然后休眠,当到达最近要执行任务的开始时间点,TimerThread 被唤醒并执行该任务。之后 TimerThread 更新最近一个要执行的任务,继续休眠。

Timer 的优点在于简单易用,但由于所有任务都是由同一个线程来调度,因此所有任务都是串行执行的,同一时间只能有一个任务在执行,前一个任务的延迟或异常都将会影响到之后的任务。

阅读全文 »

Java并发编程(1) - 同步/并发容器

发表于 2016-01-12 | 分类于 分布式&云计算 , Java并发编程

同步/并发容器

同步容器

在Java的集合容器框架中,主要有四大类别:List、Set、Queue、Map。其中,Collection和Map是一个顶层接口,而List、Set、Queue则继承了Collection接口,分别代表数组、集合和队列这三大类容器。

  • ArrayList、LinkedList都是实现了List接口; - 非线程安全的
  • HashSet实现了Set接口; - 非线程安全的
  • Deque(双向队列,允许在队首、队尾进行入队和出队操作)继承了Queue接口,PriorityQueue实现了Queue接口;
  • LinkedList(实际上是双向链表)实现了了Deque接口;

如果有多个线程并发地访问这些容器时,就会出现问题。因此,在编写程序时,必须要求程序员手动地在任何访问到这些容器的地方进行同步处理,这样导致在使用这些容器的时候非常地不方便。Java提供了同步容器供用户使用:

  • Vector、Stack、HashTable

    • Vector实现了List接口,Vector实际上就是一个数组,和ArrayList类似,但是Vector中的方法都是synchronized方法,即进行了同步措施。
    • Stack也是一个同步容器,它的方法也用synchronized进行了同步,它实际上是继承于Vector类。
    • HashTable实现了Map接口,它和HashMap很相似,但是HashTable进行了同步处理,而HashMap没有。
  • Collections类中提供的静态工厂方法创建的类

    • 在Collections类中提供了大量的方法,比如对集合或者容器进行排序、查找等操作。最重要的是,在它里面提供了几个静态工厂方法来创建同步容器类;
      阅读全文 »

Java并发编程(2)- Callable、Future和FutureTask | CountDownLatch、CyclicBarrier和Semaphore

发表于 2016-01-11 | 分类于 分布式&云计算 , Java并发编程

Callable、Future和FutureTask

无论是直接继承Thread,还是实现Runnable接口来创建线程,在执行完任务之后都无法获取执行结果。而自从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后得到任务执行结果。

阅读全文 »
1…45
Xi Ning Wang

Xi Ning Wang

专注于分布式高性能技术架构、容器|K8S、IoT云平台,支持语言:Java(script) | Python | Golang

47 日志
16 分类
34 标签
GitHub E-Mail Google StackOverflow
Links
  • Istio
  • gRPC
0%
© 2015 — 2018 Xi Ning Wang
由 Hexo 强力驱动
|
主题 — NexT.Gemini v5.1.4