간단한 예를 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 () } }