Spark Streaming初探

Spark Streaming是一种构建在Spark上的实时计算框架,它扩展了Spark处理大规模流式数据的能力,它可以接收来自Kafka,Flume,Twitter和TCP Socket的数据源。

         SparkStreaming是将流式计算分解成一系列短小的批处理作业,也就是将输入数据按照batch size(如5秒)分成一段一段的数据,每一段数据都转换成Spark中的RDD,然后将Spark Streaming中对DStream的Transformation操作为为针对RDD的Transformation操作,将RDD经过操作变成中间结果保存在内存中。

如下程序是以TCPSocket为数据来源,演示SparkStreaming通过监听TCP套接字得到数据服务器上的文本数据,,并计算其中各单词的个数。此代码是在spark自带的NetworkWordCount例子的基础上,做了点小改动而成的,主要是使用Log4j屏蔽掉了控制台打印的大量的日志信息,就只打印结果信息,并将batch size修改为5秒。

package sparkstreaming

import org.apache.spark.SparkConf
import org.apache.spark.streaming.{Seconds, StreamingContext}
import org.apache.spark.streaming.StreamingContext._
import org.apache.spark.storage.StorageLevel
import org.apache.log4j.{Level, Logger}

object NetworkWordCount {
  // 屏蔽不必要的日志显示在终端上
  Logger.getLogger("org.apache.spark").setLevel(Level.WARN)
  Logger.getLogger("org.eclipse.jetty.server").setLevel(Level.OFF)

  def main(args:Array[String]) {
    if(args.length < 2) {
      System.err.println("Usage: NetworkWordCount <hostname> <port>")
      System.exit(1)
    }

    // Create the Context with a 5 seconds batch size
    val conf = new SparkConf().setAppName("NetworkWordCount")
   //将输入数据按照batch size为5秒来分成一段一段的数据
    val ssc = new StreamingContext(conf, Seconds(5))     
    // args(0)为监听的服务器的IP,args(1)为监听的端口
    val lines = ssc.socketTextStream(args(0), args(1).toInt, StorageLevel.MEMORY_AND_DISK_SER)
    val words = lines.flatMap(_.split(" "))
    val wordsCount = words.map(x=>(x,1)).reduceByKey(_ + _)
    wordsCount.print()
    ssc.start()
    ssc.awaitTermination()
  }
}
将上述程序打包成SparkStreaming.jar,并使用spark-submit提交至spark集群进行运行(打包操作,可参考: spark实例:用spark-submit运行spark程序)。

这里使用Netcat作为数据服务器,这个工具在unix-like系统中一般都存在。执行如下命令即可启动Netcat服务:

nc -lk 9999  // 以9999为服务端口
现在来启动Spark Streaming程序,新开一个终端,执行如下命令:

$SPARK_HOME/bin/spark-submit --master spark://namenode1:7077 --executor-memory 512m --class sparkstreaming.NetworkWordCount SparkStreaming.jar namenode1 9999
如果要原封不动使用spark自带的示例,只要机器上已部署了spark,则可以执行如下命令:
./bin/run-example org.apache.spark.examples.streaming.NetworkWordCount 192.168.11.120 9999
在Netcat这边输入how are you ?,然后看spark这边的结果:

-------------------------------------------

Time: 1419088925000 ms

-------------------------------------------

(are,1)

(how,1)

(you,1)

(?,1)

-------------------------------------------
Time:  1419088930000 ms
-------------------------------------------




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值