安装spark
教程源地址:https://blog.csdn.net/weixin_52564218/article/details/141090528
镜像下载
教程给的官网下载地址很慢,https://archive.apache.org/dist/spark/spark-3.1.1/
这里的镜像快很多:
清华软件源:https://mirrors.tuna.tsinghua.edu.cn/apache/spark/
华为软件源:https://mirrors.huaweicloud.com/apache/spark/
本地模式运行spark代码
打开spark和hadoop
代码:
val file = sc.textFile("hdfs://localhost:9000/input/notes.txt")
val words = file.flatMap(_.split("\\s+")).map(word => (word, 1)).reduceByKey(_ + _)
words.collect
这里注意如果提示连接不上的话,可能是localhost的映射之前配置删除了,改成ip地址就可以了
如:
hdfs dfs -ls hdfs://192.168.186.123:9000/
注意,虚拟机的内存可能不够导致失败,可以设成3gb
安装scala
安装教程:https://blog.csdn.net/pangxiekebaba/article/details/142381396
可能遇到的问题
scala -version出现: 此时不应有 \scala\bin\scala.bat
解决:
scala默认安装到了Program Files (x86)文件夹下。目录中有空格,空格就是导致这个问题的根本原因,把scala安装到其他目录即可
参见:https://www.cnblogs.com/gigi2653/p/10782197.html
11.2.2开发Spark程序
运行hello程序
先在idea上安装scala插件,可以不做“添加框架支持”这一步,chapter11文件直接复制粘贴过来,注意在父项目的pom文件中加入对应的依赖
比如:
<dependency><groupId>org.apache.spark</groupId><artifactId>spark-sql_2.12</artifactId><version>3.1.1</version></dependency><dependency><groupId>org.apache.spark</groupId><artifactId>spark-streaming_2.12</artifactId><version>3.1.1</version></dependency>
注意:运行程序时,linux上的spark要开启
maven打包项目
chapter11的parent依赖可能要加上relativePath标签,指明路径,不然clean不了
<parent><artifactId>hadoop</artifactId><groupId>org.hadoop</groupId><version>1.0</version><relativePath>../../hadoop/pom.xml</relativePath></parent>
运行打包好的jar包
如果使用教程的命令不行:
运行jar包时,路径用引号引起来,并且scala目录使用绝对路径,指明使用哪一个jar包(这里是library),例如:
PS D:\workspace\hadoop\chapter11\chapter11\target> java -cp "chapter11-1.0.jar;D:\program\scala\lib\scala-library.jar" org.hadoop.spark.HelloScala
Hello Scala
spark-submit
注意这里的端口号改成与自己一致的
spark-submit --master spark://myserver:7077 --class org.hadoop.spark.WordCount2
/usr/jar/chapter11-1.0.jar hdfs://myserver:8020/test/ hdfs://myserver:8020/out001
dataframe
创建scala类:
11.6.3 FileStream
运行jar包时出现问题
首先用/app/spark-3.1.1-bin-hadoop3.2/sbin/start-all.sh,启动spark,再使用submit指令,第二个用hdfs管理文件时,运行jar包之后才用put上传文件,另外因为控制台信息滚动很快,可能看不到输出信息,让人以为没有输出,可以用控制台上方的工具栏的搜索搜索,比如:
(is,
看能不能找到
11.6.5 updateStateByKey
记得修改主机名