目录
一、基础开发
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-