美文网首页
超详细的使用Intellij IDEA+Maven开发Spark

超详细的使用Intellij IDEA+Maven开发Spark

作者: Michaelhbjian | 来源:发表于2017-12-14 15:16 被阅读0次

    上了数据挖掘的课,要写结课论文了。于是选择了Spark作为自己的课程主题,也是为自己之后的毕业论文打下知识基础,这里将自己的第一试验记录下来,以便之后的回顾。

    1.环境配置

    这是我的开发环境:

    • Windows 10
    • 阿里云(Centos 7.3)
    • spark-2.2.0-bin-hadoop2.7(scala-compiler-2.11.8.jar)
    • Scala 2.12.4(这个需要跟spark-2.2.0-bin-hadoop2.7中Scala的编译版本一样才会执行成功,之后会看到报错,所以这个改为Scala 2.11.8)

    2.配置Spark的运行环境(Linux)

    重点:Spark的版本一定要注意和Scala的版本相对应,不然出现的错误会千奇百怪的,请谨慎安装,具体的对应安装版本无法详细,在这里只能给出自己尝试过的安装版本

    安装的环境的前提是要安装JDK(建议是1.8),因为Spark程序是运行在JVM上的,安装Spark只需要将压缩包解压即可。(这是我见过的最简单的安装啦啦啦)下面的是安装后的Spark目录:

    image.png

    可以利用命令行写Spark项目,可以利用Python和Scala语言写(建议使用Scala),使用./spark-shell 进入编写的入口:

    image.png

    配置免密钥登录

    第一步:使用下面的命令生成密钥

    $ ssh-keygen -t rsa
    

    如果之前的生成的密钥的话,在这里可以不用生成。

    第二步:复制公钥文件

    进入/root/.ssh/ 目录,如果没有authorized_keys 文件,可以先创建一个此文件。

    $ cat id_rsa.pub  >> authorized_keys
    

    第三步:修改authorized_keys文件的权限

    $ chmod 600 authorized_keys 
    

    第四步:验证ssh服务

    $ ssh localhost
    

    执行上述命令如果没有输入密码就可以登录就说明成功了!

    3.Intellij IDEA上安装Scala插件和新建项目(Windows)

    下面是网友项目的插件安装方法和新建简单的Scala项目,搬过来给大家看看,链接如下:

    不会停的蜗牛

    下面是我新建Scala项目的目录结构图:

    image.png

    重点:在build.sbt 文件中添加libraryDependencies 的版本问题,这也是依赖版本要对应的问题,后面会介绍利用Maven管理依赖,这样会方便多了。

    4.编写第一个Spark程序

    这是非常重要的一步:编写spark程序时需要提前将Scala的SDK添加到Global Libraries,如下图所示:

    image.png

    新建Scala的class类:

    image.png

    添加依赖(官方介绍):

    可以像这样定义一个依赖,其中 groupIdartifactIdrevision 都是字符串:

    libraryDependencies += groupID % artifactID % revision
    

    或者像这样, 用字符串或者 Configuration val 当做 configuration

    libraryDependencies += groupID % artifactID % revision % configuration
    

    方法 % 从字符串创建 ModuleID 对象,然后将 ModuleID 添加到 libraryDependencies 中。

    当然,要让 sbt(通过 Ivy)知道从哪里下载模块。如果你的模块和 sbt 来自相同的某个默认的仓库,这样就会工作。例如,Apache Derby 在标准的 Maven2 仓库中:

    libraryDependencies += "org.apache.derby" % "derby" % "10.4.1.3"
    
    image.png

    不推荐使用这用手动添加依赖的方式,推荐使用Maven管理依赖的方法,请往下面看。

    5.将Spark程序打包(Jar包)

    打包设置选项:

    image.png

    打包参数设置:1.选择主函数;2.选择只打包Scala程序

    image.png

    Build 中选择Build Artifacts 后选择build即可打包成功

    image.png

    选择build ,然后等待打包结束

    image.png

    打包的jar包的位置:

    image.png

    将jar包利用XFtp工具上传到Spark运行环境(对应程序运行地址):

    image.png

    6.将Jar包上传至Spark运行环境并启动和运行

    启动Spark运行环境需要依次执行下面三个命令:

    在执行了master进程和worker进程后,可以执行curl 127.0.0.1:8080 得到Spark Master at spark://MJ:7077 ,注意这个地址每个机器上都是不一样的,注意区分一下。

    Spark Master at spark://MJ:7077

    #启动master进程
    ./sbin/start-master.sh
    #启动worker进程
    ./bin/spark-class org.apache.spark.deploy.worker.Worker spark://MJ:7077
    
    #提交作业 master后面的地址通过localhost:8080得到  class后面的是自己的项目的名称和对应jar包的地址
    ./bin/spark-submit --master spark://MJ:7077  --class WordCount  /home/MJ/spark/hellospark.jar
    
    

    7.查看Spark运行的结果

    提交作业之后,可以查看作业运行的结果:

    image.png

    8.构建Maven管理Spark项目

    首先是New Project 项目选择Maven,JDK选择最好是1.8+,然后点击next:

    image.png

    新建项目之后的目录结构是这样的:

    image.png

    把其中的java和test文件夹都重新命名为scala文件夹,如下图

    image.png

    右键项目名出现Add Frameworks support ,并选择scala:

    image.png image.png

    选择之后,然后新建一个Package 包文件夹,最后就是新建scala文件

    image.png

    新建一个Main 文件,打印出hello spark! 字样

    image.png image.png

    添加必要的关于Spark的pom 文件,点击添加Group: org.apache.spark

    Spark Project Core

    <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core -->
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.11</artifactId>
        <version>2.2.1</version>
    </dependency>
    

    Spark Project SQL

    <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-sql -->
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-sql_2.11</artifactId>
        <version>2.2.1</version>
    </dependency>
    

    Spark Project Hive

    <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-hive -->
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-hive_2.11</artifactId>
        <version>2.2.1</version>
    </dependency>
    

    9.可能出现的问题

    出现这种情况是由于在IDEA和Linux中安装的Scala版本不一样,把两者选择成一样的就会编译通过。

    image.png

    http://blog.csdn.net/u013054888/article/details/54600229

    进入/usr/local/spark-2.2.0-bin-hadoop2.7/jars 找到Scala编译的版本号:

    image.png

    在IDEA中的Project Structure中选择对应的Scala版本:

    image.png

    出现下面错误:
    exception in thread main org.apache.spark.sparkexception:A master URL must be set in your..
    从提示中可以看出找不到程序运行的master,此时需要配置环境变量。
    传递给spark的master url可以有如下几种:

    local 本地单线程
    local[K] 本地多线程(指定K个内核)
    local[*] 本地多线程(指定所有可用内核)
    spark://HOST:PORT 连接到指定的 Spark standalone cluster master,需要指定端口。
    mesos://HOST:PORT 连接到指定的 Mesos 集群,需要指定端口。
    yarn-client客户端模式 连接到 YARN 集群。需要配置 HADOOP_CONF_DIR。
    yarn-cluster集群模式 连接到 YARN 集群。需要配置 HADOOP_CONF_DIR。
    点击edit configuration,在左侧点击该项目。在右侧在右侧VM options中输入“-Dspark.master=local”,指示本程序本地单线程运行,再次运行即可。从提示中可以看出找不到程序运行的master,此时需要配置环境变量。

    点击edit configuration,在左侧点击该项目。在右侧

    在右侧VM options中输入“-Dspark.master=local”

    ,指示本程序本地单线程运行,再次运行即可。

    image.png

    运行成功的结果:


    image.png

    10.参考资料

    http://docs.scala-lang.org/getting-started.html

    http://www.jianshu.com/p/ecc6eb298b8f

    http://www.jianshu.com/p/7c0d22847548

    http://blog.csdn.net/u012373815/article/details/53266301

    http://www.scala-sbt.org/1.x/docs/zh-cn/Library-Dependencies.html

    相关文章

      网友评论

          本文标题:超详细的使用Intellij IDEA+Maven开发Spark

          本文链接:https://www.haomeiwen.com/subject/ueekwxtx.html