spark学习笔记

  1. 搭建spark开发环境

安装Java配置环境 + 下载spark

  1. 运行pyspark

  1. 通过spark—submit提交spark任务到集群运行
  2. Python安装findspark 和 pyspark库

  1. spark是大数据计算框架MapReduce的继任者,不同于MapReduce将计算中间结果放入磁盘中,spark采用的是将中间结果放入内存中,同时采用并行计算DAG图的优化,减少了不同任务之间的依赖

4、DAG:是Directed Acyclic Graph(有向无环图)的简称,反映RDD之间的依赖关系。

Driver Program:控制程序,负责为Application构建DAG图。

Cluster Manager:集群资源管理中心,负责分配计算资源。

Worker Node:工作节点,负责完成具体计算。

Executor:是运行在工作节点(Worker Node)上的一个进程,负责运行Task,并为应用程序存储数据。

Application > job > stage > task

Saprk架构:

spark部署:

/* Spark基本数据结构RDD:

通过读取文件生成RDD:

Rdd = sc.textFile(“hdfs文件地址”)

(保存rdd:saveAsTextFile)

通过将内存中的对象并行化生成对应的RDD

Arr= [2,3,4,5,6]

Rdd = sc.parallelize(arr)

/* RDD操作类型:transform、action

操作确定了RDD之间的依赖关系:

宽依赖(一对多或多对多)和窄依赖(一对一或多对一)

宽依赖一般具有shuffle过程,也即由父RDD分发到不同的子RDD分区

依赖关系确定了DAG(有向无环图)切分stage的方式:切割规则为 > 从后往前,遇到宽依赖就切割stage

RDD常用操作:

/* 常用Action操作:

  1. collect:将数据汇集到Driver
  2. take:将前*个数据汇集给Driver
  3. TakeSample:随机抽取若干个到Driver,第一个参数设置是否放回抽样
  4. countByKey:对pair RDD按key统计数量
  5. textFile:读取文件作为RDD
  6. SaveAsTextFile:保存RDD为文件

/* 常用transformation操作:

  1. map:对rdd内的每一个元素都进行一个映射转换rdd.map(lambda x: x ** 2)
  2. filter:应用过滤条件 rdd.filter(lambda x: x>5)
  3. flatMap:与map操作相似,但flatmap操作是将每个元素都进行映射后压成一个array之后输出
  4. Sample:第一个参数为确认是否重复抽样,也即是否放回抽样
  5. distinct:去重操作
  6. subtract:a.subtract(b)返回的是属于a不属于b的元素
  7. union:a.union(b) 合并a与b的数据
  8. Intersection:a.intersection(b) a与b的交集
  9. cartesian:a.cartesian(b) a 与 b的笛卡尔积
  10. sortBy:应用lambda进行排序,默认升序
  11. zip:a.zip(b)  a与b组成pair对
  12. zipWithIndex: a.zipWithIndex() 将a与他的index进行配对,从0开始配对

/* 常用pairRDD操作:

  1. reduceByKey:rdd.reduceByKey(lambda x,y: x+y)对相同key的value应用二元归并操作(reduce涉及到的一般都是二元归并操作)
  2. join 和 leftOuterJoin/rightOuterJoin:rdd.join(rdd) 两个rdd进行内连接,与表的内连接相似

/* 缓存操作:

cache(MEMORY_ONLY)缓存到内存中,当内存满时不再缓存当需要计算时重新计算

persist(MEMORY_AND_DISK) 缓存到内存或磁盘中,当内存存满时,存到磁盘中

unpersist:立即释放缓存

/* 共享变量:

当spark集群在多个workNode上运行一个函数时,此时默认情况下会在每个节点上都复制一份这个函数的副本。有时需要在不同节点或者节点与Driver之间共享数据

> 广播变量:sc.broadcast()

当需要在不同的节点之间或者不同的任务之间共享数据时,需要用到广播变量,广播变量为不可变变量,在每个机器上缓存一个只读的变量,而不是为每一个task缓存一个副本

> 累加器:sc.accumulator()

用于不同的节点以及Driver上的共享变量,只能实现技术或者累加功能,在Driver上可见但在节点上不可见

/* 分区操作

$$$  DataFrame与SQL的交互:

> SparkSession.createOrReplaceTempView()将DataFrame注册为临时表视图,也即将它建立为一张临时表,生命周期与spark session相连。

> SparkSession.createOrReplaceGlobalTempView()将DataFrame注册为全局表视图,生命周期和整个spark application 相关,可在新的session中访问

>>> 对hive表进行增删改操作

首先建立hive分区表:

query = “”” 

CREATE EXTERNAL TABLE IF NOT EXISTS {tablename}

(

App_id STRING COMMENT 别名,

******

)

PARTITION BY (***)  (分区)

ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘ \t ’ (分割 ‘\t’)

STORED AS TEXTFILE  (以文本形式存储)

LOCATION  ‘{path}’ (外部表的存储地址 :hdfs路径)

Spark性能调优:

https://blog.csdn.net/levy_cui/article/details/51306709?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162702931516780274144041%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162702931516780274144041&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-51306709.pc_search_result_control_group&utm_term=spark.default.parallelism&spm=1018.2226.3001.4187 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值