Spark 是用Scala代码写的。为了调试Spark,做了如下尝试。

Spark 源码和应用开发环境的构建

调试与阅读 Spark 源代码无疑是深入学习 Spark
内部原理的有效途径,本文基于作者亲身实践,针对常用的开发工具,快速的构建
Spark 的源代码开发调试环境,从而帮助读者能够快速进入 Spark 内部的学习。

 

引言

Spark 现在无疑是大数据领域最热门的技术之一,读者很容易搜索到介绍如何应用
Spark
技术的文章,但是作为开发人员,在了解了应用的概念之后,更习惯的是打开开发环境,开发一些应用来更深入的学习
spark 知识,在遇到问题的时候,也希望能够深入调试 Spark
源代码来解决问题。但是由于 Spark
技术本身较新,对于初学者,在构建开发调试环境的过程中,总会遇到这样那样的问题。而其使用的
Scala 语言,SBT 构建工具相对于 Java 语言,Maven
构建工具而言,也比较小众,因些在 Web
上能够参考的信息相对也比较少。本文结合作者的实践,从 Spark
的源码开始编译整个项目,同时给出了一些在编译过程中可能出现的问题,供使用参考。文中各步骤展示的编译方法主要用于方便学习
Spark 源码,若仅需要编写 Spark
应用则不需要如此繁复的流程,具体引用方法可参考最后一章。

1、Eclipse下:Java 项目 ,Using Maven,编写了一个java 版Spark应用。
Spark的代码(scala代码可以调试,但是查看变量极不方便,不忍直视,毕竟调试器时Java的,但代码是scala生成的字节码,还是有出入的)。

环境要求

  1. 系统:Windows/Linux/Mac OS
  2. IDE:Eclipse/IntelliJ
  3. 其他依赖:Scala,Sbt,Maven

2、Scala IDE下:Scala 项目,Using Maven,编写一个Scala版的Spark应用。

Eclipse 下开发调试环境的配置

该小节中使用的各项工具分别为:Windows 7+Eclipse Java EE 4.4.2+Scala
2.10.4+Sbt 0.13.8+Maven3.3.3,测试的 Spark 版本为 1.4.0。

1.配置 IDE:

如图 1 所示,选择菜单项 Help->Install new software,添加站点
http://download.scala-ide.org/sdk/lithium/e44/scala211/stable/site,选择安装
Scala IDE for Eclipse 以及 Scala IDE Plugins。

报找不到类的异常。解决该问题的方法是:http://scala-ide.org/docs/tutorials/m2eclipse/index.html

图 1. 配置 IDE

ca88手机版 1

简单点说:

图 1. 配置 IDE

ca88手机版 2  

对于标准版 Eclipse,还需要安装单独的 Maven 插件。

出于配置简便考虑,也可以使用 Scala 官方提供的已将所有依赖打包好的 Scala
IDE。

特别的,由于项目本身存在一些错误,请先暂时关闭 Project->Build
Automatically 的功能以节省时间。

2.下载 Spark 源代码:

创建空目录,执行如下语句:git clone https://github.com/apache/spark.git

除了使用 git 指令之外,也可以从 Spark 的 Github 页面下载打包好的源代码。

3.将源码转化为 Eclipse 项目:

进入源代码根目录,执行如下语句:sbt eclipse。Sbt 执行期间会下载 Spark
所需要的所有 jar 包,因此该步骤会花费很长的时间。其中有一些 jar
包需要使用网络代理等方法才能下载。执行成功之后会有如图 2 的输出。

第一步:升级Maven插件

图 2. 转化为 Eclipse 项目

ca88手机版 3

4.导入项目至 Eclipse:

选择菜单项 File->Import,并选择 General->Existing Projects into
Workspace,项目的根路径选择源代码的根路径,导入所有项目(共有 25 个)。

5.修改 Scala 版本:

进入 Preference->Scala->Installations,添加机器上安装的 Scala
2.10.4(选择 lib 目录)。由于该版本 Spark(1.4.0)是在 Scala 2.10.4
的环境下编写的,需要在 Eclipse 中修改项目使用的 Scala
版本。方法为:全选项目,右键选择 Scala->Set the Scala Installation
并选择相应的 Scala 版本。如图 3 所示。

   因为Scala
IDE本事就是一个有Scala插件、Maven插件的Eclipse。但是内置的Maven插件只能创建Java项目,不能创建Scala项目。所以要更新Maven插件。

图 3. 修改 Scala 版本

ca88手机版 4

6.为 old-deps 项目添加 Scala Library:

右键选择 old-deps 项目,选择 Scala->Add Scala Library to Build Path。

7.Maven install 以生成 spark-streaming-flume-sink 所需要的类:

首先将源代码根目录中的 scalastyle-config.xml 文件复制到
spark-streaming-flume-sink 项目根目录中,而后在 Eclipse
中打开该项目,右键选择 pom.xml 文件,选择 Run as->Maven install。如图
4 所示。

第二步:创建Maven项目时,选择scala的archetypes。

图 4.Maven install

ca88手机版 5

运行成功之后 console 会输出如图 5 内容。

 

图 5.Maven install 成功

ca88手机版 6

8.修改 spark-sql 与 spark-hive 的包错误:

由于源代码的包设置有错误,为此需要将类文件移至正确的包中。如图 6 所示。

 

图 6. 修改包错误

ca88手机版 7

对于 spark-sql 项目,分别选择 src/test/java 中的
test.org.apache.spark.sql 以及 test.org.apache.spark.sql.sources
包中的所有类,右键选择 Refactor->Move,移动至 org.apache.spark.sql
以及 org.apache.spark.sql.sources 包。

对于 spark-hive 项目,分别选择 src/test/java 中的
test.org.apache.spark.sql.hive 以及
test.org.apache.spark.sql.hive.execution 包中的所有类,移动至
org.apache.spark.sql.hive 以及 org.apache.spark.sql.hive.execution 包。

但是因为Scala IDE下载相关插件,速度实在是不敢恭维,就此作罢。

————————————–分割线

Spark1.0.0部署指南

CentOS 6.2(64位)下安装Spark0.8.0详细记录

Spark简介及其在Ubuntu下的安装使用

安装Spark集群(在CentOS上)

Hadoop vs Spark性能对比

Spark安装与学习

Spark 并行计算模型

 

————————————–分割线

9.编译所有项目:

打开 Project->Build Automatically 功能,等待所有项目编译成功。

10.检查是否安装成功:

将 core 项目中的 src->main->resources->org 文件夹拷贝到
examples 项目中的 target->scala-2.10->classes 中。而后执行
examples 项目中的 org.apache.spark.examples.SparkPi 程序,并设置其 jvm
参数为-Dspark.master=local,若最后输出如图 7 结果则说明安装成功。

3、Scala IDE下:Java 项目,Using
Maven,编写Scala 版的Spark应用。

图 7.SparkPi 运行结果

ca88手机版 8

更多详情见请继续阅读下一页的精彩内容:

  • 1
  • 2
  • 下一页

http://www.bkjia.com/Linux/1044604.htmlwww.bkjia.comtruehttp://www.bkjia.com/Linux/1044604.htmlTechArticleSpark 源码和应用开发环境的构建 调试与阅读 Spark
源代码无疑是深入学习 Spark
内部原理的有效途径,本文基于作者亲身实践,针对常用的开…

在pom.xml中配置
scala编译器,以使使用Maven构建时,会使用Scala相关的编译器对Scala代码进行编译,生成字节码。

这样一来,就可以使用Scala调试器进行调试了。

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.fjn.helper</groupId>
  <version>0.0.1-SNAPSHOT</version>
  <artifactId>frameworkex-apache-spark</artifactId>
  <name>frameworkex-apache-spark</name>
  <url>http://maven.apache.org</url>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <dependencies>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.10</artifactId>
        <version>2.0.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-streaming_2.10</artifactId>
        <version>2.0.2</version>
    </dependency>
    <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-library</artifactId>
        <version>2.10.6</version>
    </dependency>

  </dependencies>
    <build>
        <plugins>
            <!-- This plugin compiles Scala files -->
            <plugin>
                <groupId>net.alchim31.maven</groupId>
                <artifactId>scala-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>scala-compile-first</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>add-source</goal>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>scala-test-compile</id>
                        <phase>process-test-resources</phase>
                        <goals>
                            <goal>testCompile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <!-- This plugin compiles Java files -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
                <executions>
                    <execution>
                        <phase>compile</phase>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <!-- This plugin adds all dependencies to JAR file during 'package' command.
            Pay EXTRA attention to the 'mainClass' tag.
            You have to set name of class with entry point to program ('main' method) -->

            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.5.3</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <mainClass>sparkTest1</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

 

相关文章