设为首页 收藏本站
查看: 1338|回复: 0

[经验分享] Spark简介

[复制链接]

尚未签到

发表于 2019-1-30 10:41:46 | 显示全部楼层 |阅读模式
  简介:
  spark是一个内存计算框架 , 解决了mapreduce在迭代与交互方面的不足
  迭代: 多轮算法计算形式,pagerank,逻辑回归等
  交互: 实时数据,数据仓库查询等
  

  spark重要概念:
  RDD:
  弹性分布式数据集, 弹性(数据多节点分片)分布式(集群节点)数据集(默认加载至内存)
  操作:
  转换(transformation) rdd->newrdd
  # 注意此类操作不会提交作业
  map(func) 形成新的RDD集
  filter(func) 过滤结果成为新的RDD集
  flatmap(func) 映射为多于0的输出元素
  groupbykey(key) 以Key为组的数据集
  reducebykey(func) 以Key为组的数据集在经过func的处理
  join(newrdd) 连接两个数据集 k,v k,w => k,(v,w)
  sortbykey(desc) 排序数据集
  动作(action) 结果处理
  # 注意此类操作将提交作业
  reduce(func) func函数输入两个返回一个结果
  collect 返回操作后的数据元素
  count 元素个数统计
  countByKey 按Key统计每组的数目
  saveastextfile 以文件形式保存计算结果集
  saveassequencefile 以序列文件保存计算结果集
  操作分类:
  value:
  1->1:
  map, flatmap, mappartitions, glom
  n->1:
  union类型一致合并, cartesian分区笛卡尔积
  n->n:
  groupby
  n属于m:
  filter, distinct, subtract, sample, takesample
  cache:
  cache仅内存, persist可决定缓存位置
  key-value:
  1->1:
  mapValues
  union:
  combineByKey, reduceByKey, partitionBy分区策略, cogroup协同划分
  join:
  join(cogroup,flatMapValues), leftOutJoin, rightOutJoin
  action:
  无输出:
  foreach
  HDFS:
  saveAsTextFile, saveAsObjectFile
  Scala:
  collect, collectAsMap, reduceByKeyLocally, count, lookup, top(top,take,takeOrdered,first), reduce, fold, aggregate
  DataType:
  

  spark编程概念:
  共享变量:
  广播变量(boarkcast不可修改) .value
  累加器(accumulator可累加)  .value
  初始化:
  构建SparkContext(集群地址,作业名称,sparkhome,作业依赖项)
  RDD类型:
  并行集合与hadoop数据集
  并行集合: scala集合,可分片slice(parallelize)
  hadoop集合: 文本,序列(K,V),inputformat
  (之后均可做map/reduce操作)
  Cache:
  RDD转换后可缓存persist,cache,可容错
  cache级别: 仅内存,内存磁盘,内存序列化kryo,内存磁盘序列化,仅磁盘,
  

  spark基本架构:
  应用程序间环境隔离 , 资源管理(YARN , Mesos) + 应用程序管理 . 程序运行过程中对RDD分片的优化(窄fusion , 宽全局barrier)
  spark运行流程:
    提交应用 -> DAG依赖流程化 -> 执行DAG至完成 -> 销毁运行环境
  提交应用:
    构建运行环境: 粗(一次YARN,Mesos).细(多次Mesos)
    启动RDD管理器 BlockManager
  DAG依赖流程化:
    分解宽窄依赖: 归组
  fusion优化,不需要物化
  执行DAG至完成:
    数据本地化: 基架感知
    推测执行: 另起资源比较
  销毁运行环境:
  回收资源
  

  spark on YARN:
  客户端 提交任务 至 ApplicationMaster 申请资源 向 Nodemanager
  SAM 内部有 ClusterScheduler(cpu核数) 有了资源 启动 StandaloneExecutorBackend(container大小) 注册 akka 等待任务 之后执行 完毕回收资源
  

  Mesos介绍:
  集群资源管理器 twitter,douban
  客户端scheduler -> MesosSchedulerDriver -> MesosMaster(zk) -> MesosSlave(Executor)
  master: 核心, 资源接入,分配Allocator,其他框架的管理
  salve: 接收命令,报告状态(任务,资源)
  framework scheduler: MesosSchedulerDriver第三方实现接入mesos, 双层调度(资源给框架,框架自定任务)  --->  类似hadoop jobtrack
  framework executor: MesosExecutorDriver第三方执行实现  ---> 类似hadoop tasktrack
  

  第三方框架注册流程:
  第三方实现MesosSchedulerDriver,启动SchedulerProcess服务,MasterDetector对象(探测master通知schedulerprocess),sp会向master发送注册消息,sp确认,framework确认
  

  mesos资源分配: 主资源公平调度算法,多维度资源,授权接入框架
  设计: 资源拒绝(slave), 资源过滤(salve), 资源回收(master)
  

  mesos容错设计:
  master: zk
  salve: 心跳,快照运行目录
  

  mesos vs YARN:
  设计目标一致: 通用集群资源管理方案
  容错一致: zk,多主
  在线升级: YARN的salve不支持
  调度模型一致: 双层
  调度算法: YARN除了DRF还支持容量与失败
  资源隔离一致: cgroups
  支持框架一致: mapreduce,strorm,spark等
  资源分配颗粒度: YARN不支持动态资源分配
  

  网络库:
  rpc            serialization
  libprocess     protocal buffer
  avro           avro
  Thrift         idl
  socket kryo
  

  libprocess设计: 消息(类型) -> 消息队列 -> 消息处理分发器(dispatcher) -> 消息处理    高效,易用
  

  spark工作机制:
  应用运行提交:
  spark任务调度分配:
  spark io: 序列化(进程actor,NIO,netty,磁盘kyro)
  压缩(snappy,LZF)
  spark net:RPC, RMI, WEB Service, EJB
  AKKA
  spark 容错: 血统, checkpoint
  

  

  spark编程:
  下载源码包 , 安装maven , ./make-distribution.sh --skip-java-test构建本地模式
  安装sbt打包工具
  编写代码:
  python:
  from pyspark import SparkContext
  scala:
  import org.apache.spark.SparkContext
  import org.apache.spark.SparkContext._
  import org.apache.spark.SparkConf
  编写sbt依赖文件:
  name := "Simple Project"
  version := "1.0"
  scalaVersion := "2.10"
  libraryDependencies += "org.apache.spark" %% "spark-core" % "1.1.0"
  sbt打包: sbt package
  提交应用: /bin/spark-submit --class "SimpleApp" --master local test/target/scala-2.10/simple-project_2.10-1.0.jar
  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-669515-1-1.html 上篇帖子: spark下dataframe转为rdd格式 下篇帖子: Spark随谈
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表