6. Spark 드라이버 클래스 열기
com.wikibook.bigdata.smartcar.sparkstream > New > Class > SmartCarSparkStreaming.java
Step-1
Spark 드라이버 클래스 개발 1 – 라이브러리 Import 확인
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.api.java.function.Function2;
import org.apache.spark.api.java.function.PairFunction;
import org.apache.spark.streaming.Duration;
import org.apache.spark.streaming.Durations;
import org.apache.spark.streaming.api.java.JavaDStream;
import org.apache.spark.streaming.api.java.JavaPairDStream;
import org.apache.spark.streaming.api.java.JavaPairReceiverInputDStream;
import org.apache.spark.streaming.api.java.JavaStreamingContext;
import org.apache.spark.streaming.kafka.KafkaUtils;
import scala.Tuple2;
Step-2
7. Spark 드라이버 클래스 개발 2 – JavaPairReceiverInputDStream
String zkServer = "server02.hadoop.com:2181";
String consumerGroup = "TestGroup";
String topic = "SmartCar-Topic";
int threadNum = 1;
int mBatchTime = 1000;
SparkConf sparkConf = new SparkConf().setAppName("SmartCarStreaming");
JavaStreamingContext jssc = new JavaStreamingContext(sparkConf, new Duration(mBatchTime));
Map<String, Integer> topicMap = new HashMap<>();
topicMap.put(topic, threadNum);
JavaPairReceiverInputDStream<String, String> kafkaMsg= KafkaUtils.createStream(jssc, zkServer, consumerGroup, topicMap);
Spark 드라이버 클래스 개발 3 – JavaDStream
JavaDStream<String> dStream = kafkaMsg.map( new Function<Tuple2<String, String>, String>() {
private static final long serialVersionUID = 1L;
@Override
public String call(Tuple2<String, String> tuple2) {
return tuple2._2();
}
});
dStream.print();
Step-4
Step-3
8. Spark 드라이버 클래스 개발 5 – JavaPairDStream
JavaPairDStream<String, Integer> drivingInfoStream = dStream.mapToPair(new PairFunction<String, String, Integer>() {
private static final long serialVersionUID = 1L;
@Override
public Tuple2<String, Integer> call(String s) {
String carNum = "";
int carSpd = 0;
String result[] = COM.split(s);
if(result.length == 8) {
carNum = result[1];
carSpd = Integer.parseInt(result[6]);
}
return new Tuple2<>(carNum , carSpd);
}
})
Step-6
Spark 드라이버 클래스 개발 4 – 콤마 패턴 멤버변수 정의
private static final Pattern COM = Pattern.compile(",");
Step-5
9. Spark 드라이버 클래스 개발 5 – reduceByKeyAndWindow
.reduceByKeyAndWindow( new Function2<Integer, Integer, Integer>() {
private static final long serialVersionUID = 1L;
int count = 2;
int avg = 0;
@Override
public Integer call(Integer i1, Integer i2) {
avg = i1 / count++;
if(avg >= 100) {
System.out.println("@ Over-Speed Event:" + avg);
}
return i1 + i2;
}
}, Durations.seconds(30), Durations.seconds(30));
drivingInfoStream.print();
jssc.start();
jssc.awaitTermination();
Step-7
10. 빌드 및 컴파일
pom.xml 선택 > Run > Run As > Maven Install
Packing 및 Jar 파일 확인
target > bigdata.smartcar.spark_stream-0.0.1-SNAPSHOT.jar
Step-9
Step-8
Spark Streaming 드라이버 클래스 업로드
target > bigdata.smartcar.spark_stream-0.0.1-SNAPSHOT.jar 선택
Server02 의 /Home/pilot-pjt/working 경로에 업로드
Step-10
11. Spark Stream 드라이버 클래스 실행
Server02 접속
$ cd /home/pilot-pjt/working
$ spark-submit --class com.wikibook.bigdata.smartcar.spark_stream.SmartCarSparkStreaming --
master yarn --deploy-mode client bigdata.smartcar.spark_stream-0.0.1-SNAPSHOT.jar
Step-11
12. 실무로 배우는 빅데이터 기술
확장하기 19편 – Spark Streaming 활용 1/2
[ 강의자료 ]
동 영 상: 유튜브 www.youtube.com
실습문서: 슬라이드쉐어 www.slideshare.net