Spark本地模式搭建
- Local(本地模式)---开箱即用
- 准备工作:
- JDK
- ScalaSDK只需要在Windows安装即可
- Spark安装包:Apache Download Mirrors
- 原理:
- 准备工作:
- 操作:
1.上传:将安装包上传至node1
⒉解压︰将spark安装包【spark-3.0.1-bin-hadoop2.7.tgz】解压 目录:tar -zxvf spark-3.0.1-bin-hadoop2.7.tgz
3.改权限:如果有权限问题,可以修改为root,方便学习时操作,实际中使用运维分配的用户和权限即可,可以把名字进行修改为spark
查看目录结构:其中各个目录含义如下:
bin可执行脚本
conf配置文件
data示例程序使用数据
examples示例程序
jars依赖jar包
python pythonAPl
sbin集群管理命令
yarn整合yarn需要的东东
- 测试:启动spark交互式界面:cd/spark/bin/spark-shell
- 打开192.168.111.100:4040
- 执行wordcount命令
val textFile = sc.textFile("/root/words.txt")
val counts = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey(_ + _)
counts.collect
vim /root/words.txt
hello me you her
hello me you
hello me
hello
- Standalone(独立集群模式)
- 原理:
- 操作:
1.集群规划
- node1:master
- node2:worker/slave
- node3:worker/slave
2.修改slaves
- 进入配置目录:spark中的conf目录中
- 修改配置文件名称:mv workers.template workers
- 修改配置文件内容:
- vim slaves
- node2
- node3
3.修改spark-env.sh
- 进入配置目录:spark中的conf
- 修改配置文件名称:mv spark-env.sh.template spark-env.sh
- 修改配置文件内容:vim spark-env.sh
- 增加内容如下:
- 设置JAVA安装目录:
- JAVA_HOME=/opt/jdk
- ## HADOOP软件配置文件目录,读取HDFS上文件和运行Spark在YARN集群时需要,先提前配上HADOOP_CONF_DIR=/export/server/hadoop/etc/hadoop
YARN_CONF_DIR=/export/server/hadoop/etc/hadoop
#指定spark老大Master的IP和提交任务的通信端口
SPARK_MASTER_HOST=node1
SPARK_MASTER_PORT=7077(默认)
SPARK_MASTER_WEBUI_PORT=8080(如果8080不行就该8087,不能为8081因为8081为worker使用的)
SPARK_WORKER_CORES=1(CPU)
SPARK_WORKER_MEMORY=1g(内存)
4.分发:
- 将配置的好的spark安装包分发给集群中其他机器,密令如下:
- cd /opt/
- scp -r /opt/spark-3.1.1-bin-hadoop2.7 root@node2:/opt
- scp -r /opt/spark-3.1.1-bin-hadoop2.7 root@node3:/opt
- 复制过去之后修改名字改成spark
- 测试:
- 集群启动和停止
- 在主节点上启动spark集群
- /opt/spark/sbin/start-all.sh
- 在主节点上停止spark集群
- /opt/spark/sbin/stop-all.sh
- jps查看进程
- 启动spark-shell
- /opt/spark/bin/spark-shell --master spark://master:7077
- 任务界面:master:4040
- 提交wordcount任务
- 注意上传文件words.txt到HDFS中方便worker执行文件
- hdfs dfs -put /root/words.txt /wordcount/input/words.txt
- 如果目录不存在可以创建
- hdfs dfs -mkdir -p /wordcount/input
- 结束后可以删除该目录
- hdfs dfs -rm -r /wordcount/input
- 下面的8020或者9000是通过hdfs:50070决定的
- val textFile = sc.textFile("hdfs://node1:8020或者9000/wordcount/input/words.txt")
val counts = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey(_ + _) - counts.collect
- counts.saveASTextFile("hdfs://node01:8020/wordcount/output47")
- 查看结果可以到wordcount/output中查看
- 查看spark任务web-UI(4040端口)
- 总结:
- spark:4040任务运行web-UI解面
- spark:8080spark集群web-UI解面
- spark:7077spark提交任务时德通信端口
- hadoop:50070集群web-UI解面端口
- hadoop:8020/9000(老版本)文件上传下载通信端口