lichengcom2009 发表于 2019-1-30 10:41:46

Spark简介

  简介:
  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]
查看完整版本: Spark简介