本文介绍 Spark 开发所需要的准备工作。

安装 E-MapReduce SDK

您可以通过以下两种方法安装E-MapReduce SDK。

  • 直接在Eclipse中使用JAR包,步骤如下:
    1. 从Maven库源下载E-MapReduce 开发的依赖包。

    2. 将所需的JAR包拷贝到您的工程文件夹中。(根据您运行作业的集群Spark版本选择SDK版本,Spark 1.x版本建议使用2.10,Spark 2.x建议使用2.11)

    3. 在Eclipse中工程的名字上单击右键,然后依次选择Properties > Java Build Path > Add JARs

    4. 选择您下载的SDK。

    5. 经过上面几步之后,您就可以在工程中读写OSS、LogService、MNS、ONS、OTS、MaxCompute等数据了。

  • Maven工程的方式,请添加如下依赖:
    <!--支持OSS数据源 -->
        <dependency>
            <groupId>com.aliyun.emr</groupId>
            <artifactId>emr-core</artifactId>
            <version>1.4.1</version>
        </dependency>
        <!--支持OTS数据源-->
        <dependency>
            <groupId>com.aliyun.emr</groupId>
            <artifactId>emr-tablestore</artifactId>
            <version>1.4.1</version>
        </dependency>
        <!-- 支持 MNS、ONS、LogService、MaxCompute数据源 (Spark 1.x环境)-->
        <dependency>
            <groupId>com.aliyun.emr</groupId>
            <artifactId>emr-mns_2.10</artifactId>
            <version>1.4.1</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun.emr</groupId>
            <artifactId>emr-logservice_2.10</artifactId>
            <version>1.4.1</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun.emr</groupId>
            <artifactId>emr-maxcompute_2.10</artifactId>
            <version>1.4.1</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun.emr</groupId>
            <artifactId>emr-ons_2.10</artifactId>
            <version>1.4.1</version>
        </dependency>
        <!-- 支持 MNS、ONS、LogService、MaxCompute数据源 (Spark 2.x环境)-->
        <dependency>
            <groupId>com.aliyun.emr</groupId>
            <artifactId>emr-mns_2.11</artifactId>
            <version>1.4.1</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun.emr</groupId>
            <artifactId>emr-logservice_2.11</artifactId>
            <version>1.4.1</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun.emr</groupId>
            <artifactId>emr-maxcompute_2.11</artifactId>
            <version>1.4.1</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun.emr</groupId>
            <artifactId>emr-ons_2.11</artifactId>
            <version>1.4.1</version>
        </dependency>

Spark代码本地调试

本地调试运行Spark代码读写OSS数据,需要对SparkConf进行配置,将spark.hadoop.mapreduce.job.run-local设为true,除此之外只需要保持默认即可。示例代码如下:
val conf = new SparkConf().setAppName(getAppName).setMaster("local[4]")
   conf.set("spark.hadoop.fs.oss.impl", "com.aliyun.fs.oss.nat.NativeOssFileSystem")
   conf.set("spark.hadoop.mapreduce.job.run-local", "true")
   val sc = new SparkContext(conf) 
   val data = sc.textFile("oss://...")
   println(s"count: ${data.count()}")

常见问题

  • 三方依赖说明

    为了支持在E-MapReduce上操作阿里云的数据源(包括OSS、MaxCompute等),您的作业需要依赖一些三方包。

    您可以参照pom文件来增删需要依赖的三方包。

  • OSS输出目录设置

    在本地的Hadoop配置文件中增加fs.oss.buffer.dirs这个参数的配置,参数值是本地的目录路径。如果没有设置这个值,那么在本地运行Spark程序的时候,写OSS数据会碰到空指针的异常。

  • 垃圾清理

    Spark作业失败后,已产生的数据是不会主动清理掉的。当您运行Spark作业失败后,请检查一下OSS输出目录是否有文件存在,您还需要检查OSS碎片管理中是否还有没有提交的碎片存在,如果存在请及时清理掉。

  • pyspark使用说明

    如果您使用的是Python来编写Spark 作业,那么请使用aliyun-emapreduce-sdk配置您的环境。