간단한 예를 SparkStreaming (oldAPI)

간단한 예를 SparkStreaming

◆ 스트리밍 프로그램의 건설 : (단어 수) 

  ◆ 사용하는 가장 좋은 프로그램 스트리밍 스파크 메이븐을 독립 실행 형 응용 프로그램 또는 실행의 SBT 번역의 형태를.

  ◆ 준비 :
  JAR의 1. 불꽃 스트리밍 소개
  2.scala 스트림 컴퓨팅 수입 신고
  수입 org.apache.spark.streaming.StreamingContext
  수입 org.apache.spark.streaming.StreamingContext._의
  수입 org.apache.spark.streaming.dstream .DStream
  가져 오기 org.apache.spark.streaming.Duration
  가져 오기 org.apache.spark.streaming.Seconds

 

1. 초기화 StreamingContext 개체

   // 1 초 지역 StreamingContext 두 작업자 스레드 및 배치 간격을 만듭니다.
   새로운 새 SparkConf conf의 발 = ()
   conf.setMaster ( "로컬 [2]")
   conf.setAppName ( "NetworkWordCount")
   브로 SSC = 새로운 새 StreamingContext (conf의, 초. (1))

2. d 스트림 객체를 가져옵니다 

  // localhost를 같이 호스트 이름 d 스트림에 대한 연결을 만들 : 9999

   발 라인 ssc.socketTextStream = ( "로컬 호스트", 9999)

3. 작동 d 스트림 객체

  // 수신 된 데이터의 각 행은 공백으로 단어로 분할 

  즉 lines.flatMap = 발 (_. 분할 ( ""))
  // StreamingContext는 암시 적 변환에 도입 된
  수입 org.apache.spark.streaming.StreamingContext._

   // 각각의 일괄 변환 단어 합계를 위해

  words.map 쌍 = 발 (말씀 => (워드 ,. 1))
  발은 wordcounts = pairs.reduceByKey (_ + _)
  콘솔 10 개 개의 요소 전에 // 기본 인쇄 각 배치
  wordCounts.print ()

4. 시작 스트림 핸들러

  ssc.start // 계산

  ssc.awaitTermination () // 종료를 계산 기다립니다

  ssc.stop () // 엔드 응용 프로그램

 

네트워크 포트를 시작 아날로그 데이터 전송

  명령 수단 NC 1. 데이터를 수동으로 입력

    리눅스 / 맥 : NC

    윈도우 : 고양이

      NC는 9999 -lk

  시뮬레이션 데이터 생성 부에 기록 된 코드에 의해 2  

패키지 com.briup.streaming 

가져 오기 를 java.io.PrintWriter
 가져 오기 java.net.ServerSocket의 

가져 오기 scala.io.Source의 

개체 MassageServer을 { 

  // 임의의 정수 수집 방법의 정의 
  DEF 지수 (길이 : INT) = {
     가져 오기 java.util.Random의 
    RDM 발 = 새로운 새로운 랜덤 
    rdm.nextInt (길이) 
  } 

  DEF 주 (인수 : 배열 [문자열]) { 
    println 메소드는 ( "아날로그 데이터 시작!" )
     // 라인 지정된 파일의 총 수를 가져옵니다 
    발 파일 이름 = "스파크 / ihaveadream.txt " ; 
    발 라인 =  Source.fromFile (파일명) .getLines.toList
    발에 filerow = lines.length 

    // 외부 프로그램이 요청하는 경우 연결이 포트 모니터 지정 
    브로 = ServerSocket의 새로운 새 ServerSocket의 (9999 ) 

    그동안 ( true로를 ) {
       // 포트 9999을 청취 소켓 오브젝트 취득 
      브로 소켓 = ServerSocket.accept ()를
       //       println 메소드 (소켓) 
      새로운 새 스레드 () { 
        재정의 RUN DEF = { 
          (println 메소드 "연결된 클라이언트에서 가져온 :"+ socket.getInetAddress) 

          발 OUT = 새로운 새로운 의 PrintWriter (Socket.getOutputStream (), true로 ) 

          그동안 ( true로 ) { 
            에 Thread.sleep ( 1000 )
             // 포트 요청 서로 랜덤 데이터 전송선 취득 받아 
            발 함유율의 라인 (인덱스 (filerow)) 

            println 메소드 (콘텐츠) 

            out.write를 (콘텐츠 + '\ N-' ) 

            OUT .flush () 
          } 
          Socket.close () 
        } 
      } .start () 
    } 
  } 
}
아날로그 전송 데이터

 

 

주의 사항 :

스트리밍했다 1. 스파크가 실행의 흐름을 만들 전에 ◆이 프로그램은 실제 모든 단계입니다
데이터 소스에 연결하거나 데이터 작업이 바로 실행 계획의 모든 설정
◆ 2. ssc.start ( ) 프로그램이 정말로 기대를 운영하기 시작한 후
◆ 3. 실행이 다른 스레드에서 수행 될 것이다, 그래서이 완료 될 때 호출 awaitTermination 흐름 계산을 기다릴 필요
◆ 4. 스트리밍 컨텍스트를 한 번만 활성화 할 수있는
모드가 로컬 모드 인 경우 ◆ 5 ,> = N 로컬 [N]을 설정해야 2 1 을 처리하기위한, 수신 번째

 
패키지 com.briup.streaming 

수입 org.apache.log4j {수준, 로거}.
 수입 org.apache.spark.SparkConf의
 수입 org.apache.spark.streaming {시간, StreamingContext}. 

객체 MyTestOldAPI { 
  데프 주 (인수 : 배열 [ 문자열]) : 단위 = {
     // 设置日志级别 
    Logger.getLogger ( "조직" ) .setLevel (Level.WARN) 

    // 1 개获取DS 
    발의 conf = 새로운 SparkConf () setAppName ( "MyTestOldAPI") setMaster ( ".. 로컬 [*] " ) 
    의 Val DSS는 = 새로운 StreamingContext (conf의 지속 기간 (1000 )) 
    브로 DSDss.socketTextStream = ( "localhost"를, 9999 ) 

    // 2 로직   // 통계 
    발 입술 = ds.filter (_! = "") .FlatMap (_. 분할 ( "")).지도 (워드 => ( 워드 ,. 1)). reduceByKey (_ + _) 

    res.print () 

    // . 3 열려 실시간 처리 작업 
    dss.start () 
    dss.awaitTermination () 
    dss.stop () 
  } 
}

 

추천

출처www.cnblogs.com/Diyo/p/11392059.html