使用Typesafe Activator尝试Apache Spark
使用Typesafe Activator作为设置Scala开发环境的工具。按照教程进行操作,很容易在本地环境中尝试Apache Spark。
火花车间
…因为觉得很简单,就开始尝试了一下,没想到在Windows系统上遇到了很多问题,所以我决定把试过的步骤写下来作为备忘录。
环境
-
- Windows 8.1 64bit 日本語 (Proでは無いです)
- Ubuntu 14.04 LTS 32bit 日本語Remix
两个都已经安装了”JDK8″。环境变量PATH也已经配置好了,当执行javac -version时,输出结果如下。
> javac -version
javac 1.8.0_25
Typesafe Activator的安装设置
Typesafe Activator的下载
类型安全的激活器
请从「下载」按钮下载。截至2015年2月22日,文件名为typesafe-activator-1.2.12.zip。
解压Zip文件
在容易访问的地方创建文件夹并解压。就我个人而言,
-
- Windowsでは、C:\scala\activator
- Ubuntuでは、/home/myuser/activator
激活器界面的启动
打开命令提示符或终端。 huò 。)
> cd C:\scala\activator
> .\activator.bat ui
> cd /home/myuser/activator
> chmod +x activator
> .\activator ui
等待一会儿,浏览器就会启动。Web应用会在本地主机上运行起来。
试用Spark-Workshop模板
选择Spark工作坊模板。
在Filter Template中尝试使用“spark”作为关键词,会得到几个结果,从中选择标有“spark-workshop”的选项,然后点击“Create”。
当你看到你的应用程序已准备好时,就点击「编译器/日志视图」。
基本上应该自动开始编译和解决依赖关系,但是如果 log view 中没有任何信息,需要点击“开始编译”按钮。
在 Spark 1.2.0 版本中,只支持 Scala 2.10.x [不支持2.11.x],所以看起来他们正在解决相关依赖的问题。
在途中会出现”com.typesafe.sbtrc.NeedToRebootException: 需要重新启动SBT(这是预期的)”的提示,但由于它是预期情况,所以可以不必在意。
当提示了「将监视51个源文件」并且Java行为稳定后,任务完成。如果使用Windows系统,可以在任务管理器中监控机器的情况;如果使用Ubuntu系统,则可以使用top命令进行监控。
让我们试一试这个测试
进入测试菜单,点击运行按钮。
测试的中间进度会以某种原因显示在编译页面的日志中,所以当开始测试运行时,请将焦点移至那里。
在此时点上,我的Ubuntu方面的测试九个都已经通过了。
需要winutils.exe才能在Windows上运行。
在Windows上进行测试运行时,可能会遇到很多错误。会出现很多空指针之类的错误,导致无法辨识,但根本原因是在最初的测试失败消息中提到的缺少winutils.exe文件。
NGrams6Spec:
NGrams6
15/02/17 00:16:19 ERROR Shell: Failed to locate the winutils binary in the hadoop binary path
java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
at org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:278)
at org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:300)
我想你可以從上述的錯誤推測出winutils.exe是在Windows上運行Hadoop時所需的一種包裝器。而且,它不包含在Hadoop的bin目錄中,所以需要從源代碼進行編譯和建構。
因为自己建造太麻烦了,所以我从下面这个自炊网站上找来了。
在DD开发ROOM中,你可以下载hadoop 2.4.1所需的winutils.exe和hadoop.dll。
创建系统环境变量%HADOOP_HOME%。
在底下创建一个bin文件夹,并放置winutils.exe。
为了使环境变量得到识别,需要重新启动Activator。请关闭浏览器和命令提示符窗口,然后通过输入命令dir %HADOOP_HOME%\bin进行确认。
> dir %HADOOP_HOME%\bin
2014/07/15 14:48 124,416 hadoop.dll
2014/07/15 14:38 110,080 winutils.exe
点击spark-workshop项目文件夹中的activator.bat,然后再次在浏览器中打开UI页面,尝试运行一次Test。
但是在Windows系统中仍然测试失败。
「Crawl5aSpec」这个测试失败了。
Crawl5aSpec:
Crawl5a
15/02/16 23:27:49 WARN TaskSetManager: Stage 200 contains a task of very large size (390 KB). The maximum recommended task size is 100 KB.
- simulates a web crawler *** FAILED ***
java.nio.charset.MalformedInputException: Input length = 1
嗨,在spark-workshop\data\enron-spam-ham\spam100文件夾中有一個名為「0002.2001-05-25.SA_and_HP.spam.txt」的文件,它以Latin1編碼,且包含版權符號(c)。這可能是讀取該文件時出現的問題。
在控制面板 -> 区域 -> 管理中,将系统区域更改为英语,我确认通过实现。
或者,如果将文件读取部分更改为使用编码指定进行读取,可能会运行起来,但这并不是重点,所以就先放置不管吧。
我试着跑一下。
请前往Run View并选择wordcount2试运行。
在执行过程中,与Test时一样,结果将显示在「Compile View」中。
当正常结束时,预计会将“spark-workshop\data\kjvdat.txt”转换为“spark-workshop\output\kjv-wc2”,并生成名为“_SUCCESS”和“part-00000”的结果文件。
顺便说一句,”kjv”,指的是《欽定訳聖書》(King James Version)圣经的样本输入。
通过命令行或终端运行
由于启动Activator UI太麻烦,我决定尝试从CLI运行。
> cd [your spark-workshop directory]
> activator.bat run
> cd [your spark-workshop directory]
> ./activator run
因为会有类似以下这样的目标列表出现,您只需输入想要运行的目标编号即可进行相应操作(名为Hadoop.xx的目标在本地环境中无效)。
根据Spark Workshop上的详细说明,总结起来就是很长,所以简单概括一下
WordCount2和Ngram6之类的数字是指简单地指出了练习的编号。可以按顺序完成,也可以只做感兴趣的。
第一个练习“Intro1.scala”没有显示在列表中,但是这是因为它是要通过启动spark shell并以交互方式运行的,因此不包含在批处理执行中。同样,“SparkSQLParquet10”和“HiveSQL11”也是一样的。
如果要运行测试,可以使用 activator test 来运行。
在Scala IDE中导入Spark-Workshop项目。
我本来觉得在Eclipse(Scala IDE)上导入并从那里调试会很棒,所以我稍微试了一下,但是似乎不太顺利,所以就放弃了。只能以Java应用程序的形式通过“Debug As”进行识别,无法启动,并且出现了许多版本不匹配的错误。
目前我在Atom编辑器中安装了language-scala和autocomplete-plus插件,使用命令行界面进行执行。
虽然无法通过设置断点进行调试很痛苦,但是如果有Activator和Scala IDE的更新,我会再试一次。
只需要一种选择:将以下内容用中文进行释义。
参考までに、将spark-workshop项目转换为Eclipse格式时,
Not a valid command: eclipse (similar: listen, help, alias) Not a valid project ID: eclipse Expected ':' (if selecting a configuration) Not a valid key: eclipse (similar: deliver, licenses, clean) eclipse ^
如果出现了这种情况,那么似乎在spark-workshop\project文件夹的plugins.sbt和activator-sbt-eclipse-shim.sbt文件中的addSbtPlugin(“com.typesafe.sbteclipse” % “sbteclipse-plugin” % “2.5.0”)的版本指定可能有差异,需要将它们中的一个进行调整以保持一致。