IDEA上Spark——Java、Scala的本地测试版与集群运行版

本文详细介绍了如何在IntelliJ IDEA中使用Java和Scala进行Spark本地测试和集群运行。作者首先讲解了Java Spark应用程序中SparkContext的作用,接着展示了Java和Scala的代码示例,包括遇到的问题及解决方案。在集群测试部分,提到了如何打包和提交到YARN集群,并分享了在Scala中遇到的版本兼容问题和解决办法。文章最后给出了参考资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java本地测试

2017/11/13

1.先放出代码中各类注释

(由于初次学习,为方便以后复习或查阅,注释较多。为避免代码太“冗余”故将部分注释分出来。)
注释i )、

  • 每个Spark应用程序都由一个驱动器程序(驱动器节点产生的,驱动器节点通俗的讲,可以视为hadoop中的namenode)来发起集群上的各种并行操作,驱动器程序(shell中的驱动器程序是Spark shell)可执行应用程序中的main方法,驱动器通过一个SparkContext对象访问Spark——这个对象代表对集群的一个连接(shell启动时已经自动创建了一个SparkContext对象)。【参考:参考资源1中P12】
  • 在Spark中,SparkContext是Spark所有功能的一个入口,无论是用java、scala、还是python编写都必须要有一个SparkContext,它的主要作用,包括初始化Spark应用程序所需的一些核心组件、调度器(DAGScheduler、TaskScheduler),到Spark Master节点上进行注册,等等。
    但是在Spark中,编写不同类型的Spark应用程序,使用的SparkContext是不同的,如果使用scala,使用的就是原生的SparkContext对象
    但是如果使用Java,那么就是JavaSparkContext对象
    如果是开发Spark SQL程序,那么就是SQLContext、HiveContext
    如果是开发Spark Streaming程序,那么就是它独有的SparkContext
    以此类推【参考:北风网相关课程】

注释ii)、

RDD支持两种类型的操作,一种是转化(transformation)操作,一种是行动(action)操作。行动操作会对RDD计算出一个结果,并把结果返回到驱动器程序中,或者把结果存储到如HDFS这样的外部存储系统。但是要注意的是,RDD的行动操作是“懒惰”型的,它只会在你第一次真正使用它是进行相应计算操作(对于大数据环境,这是个很有必要的特点,也正因如此,我们不应该把RDD看做存放着特定数据的数据集,而应该看做是一个存放着计算步骤的指令列表),并且在默认情况下,即使是同一个行动操作,每一次调用,它都会重新计算(如果需要频繁用到某个操作产生的结果,可以将结果缓存,使用方法RDD.persist()——但是我认为对于数据量大的结果,这个方法还是不管用吧?)。【参考:参考资源1中P22、P27】
如果转换操作比较简单,则创建指定Function的匿名内部类;但是如果function比较复杂,则会单独创建一个类,作为实现这个function接口的类

注释iii )、

写一堆匿名内部类调用方法,感觉代码太“繁杂”,于是换用函数式编程的lambda替代,lambda实现的上方所注释的,就是对应的“繁杂”版。
TODO:lambda在“背后”具体是怎么转换代码的

2.代码以及源码地址:

https://github.com/AtTops/Practice-Item/tree/master/SparkScala/main/scala/per/wanghai

创建maven项目,最低依赖仅需Spark的core包
部分代码有普通java与lambda两种写法

package per.wanghai.spark.core;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.FlatMapFunction;
import org.apache.spark.api.java.function.Function2;
import org.apache.spark.api.java.function.PairFunction;
import org.apache.spark.api.java.function.VoidFunction;
import scala.Tuple2;

import java.util.Arrays;
import java.util.Iterator;

/**
 * @author 王海[https://github.com/AtTops]
 * @package per.wanghai.spark.core
 * @description Java 本地版Spark的单词计数程序
 * @Date 2017/11/13 19:55
 * @Version V1.0
 */
public class WordCountLocal {
   
   

    private static final String OUTPUTFILEPATH = "./dataout";

    public static void main(String[] args) {
        /* 第一步
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值