从零搭建基于sbt和IDEA的远程spark调试工程

接着之前文章 sbt 以及 IDEA sbt 插件安装配置教程 我们可以利用sbt和IDEA搭建一套可以远程调用spark的scala项目. 本文就详细的介绍一下方法和其中的各种坑.

前置条件

0. hosts添加地址映射
在 C:\Windows\System32\drivers\etc\hosts 文件中添加 Spark集群的相关ip和机器名, 如下示例:

192.168.4.225 hadoop1
192.168.4.216 hadoop2
192.168.4.156 hadoop3
192.168.4.239 hadoop4

1. 解决 null\bin\winutils.exe 错误
因为Windows系统没有安装hadoop系统, 所以系统运行时会报找不到的错误(hbase等工程也会报).可以从网上下载 hadoop-common-2.2.0-bin-master.zip, 并设置环境变量, 示例如下:

HADOOP_HOME=E:\hadoop-2.6.0
Path=%HADOOP_HOME%\bin

2.spark 启动
要确保 spark 服务启动才可调试.
启动方法: %spark_home%/sbin/start-all.sh
启动后, 使用 jps 命令可以看到Master和Worker进程:

spark进程

同时还可以访问web ui界面:
http://192.168.4.225:4040/

spark web ui 一般为8080, 这可能与其他服务冲突, 解决方法是在 spark目录/sbin/start-master.sh 下, 修改这一段:
if [ “$SPARK_MASTER_WEBUI_PORT” = “” ]; then
SPARK_MASTER_WEBUI_PORT=4040
fi

创建工程

idea 使用 sbt 创建:

scala 版本最好与系统安装的一样, 以免出现问题:

最后点 finish 整个工程就搭建好了:

引入依赖和sbt相关插件

添加spark依赖:
在build.sbt中添加
libraryDependencies += "org.apache.spark" % "spark-core_2.11" % "2.1.0"

core_2.11中的2.11指的是spark编译使用的scala版本, 后面的2.1.0是spark版本
添加后 IDEA 会进行自动导入, 如果没有可以ctrl+s试试, 还不行那就需要下面的插件, 使用命令 sbt update gen-idea 来更新了

添加sbt相关插件
想要更便利的时候sbt, 最好添加下面的两个插件, gen-idea 是生成可供idea使用的项目, sbt-assembly是打包

project目录下新建 plugins.sbt, 然后写入:

addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.6.0")

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.11.2")

之后就可以使用 sbt gen-ideasbt assembly 命令了
sbt 0.13.7 之前版本的 sbt 要求sbt文件中每行代码间有一个空行, 性情请见 sbt官网关于空行的说明

写入口代码
在src/main/scala 下新建 scala 文件WordCount.scala
这里如果新建没有scala选项, 可以自己手动新建.scala文件, 后面idea会自动处理

object WordCount extends App {

  // 读取hdfs文件
  //  val path = "hdfs://192.168.4.216:8020/tmp/touch.data"

  // 读取本地文件
  val path = "./README.md"
  // 本地调试
  //  val conf = new SparkConf().setAppName("SparkDemo").setMaster("local")
  //远程调试
  val conf = new SparkConf()
    .setAppName("SparkDemo")
    .setMaster("spark://192.168.4.225:7077")
    .setJars(List("E:\\CodeReference\\CUNCODE\\sparkDemo\\out\\artifacts\\sparkDemo_jar\\sparkDemo.jar"))

val sc = new SparkContext(conf)
  val lines = sc.textFile(path)
  val words = lines.flatMap(_.split(" ")).filter(word => word != " ")
  val pairs = words.map(word => (word, 1))
  val wordscount: RDD[(String, Int)] = pairs.reduceByKey(_ + _)

  wordscount.collect.foreach(println)
}

此时, 调用本地spark执行已经没有问题了, 但是要调用集群环境依然还需要配置. 可以看到setJars方法后的jar路径. 我们要进行jar包设置

jar 包设置

写代码前, 要先指定要在代码构建的时候生成jar, 这样才能提交到spark集群运行

选中项目名 -> 右键 -> 选择 Open Module Settings (快捷键 F4)

选择mainclass, 并且勾选 Include in project build(就是在build的时候就要生成jar包)

注意路径就是要往setJars里写的:

运行

点击确定,运行, 之后项目就可以远程调用spark了. 结果如下:

参考

(一) 从零开始搭建Spark Standalone集群环境搭建 http://www.cnblogs.com/ooon/p/5460060.html
(二)win7下用Intelij IDEA 远程调试spark standalone 集群 http://www.cnblogs.com/ooon/p/5490247.html
sbt Reference Manual — Getting Started summary http://www.scala-sbt.org/0.13/docs/Summary.html
Idea下用SBT搭建Spark Helloworld - X.Jan - 博客园 http://www.cnblogs.com/yongjian/p/6211007.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值