SparkStreaming简单例子(oldAPI)

SparkStreaming简单例子

◆ 构建第一个Streaming程序: (wordCount) 

  ◆ Spark Streaming 程序最好以使用Maven或者sbt编译出来的独立应用的形式运行。

  ◆ 准备工作:
  1.引入Spark Streaming的jar
  2.scala流计算import声明
  import org.apache.spark.streaming.StreamingContext
  import org.apache.spark.streaming.StreamingContext._
  import org.apache.spark.streaming.dstream.DStream
  import org.apache.spark.streaming.Duration
  import org.apache.spark.streaming.Seconds

1.初始化StreamingContext对象

   //创建一个本地StreamingContext两个工作线程和批间隔1秒。
   val conf = new SparkConf()
   conf.setMaster(“local[2]")
   conf.setAppName(“ NetworkWordCount")
   val ssc = new StreamingContext(conf, Seconds(1))

2.获取DStream对象 

  //创建一个连接到主机名的DStream,像localhost:9999

   val lines = ssc.socketTextStream("localhost", 9999)

3.操作DStream对象

  //将每一行接收到的数据通过空格分割成单词

  val words = lines.flatMap(_.split(" “))
  //导入StreamingContext中的隐式转换
  import org.apache.spark.streaming.StreamingContext._

   // 对每一批次的单词进行转化求和

  val pairs = words.map(word => (word, 1))
  val wordCounts = pairs.reduceByKey(_ + _)
  // 每个批次中默认打印前十个元素到控制台
  wordCounts.print()

4.启动流处理程序

  ssc.start// 开始计算

  ssc.awaitTermination() // 等待计算终止

  ssc.stop() //结束应用

启动网络端口,模拟发送数据

  1.借助于nc命令,手动输入数据

    Linux/Mac :nc

    Windows:cat

      nc -lk 9999

  2.借助于代码,编写一个模拟数据发生器  

package com.briup.streaming

import java.io.PrintWriter
import java.net.ServerSocket

import scala.io.Source

object MassageServer {

  // 定义随机获取整数的方法
  def index(length: Int) = {
    import java.util.Random
    val rdm = new Random
    rdm.nextInt(length)
  }

  def main(args: Array[String]) {
    println("模拟数据器启动!!!")
    // 获取指定文件总的行数
    val filename ="Spark/ihaveadream.txt";
    val lines = Source.fromFile(filename).getLines.toList
    val filerow = lines.length

    // 指定监听某端口,当外部程序请求时建立连接
    val serversocket = new ServerSocket(9999);

    while (true) {
      //监听9999端口,获取socket对象
      val socket = serversocket.accept()
      //      println(socket)
      new Thread() {
        override def run = {
          println("Got client connected from: " + socket.getInetAddress)

          val out = new PrintWriter(socket.getOutputStream(), true)

          while (true) {
            Thread.sleep(1000)
            // 当该端口接受请求时,随机获取某行数据发送给对方
            val content = lines(index(filerow))

            println (content)

            out.write(content + ‘\n‘)

            out.flush()
          }
          socket.close()
        }
      }.start()
    }
  }
}

模拟发送数据

注意事项:

◆ 1.启动 Spark Streaming 之前所作的所有步骤只是创建了执行流程, 程序没有真正
连接上数据源,也没有对数据进行任何操作,只是设定好了所有的执行计划
◆ 2.当 ssc.start()启动后程序才真正进行所有预期的操作
◆ 3.执行会在另一个线程中进行,所以需要调用awaitTermination来等待流计算完成
◆ 4.一个Streaming context只能启动一次
◆ 5.如果模式是本地模式,那么请务必设置local[n] ,n>=2   1个用于接收,1个用于处理



package com.briup.streaming

import org.apache.log4j.{Level, Logger}
import org.apache.spark.SparkConf
import org.apache.spark.streaming.{Duration, StreamingContext}

object MyTestOldAPI {
  def main(args: Array[String]): Unit = {
    //设置日志级别
    Logger.getLogger("org").setLevel(Level.WARN)

    //1 获取DS
    val conf = new SparkConf().setAppName("MyTestOldAPI").setMaster("local[*]")
    val dss = new StreamingContext(conf, Duration(1000))
    val ds = dss.socketTextStream("localhost", 9999)

    //2 逻辑处理  //统计
    val res = ds.filter(_ != "").flatMap(_.split(" ")).map(word => (word, 1)).reduceByKey(_ + _)

    res.print()

    //3 开启实时处理任务
    dss.start()
    dss.awaitTermination()
    dss.stop()
  }
}

原文地址:https://www.cnblogs.com/Diyo/p/11392059.html

时间: 2024-08-28 19:41:15

SparkStreaming简单例子(oldAPI)的相关文章

从一个简单例子来理解js引用类型指针的工作方式

? 1 2 3 4 5 6 7 <script> var a = {n:1};  var b = a;   a.x = a = {n:2};  console.log(a.x);// --> undefined  console.log(b.x);// --> [object Object]  </script> 上面的例子看似简单,但结果并不好了解,很容易把人们给想绕了--"a.x不是指向对象a了么?为啥log(a.x)是undefined?".&

Hadoop RPC简单例子

jdk中已经提供了一个RPC框架-RMI,但是该PRC框架过于重量级并且可控之处比较少,所以Hadoop RPC实现了自定义的PRC框架. 同其他RPC框架一样,Hadoop RPC分为四个部分: (1)序列化层:Clent与Server端通信传递的信息采用了Hadoop里提供的序列化类或自定义的Writable类型: (2)函数调用层:Hadoop RPC通过动态代理以及java反射实现函数调用: (3)网络传输层:Hadoop RPC采用了基于TCP/IP的socket机制: (4)服务器端

extern外部方法使用C#简单例子

外部方法使用C#简单例子 1.增加引用using System.Runtime.InteropServices; 2.声明和实现的连接[DllImport("kernel32", SetLastError = true)] 3.声明外部方法public static extern int GetCurrentDirectory(int a, StringBuilder b); 4.对外部方法操作  GetCurrentDirectory(300, pathstring); using

事件简单例子

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Runtime.InteropServices; 6 7 namespace EventTest 8 { 9 /// <summary> 10 /// 事件订阅者类 11 /// </summary> 12 class Program 13 { 14 static v

spring mvc(注解)上传文件的简单例子

spring mvc(注解)上传文件的简单例子,这有几个需要注意的地方1.form的enctype=”multipart/form-data” 这个是上传文件必须的2.applicationContext.xml中 <bean id=”multipartResolver” class=”org.springframework.web.multipart.commons.CommonsMultipartResolver”/> 关于文件上传的配置不能少 大家可以看具体代码如下: web.xml &

自定义隐式转换和显式转换c#简单例子

自定义隐式转换和显式转换c#简单例子 (出自朱朱家园http://blog.csdn.net/zhgl7688) 例子:对用户user中,用户名first name和last name进行转换成合成一个限定长度为10个字符新name. 自定义隐式转换: namespace transduction { public partial class transductionForm : Form { public transductionForm() { InitializeComponent();

使用fastjson转换json的简单例子

pom添加依赖: <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.1.41</version> </dependency> 代码: package JsonTest.JsonTest; import java.util.ArrayList; import java.util.Hash

最简单例子图解JVM内存分配和回收

一.简介 JVM采用分代垃圾回收.在JVM的内存空间中把堆空间分为年老代和年轻代.将大量(据说是90%以上)创建了没多久就会消亡的对象存储在年轻代,而年老代中存放生命周期长久的实例对象.年轻代中又被分为Eden区(圣经中的伊甸园).和两个Survivor区.新的对象分配是首先放在Eden区,Survivor区作为Eden区和Old区的缓冲,在Survivor区的对象经历若干次收集仍然存活的,就会被转移到年老区. 简单讲,就是生命期短的对象放在一起,将少数生命期长的对象放在一起,分别采用不同的回收

BIP_Case_以RDF为数据源以RTF为模板的简单例子

一. 汇总    1. 建立rdf报表    2. 开发rtf模板    3. 建立可执行程式    4. 建立并发程式    5. 注册data defination    6. 注册template    7. 运行程式    8. 开发程式中间,需将输出模式修改为xml,产生xml文件,以做rtf开发准备原始数据 二.分步解析1. 建立rdf报表2. 开发rtf模板3. 建立可执行程式4. 建立并发程式5. 注册data defination6. 注册template7. 运行程式8. 开