Spark (二) --------- Spark 快速上手

Love The Way You Lie 2024-04-07 10:14 146阅读 0赞

目录

  • 创建 Maven 项目
      1. 增加 Scala 插件
      1. 增加依赖关系
      1. WordCount
      1. 异常处理

创建 Maven 项目

1. 增加 Scala 插件

Spark 由 Scala 语言开发的,所以本课件接下来的开发所使用的语言也为 Scala,咱们当前使用的 Spark 版本为 3.0.0,默认采用的 Scala 编译版本为 2.12,所以后续开发时。我们依然采用这个版本。开发前请保证 IDEA 开发工具中含有 Scala 开发插件。

在这里插入图片描述

2. 增加依赖关系

修改 Maven 项目中的 POM 文件,增加 Spark 框架的依赖关系。本课件基于 Spark3.0 版本,使用时请注意对应版本。

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.apache.spark</groupId>
  4. <artifactId>spark-core_2.12</artifactId>
  5. <version>3.0.0</version>
  6. </dependency>
  7. </dependencies>
  8. <build>
  9. <plugins>
  10. <!-- 该插件用于将 Scala 代码编译成 class 文件 -->
  11. <plugin>
  12. <groupId>net.alchim31.maven</groupId>
  13. <artifactId>scala-maven-plugin</artifactId>
  14. <version>3.2.2</version>
  15. <executions>
  16. <execution>
  17. <!-- 声明绑定到 maven 的 compile 阶段 -->
  18. <goals>
  19. <goal>testCompile</goal>
  20. </goals>
  21. </execution>
  22. </executions>
  23. </plugin>
  24. <plugin>
  25. <groupId>org.apache.maven.plugins</groupId>
  26. <artifactId>maven-assembly-plugin</artifactId>
  27. <version>3.1.0</version>
  28. <configuration>
  29. <descriptorRefs>
  30. <descriptorRef>jar-with-dependencies</descriptorRef>
  31. </descriptorRefs>
  32. </configuration>
  33. <executions>
  34. <execution>
  35. <id>make-assembly</id>
  36. <phase>package</phase>
  37. <goals>
  38. <goal>single</goal>
  39. </goals>
  40. </execution>
  41. </executions>
  42. </plugin>
  43. </plugins>
  44. </build>

3. WordCount

为了能直观地感受 Spark 框架的效果,接下来我们实现一个大数据学科中最常见的教学案例 WordCount

  1. // 创建 Spark 运行配置环境对象
  2. val sparkConf = new SparkConf().setMaster("local[*]").setAppName("WordCount")
  3. // 创建 Spark 上下文环境对象 (连接对象)
  4. val sc : SparkContext = new SparkContext(sparkConf)
  5. // 读取文件数据
  6. val fileRDD : RDD[String] = sc.textFlile("input/word.txt")
  7. // 将文件中的数据进行分词
  8. val wordRDD : RDD[String] = fileRDD.flatMap(_.split(" "))
  9. // 转换数据结构 word => (word, 1)
  10. val word2OneRDD : RDD[(String, Int)] = wordRDD.map((_, 1))
  11. // 将转换结构后的数据按照相同单词进行分组聚合
  12. val word2CountRDD : RDD[(String Int)] = word2CountRDD.collect()
  13. // 打印结果
  14. word2Count.foreach(println)
  15. // 关闭 Spark 连接
  16. sc.stop()

执行过程中,会产生大量的执行日志,如果为了能够更好的查看程序的执行结果,可以在项目的 resources 目录中创建 log4j.properties 文件,并添加日志配置信息:

  1. log4j.rootCategory=ERROR, console
  2. log4j.appender.console=org.apache.log4j.ConsoleAppender
  3. log4j.appender.console.target=System.err
  4. log4j.appender.console.layout=org.apache.log4j.PatternLayout
  5. log4j.appender.console.layout.ConversionPattern=%d{
  6. yy/MM/dd HH:mm:ss} %p %c{
  7. 1}: %m%n
  8. # Set the default spark-shell log level to ERROR. When running the spark-shell, the
  9. # log level for this class is used to overwrite the root logger's log level, so that
  10. # the user can have different defaults for the shell and regular Spark apps.
  11. log4j.logger.org.apache.spark.repl.Main=ERROR
  12. # Settings to quiet third party logs that are too verbose
  13. log4j.logger.org.spark_project.jetty=ERROR
  14. log4j.logger.org.spark_project.jetty.util.component.AbstractLifeCycle=ERROR
  15. log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=ERROR
  16. log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=ERROR
  17. log4j.logger.org.apache.parquet=ERROR
  18. log4j.logger.parquet=ERROR
  19. # SPARK-9183: Settings to avoid annoying messages when looking up nonexistent
  20. UDFs in SparkSQL with Hive support
  21. log4j.logger.org.apache.hadoop.hive.metastore.RetryingHMSHandler=FATAL
  22. log4j.logger.org.apache.hadoop.hive.ql.exec.FunctionRegistry=ERROR

4. 异常处理

如果本机操作系统是 Windows,在程序中使用了 Hadoop 相关的东西,比如写入文件到 HDFS,则会遇到如下异常:

在这里插入图片描述
出现这个问题的原因,并不是程序的错误,而是 windows 系统用到了 hadoop 相关的服务,解决办法是通过配置关联到 windows 的系统依赖就可以了。

在这里插入图片描述
在 IDEA 中配置 Run Configuration,添加 HADOOP_HOME 变量

在这里插入图片描述
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,146人围观)

还没有评论,来说两句吧...

相关阅读