zl程序教程

您现在的位置是:首页 >  云平台

当前栏目

Spark(2):Spark快速上手

Spark 快速
2023-09-14 09:14:56 时间

目录

0. 相关文章链接

1. 增加 Scala 插件

2. 增加依赖关系

3. WordCount案例

4. 修改日志配置

5. 异常处理


0. 相关文章链接

 Spark文章汇总 

1. 增加 Scala 插件

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

2. 增加依赖关系

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

<dependencies> 
    <dependency> 
        <groupId>org.apache.spark</groupId> 
        <artifactId>spark-core_2.12</artifactId> 
        <version>3.0.0</version> 
    </dependency> 
</dependencies> 
<build> 
    <plugins> 
        <!-- 该插件用于将Scala代码编译成class文件 --> 
        <plugin> 
            <groupId>net.alchim31.maven</groupId> 
            <artifactId>scala-maven-plugin</artifactId> 
            <version>3.2.2</version> 
            <executions> 
                <execution> 
                    <!-- 声明绑定到maven的compile阶段 --> 
                    <goals> 
                        <goal>testCompile</goal> 
                    </goals> 
                </execution> 
            </executions> 
        </plugin> 
        <plugin> 
            <groupId>org.apache.maven.plugins</groupId> 
            <artifactId>maven-assembly-plugin</artifactId> 
            <version>3.1.0</version> 
            <configuration> 
                <descriptorRefs> 
                    <descriptorRef>jar-with-dependencies</descriptorRef> 
                </descriptorRefs> 
            </configuration> 
            <executions> 
                <execution> 
                    <id>make-assembly</id> 
                    <phase>package</phase> 
                    <goals> 
                        <goal>single</goal> 
                    </goals> 
                </execution> 
            </executions> 
        </plugin> 
    </plugins> 
</build> 

3. WordCount案例

// 创建Spark运行配置对象 
val sparkConf = new SparkConf().setMaster("local[*]").setAppName("WordCount")
 
// 创建Spark上下文环境对象(连接对象) 
val sc : SparkContext = new SparkContext(sparkConf) 
 
// 读取文件数据 
val fileRDD: RDD[String] = sc.textFile("input/word.txt") 
 
// 将文件中的数据进行分词 
val wordRDD: RDD[String] = fileRDD.flatMap( _.split(" ") )  
// 转换数据结构 word => (word, 1) val word2OneRDD: RDD[(String, Int)] = wordRDD.map((_,1)) 
 
// 将转换结构后的数据按照相同的单词进行分组聚合 
val word2CountRDD: RDD[(String, Int)] = word2OneRDD.reduceByKey(_+_) 
 
// 将数据聚合结果采集到内存中 
val word2Count: Array[(String, Int)] = word2CountRDD.collect()  
// 打印结果 
word2Count.foreach(println) 
 
//关闭Spark连接 
sc.stop() 

4. 修改日志配置

在项目的 resources 目录中创建 log4j.properties 文件,并添加日志配置信息: 

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

5. 异常处理

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

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

在 IDEA 中配置 Run Configuration,添加 HADOOP_HOME 变量


注:其他Spark相关系列文章链接由此进 ->  Spark文章汇总