目前在试图实现一个idea,
利用Spark结合Kafka offset,用Java单例模式,实现一个按照文件类型分配文件的数据流。
因为我的项目是需要分配不同类型的文件,数据挖掘的人按照不同类型的数据来做算法。
以前我只是编辑过成型的Spark代码,并且用的是scala。这一次我打算用我熟悉的Java来搞一次。
Step1:
去Spark官网examples:https://github.com/apache/spark
下载代码。
下载时要选择一个合适的branch。因为master上的3.4.0版本好像只支持Java13.
我选择了3.3.0版本的branch。
我git clone的时候遇见了一下error
Google了一下,发现要加remote proxy 为 "".
$ git config --global --add remote.origin.proxy ""
然后clone and checkout 3.3.0版本:
$ git clone https://github.com/apache/spark.git
$ git checkout v3.3.0
下载结束后,用ide打开到examples目录下,会自行加载dependencies。
spark-streaming-kinesis-asl无法加载,不过这个不是当前需要解决的问题。可以暂时comment掉,我有用一个确定的版本代替Id和version变量来暂时加载。
根据跟目录下documentation的指示,退回Spark根目录,run
$ ./build/mvn -DskipTests clean package
这个需要build很久,最好连接上电源,会快一些,而且很耗电。
我在streaming里找到java的一个例子examples/src/main/java/org/apache/spark/examples/streaming/JavaSqlNetworkWordCount.java
根据注解,
先run Netcat server,再开一个terminal,退到根目录,
$ cd ..
$ ./bin/run-example org.apache.spark.examples.streaming.JavaStatefulNetworkWordCount localhost 9999
这个文件本身是个单例模式,利用spark streaming来count words,可以作为我的project的基础框架。
这是一个单例模式的例子,因为counter只需要一个,多个的话会导致重复计数。优点主要是确保所有对象都访问唯一实例和减少内存开支和系统的性能开销。
官网上的例子太强大了,有四种语言,Java, Python, R, Scala.很值得研究。
未完待续。。