认识cpu、核、进程与线程///学习sparkstreaming+kalfka

转载:
认识cpu、核、进程与线程:https://blog.csdn.net/zhengyshan/article/details/80641770
(a)并行与并发区别
线程切换
cpu给线程分配时间片(也就是分配给线程的时间),执行完时间片后会切换都另一个线程。
切换之前会保存线程的状态,下次时间片再给这个线程时才能知道当前状态。
从保存线程A的状态再到切换到线程B时,重新加载线程B的状态的这个过程就叫上下文切换。
而上下切换时会消耗大量的cpu时间。
线程开销
上下文切换消耗
线程创建和消亡的开销
线程需要保存维持线程本地栈,会消耗内存
串行,并发与并行
串行
多个任务,执行时一个执行完再执行另一个。
比喻:吃完饭再看视频。
并发
多个线程在单个核心运行,同一时间一个线程运行,系统不停切换线程,看起来像同时运行,实际上是线程不停切换。
比喻: 一会跑去厨房吃饭,一会跑去客厅看视频。
并行
每个线程分配给独立的核心,线程同时运行。
比喻:一边吃饭一边看视频。
多核下线程数量选择
计算密集型
程序主要为复杂的逻辑判断和复杂的运算。
cpu的利用率高,不用开太多的线程,开太多线程反而会因为线程切换时切换上下文而浪费资源。
IO密集型
程序主要为IO操作,比如磁盘IO(读取文件)和网络IO(网络请求)。
因为IO操作会阻塞线程,cpu利用率不高,可以开多点线程,阻塞时可以切换到其他就绪线程,提高cpu利用率。
总结
提高性能的一种方式:提高硬件水平,处理速度或核心数。
另一种方式:根据实际场景,合理设置线程数,软件上提高cpu利用率

(b)进程与线程区别
理解

  1. 进程是操作系统进行资源(包括cpu、内存、磁盘IO等)分配的最小单位。
  2. 线程是cpu调度和分配的基本单位。
  3. 我们打开的聊天工具,浏览器都是一个进程。
  4. 进程可能有多个子任务,比如聊天工具要接受消息,发送消息,这些子任务就是线程。
  5. 资源分配给进程,线程共享进程资源。
    线程与进程对比
    ©核的概念
    单核cpu和多核cpu:
  6. 都是一个cpu,不同的是每个cpu上的核心数。
  7. 多核cpu是多个单核cpu的替代方案,多核cpu减小了体积,同时也减少了功耗。
  8. 一个核心只能同时执行一个线程。

学习sparkstreaming+kalfka:
https://colobu.com/2015/01/05/kafka-spark-streaming-integration-summary/
https://www.ibm.com/developerworks/cn/opensource/os-cn-spark-practice2/index.html
(1)怎么理解一个工作节点可以执行一个或者多个executor.

前文:一个Spark集群至少包含一个worker节点,…;
参考:http://blog.51cto.com/36006798/1872140


默认情况下,Spark集群下的worker,只会启动一个Executor,只运行了一个 CoarseGrainedExecutorBackend 进程。Worker 通过持有 ExecutorRunner 对象来控制 CoarseGrainedExecutorBackend 的启停。
那么如何启动多个executor呢?通过设置参数来解决:

1、设置每个executor使用的cpu数为4

spark.executor.cores 4
2、限制cpu使用数量,这里会启动3个executor(12/4)

spark.cores.max 12  
3、设置每个executor的内存大小为8g

spark.executor.memory 12g
以上设置将会启动3个executor,每个executor使用4cpu,12gRAM。 
总共占用worker资源12cpu,36gRAM。

Spark1.6的源码部分为:

protected final String EXECUTOR_MEMORY = "--executor-memory";
protected final String TOTAL_EXECUTOR_CORES = "--total-executor-cores";
protected final String EXECUTOR_CORES = "--executor-cores";
也可以在提交任务的时候添加:

SparkSubmit --class com.dyq.spark.MyClass --master:spark://master:7077  --total-executor-cores 12 --executor-cores 24 --executor-memory 12g
tip
在使用过程中发现如果使用spark1.5以下版本有时候会出现即使有资源也申请不到的情况。

(2)executor就是一个进程, 负责启在一个worker节点上启动应用,运行task执行计算,存储数据到内存或者磁盘上。 每个Spark应用都有自己的executor。一个executor拥有一定数量的cores, 也被叫做“slots”, 可以执行指派给它的task。

(3) job:一个并行的计算单元,包含多个task。 在执行Spark action (比如 save, collect)产生; 在log中可以看到这个词。
(4)
sparkStreaming+kafka的gitbub项目python代码:
https://github.com/sridharswamy/Twitter-Sentiment-Analysis-Using-Spark-Streaming-And-Kafka/blob/master/README.md

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值