首先,说一下,一般spark程序肯定都是打包然后放到Linux服务器去运行的,但是我们为什么还需要在Windows下运行spark程序。当然有它的道理: 因为我们很多人都是习惯在Windows系统下编写代码的,所以,如果能在Windows下运行spark程序的话,就非常方便我们进行本地测试,保证我们的代码没有问题,就不需要先打包到服务器运行,有问题又得返回Windows修改,然后再打包放服务器。
hadoop和spark安装配置
其实Windows下的hadoop和spark安装非常简单,其实就是下载包,然后解压就可以用了。直接到[Hadoop官网]和[Spark官网]。我下载的是这两个,记得hadoop和spark的版本要对应。
接着,把你的hadoop目录加到环境变量;最后,还需要下载你对应版本的winutils,然后加到你的hadoop的spark的bin目录下,这样你才能在Windows下运行spark程序。需要的小伙伴可以私聊我
IDEA和scala的安装配置
关于IDEA和Scala的安装配置,可以到我的另一篇文章[IntelliJ IDEA:Scala、sbt、maven配置教程],里面有详细的教程。
WordCount程序
WordCount词频统计,可以说是大数据的HelloWorld了,而我,在这一步就踩了很多的坑哭唧唧。下面附上代码。
无法新建scala类
创建了一个Scala的sbt项目,但是在点击右键——new——的时候,没有Scala Class这个选项,怎么办? 选择你的项目,然后点击右键——Project Structure——Libraries,接着点击+,选择Scala SDK,最后选择你的scala版本就可以了。
运行报错NoSuchMethodError
当你满怀期待地开始运行你的spark程序时,结果抛出异常java.lang.NoSuchMethodError,这个情况一般是scala与spark冲突造成的。在你下载spark的时候,要注意查看兼容什么版本的scala,然后下载使用对应的scala版本。
或者,你启动spark-shell的时候,也会有scala适配版本的信息。
无法加载主类
当你换完scala的版本之后,再次运行程序的时候,应该还会抛出无法加载或找不到主类的错误,这个时候你需要对项目重新进行编译,我的做法是,找到编译之后的class文件,将其删除,然后重新运行Run,这个时候会自动重新编译。 或者可以将你项目中这个文件夹.idea删除,然后重启IDEA。
运行报错NoClassDefFoundError
当我又再次运行程序时,又再次抛出错误java.lang.NoClassDefFoundError,真的心累。
出现这个错误的原因一般是你spark依赖包使用的scala版本与你项目使用的scala版本不一致。比如我的是sbt项目,需要修改build.sbt文件,让其版本对应。
无法导入scala自带的包
比如,像scala.util.parsing.json.JSON这样解析JSON的类,明明是scala自带的,但是在import的时候却一直报错。 解决方法如下:选择菜单FIle-->Project Structure-->Global Libraries,然后选择你的scala-sdk,点击右键,最后选择Add to Modules....。