使用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”。

filter_template_spark1.png

当你看到你的应用程序已准备好时,就点击「编译器/日志视图」。

app_ready1.png

基本上应该自动开始编译和解决依赖关系,但是如果 log view 中没有任何信息,需要点击“开始编译”按钮。

compile_done1.png

在 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%。

hadoop_home1.png

在底下创建一个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的目标在本地环境中无效)。

NoName1hadoop.HSparkSQL92hadoop.HMatrix43hadoop.HWordCount34Crawl5a5SparkStreaming8Main6hadoop.HNGrams67NGrams68InvertedIndex5bSortByWordAndCounts9SparkStreaming810hadoop.HJoins711hadoop.HSparkStreaming812Matrix413WordCount2SortByWord14WordCount2SortByCount15WordCount2GroupBy16InvertedIndex5b17Matrix4StdDev18SparkSQL919hadoop.HInvertedIndex5b20SparkStreaming8SQL21hadoop.HCrawl5aHDFS22com.typesafe.sparkworkshop.util.streaming.DataSocketServer23Joins724com.typesafe.sparkworkshop.util.streaming.DataDirectoryServer25WordCount3SortByWordLength26Crawl5aHDFS27SparkStreaming8MainSocket28Joins7Ordered29WordCount230WordCount3

根据Spark Workshop上的详细说明,总结起来就是很长,所以简单概括一下

TypeDescriptionWordCount2, WordCount3文章中の単語の出現数をカウント。2と3の違いは、3の方では「Kryo Serialization」という圧縮効率のいいライブラリを使ってるので、メモリとネットワーク帯域をセーブできるということらしいです。Matrix4行列に対する処理のサンプル。デフォルトでは5×10の行列を作って(1)、行ごとに合計と平均を出しているようです。Crawl5a, InvertedIndex5bクローラーが引っ張ってきたデータを、転置インデックスにするという、全文検索エンジン向けのシナリオ。NGram6Ngramによるパターンマッチ。ここでは「% love % %」という条件で、「4単語のつながりで2番目がlove」となるものを探してるようです。Joins7, Joins7Ordered2つのデータのJoin。「kjvdat.txt」と「abbrevs-to-names.tsv」の1カラム目をKeyとしてJoinして、略されている聖書の名前をフルネームに変換をしています(e.g. Gen -> Genesis)。SparkStreaming8バッチ処理では当然流した時点の集計しかできないわけですが、SparkにはStreamを受け取ってリアルタイムな処理をする機能があるので、サーバ立ててincrementalなword countができるよ、というシナリオ。SparkSQL9今までのExerciseでは直接Text FileをRDDに読み込んでアレコレしてましたが、ここでは読み込んだTextに対して、Spark SQLの機能を使ってフィルタ(WHERE文)したりGroup By -> Countしたりしてます。単純な集計なら自力でreduceByKeyとかするより楽っぽい?

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”)的版本指定可能有差异,需要将它们中的一个进行调整以保持一致。

如果 R 的话,使用 matrix 函数可以创建一个 0 到 49 的矩阵,行数为 5,列数为 10,按行填充。
广告
将在 10 秒后关闭
bannerAds