Spark -- 基础开发和RDD相关知识总结!!!

目录

        一、基础开发

1. Anaconda

2. 案例(基本代码)

3.案例(链式编程)

3.spark-submit

3. StandAlone模式

4. Spark On Yarn 模式

二、RDD

1. RDD模型

2. RDD常用算子

2.1 转换算子

2.2 行为算子

总结


一、基础开发

1. Anaconda

Anaconda模块
    1、Anaconda是一个工具包,里边包含了几百个开发工具,其中也包含Python
    2、Anaconda还可以模拟多个虚拟环境,在该虚拟环境中可以安装不同版本的软件,多个虚拟环境彼此独立,以后你可以自由选择使用哪一个虚拟环境
    3、你安装了Anaconda之后,自动会给你创建一个基础环境,名字为base
Anaconda操作命令
	#查看当前服务器安装过哪些虚拟环境    conda env list
	#创建新的虚拟环境        conda create -n 虚拟环境名字 python=版本
	
    示例
	conda create -n bigdata01 python=3.7
    conda create -n bigdata02 python=3.9
    conda env list
	
    #切换虚拟环境    conda activate 虚拟环境名字
    示例    conda activate bigdata01  #会发现自己创建的环境比base少了很多组件
    
    #退出当前虚拟环境    conda deactivate   #退出进入你上一次的虚拟环境
	
    #删除某一个虚拟环境    conda remove -n 虚拟环境名字 --all
	
    示例
		conda remove -n bigdata02 --all
        conda env list
	
#如何在一个虚拟环境中安装软件包
	#1、切换虚拟环境    conda activate bigdata01
	#2、查看虚拟环境中安装的软件包    conda list
	#3、如果没有设置镜像源,则可以在安装的时候,手动设置镜像源
		pip install pandas==1.1.1 -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
        conda list
	#4、卸载软件包    conda uninstall 包名 或者    pip uninstall 包名

2. 案例(基本代码)

#将外部文件读取到rdd中
    rdd1 = sc.textFile('file:///export/data/word.txt')
    print(rdd1.glom().collect())

#过滤空行
    rdd2 = rdd1.filter(lambda line:len(line) > 0)
    print(rdd2.glom().collect())

#使用flatMap进行数据进行拆分成多行
    rdd3 = rdd2.flatMap(lambda line:line.split(' '))
    print(rdd3.glom().collect())

#将每个单词映射为(单词,1)
    rdd4 = rdd3.map(lambda word:(word,1))
    print(rdd4.glom().collect())

#将(单词,1)进行分组聚合
    rdd5 = rdd4.reduceByKey(lambda x,y:x+y)
    print(rdd5.glom().collect())

#将结果写入文件
    rdd5.saveAsTextFile('file:///expo

3.案例(链式编程)

 sc.textFile('hdfs://node1:8020/datas/input/word.txt')\
        .filter(lambda line:len(line) > 0)\
        .flatMap(lambda line:line.split(' '))\
        .map(lambda word:(word,1))\
        .reduceByKey(lambda x,y:x+y)\
        .saveAsTextFile('hdfs://node1:8020/datas/output')

3.spark-submit

spark-submit主要是提交已经开发的py代码
	格式    --master参数
	#本地模式
    --master local[2]  =手动指定cpu核数为2
    --master local[*]  =你虚拟机有多少个虚拟核数,就用多少个虚拟核数
    
    #StandAlone模式
    #--单节点
    --master spark://node1.itcast.cn:7077  
    #--高可用
    --master spark://node1.itcast.cn:7077,node2.itcast.cn:7077 

    #Yarn模式
    --master yarn
    
    #Mesos模式
    --master mesos://node1:5050

    #K8s模式
    --master k8s://node1:7888
	其他重要
	 --deploy-mode  任务的在集群运行模式(Client和Cluster)
     --name 指定任务的名字
     --num-executors  指定Executor个数
     --executor-cores 指定Executor的CPU核数
     --total-executor-cores 指定总的Executor核数
     --executor-memory  Executor所占内存大小
     --driver-memory    Driver所占内存大小

操作
	#1、需要将你的py代码放在node1的/export/data目录
    #2、在node1执行以下命令
    /export/server/spark/bin/spark-submit \
    --master local[2] \
    /export/data/04-WordCountChuanCan.py \     # 脚本
    hdfs://node1:8020/datas/input/wordcount.txt \   #   输入路径
    hdfs://node1:8020/datas/output5   # 输出路径

3. StandAlone模式

概述
	1、StandAlone模式是:Spark引擎 + 自带的资源调度平台(master + work)
    2、StandAlone是集群模式,每一台机器都要安装

架构
    1、StandAlone模式是一个主从架构
      主节点:Master    =等价于Yarn的ResourceManager
      从节点:Worker    =等价于Yarn的NodeManager
  
    2、当一个Spark任务在StandAlone模式下执行时,会多出来一些组件
       Executor进程     = 等价于Map进程和Reduce进程
       Task线程         = 每一个Executor内部是由多个Task线程组成的
			
集群
	Master
	- 接受客户端请求:所有程序的提交,都是提交给主节点
    - 管理从节点:   通过心跳机制检测所有的从节点的健康状态
    - 资源管理和任务调度:将所有从节点的资源在逻辑上合并为一个整体,将任务分配给不同的从节点
	
    Worker
	- 使用自己所在节点的资源运行计算,计算时会启动Executor进程
    - 所有Task线程计算任务就运行在Executor进程中
	
网页验证
    http://node1:8080/    = Master的信息查看页面
    http://node1:18080/   = 历史任务查看页面

StandAlone核心的理论-了解
	StandAlone的核心角色
	集群角色
	#不管有没有任务运行,集群永远都有以下两个角色:
    Master:	管理,分配资源,监控worker的健康状况
    Worker: 分配资源,执行任务,向Master定时发送心跳包
	执行任务的角色
		Driver
		1、每执行一个任务,Spark会自动启动一个Driver进程,类似于Yarn中AppMaster,负责整个任务执行的监控
        当你启动10个Spark任务,系统就会启动10个Driver
        2、Driver进程本身由于需要对整个任务进行管理,它本身也需要一定的资源,比如内存和CPU
		
        Executor
		1、每当你执行一个Spark任务,Spark需要启动若干个Executor进程,Executor用来管理执行执行任务的Task线程
        2、Executor创建完成之后需要向Dirver进行注册
        3、当执行任务时,需要多少个Executor可以手动指定,如果不指定,默认是2个,要启动多少个Executor一般需要根据数据量和集群的规模来决定,如果没有特殊的要求,一般是集群有多少台主机,就设置多少个Executor

    /export/server/spark/bin/spark-submit \
    --master spark://node1.itcast.cn:7077
    /root/test/04-worddcount04_standalone.py
    --num-executors    5    #指定Executor的个数
    --executor-memory  4g   #每一个Excutor的内存(可以占用主机三分之一的内存,或者指定为固定内存)
    --executor-cores   2    #每一个Excutor消耗的CPU的核数
    --driver-memory    1g   #Driver进程所占用内存
    --driver-

你可能感兴趣的:(Spark,spark,大数据)