메뉴 건너뛰기

Cloudera, BigData, Semantic IoT, Hadoop, NoSQL

Cloudera CDH/CDP 및 Hadoop EcoSystem, Semantic IoT등의 개발/운영 기술을 정리합니다. gooper@gooper.com로 문의 주세요.


console창을 두개 띄우고 한쪽에는 아래의 소스를 실행

(예, $HOME/spark/bin/spark-submit
--master spark://sda1:7077,sda2:7077
--driver-memory 2g
--executor-memory 3g
--class com.gooper.icbms.sda.kafka.onem2m.JavaSparkTest
sda-client-2.0.jar)


시키고 다른 쪽에는 nc -l 7777을 실행하고 문자열을 입력하여 7777포트에 stream을 발생시켜준다.


import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.lib.output.SequenceFileOutputFormat;
import org.apache.spark.Accumulator;
import org.apache.spark.SparkConf;
import org.apache.spark.SparkContext;
import org.apache.spark.api.java.JavaDoubleRDD;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.Optional;
import org.apache.spark.api.java.function.DoubleFunction;
import org.apache.spark.api.java.function.FlatMapFunction;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.api.java.function.Function2;
import org.apache.spark.api.java.function.MapFunction;
import org.apache.spark.api.java.function.PairFunction;
import org.apache.spark.broadcast.Broadcast;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Encoders;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SQLContext;
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.hive.HiveContext;
import org.apache.spark.storage.StorageLevel;
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.JavaStreamingContext;

import scala.Tuple2;

import com.google.gson.Gson;

public final class JavaStreamingContextTest {

  public static void main(String[] args) throws Exception {
  
System.out.println("start(JavaStreamingContextTest)................");

    System.out.println("=========== test21 start =================================");
    test21();
    System.out.println("=========== test21 end =================================");
    

    
    System.out.println("end(JavaStreamingContextTest)................");
  }

  
// localhost:7777에서 들어오는 stream data에서 입력된 문자열을 기준으로 동일 문자열의 개수를 카운트한다.
static void test21()  {
  SparkConf sc=new SparkConf().setAppName("JavaStreamingContextTest");
  JavaStreamingContext jssc = new JavaStreamingContext(sc, Durations.seconds(1));
  jssc.checkpoint("/tmp");
  JavaDStream<String> lines = jssc.socketTextStream("sda1", 7777);
     
  // error가 있으면 출력
  JavaDStream<String> errorLines  = lines.filter(new Function<String, Boolean>() {
  public Boolean call(String line) {
  return line.contains("error");
  }
  });
  errorLines.print();
  
  // 문자카운트
  JavaPairDStream<String, Integer> rst = lines.mapToPair(
  new PairFunction<String, String, Integer>() {
  public Tuple2<String, Integer> call(String line) {
  return new Tuple2(line, 1);
  }
  }).updateStateByKey(new UpdateRunningSum());

  // 람다식으로 처리할 경우
  //JavaPairDStream<String, Integer> rst = lines.mapToPair( (line)->new Tuple2<String, Integer>(line, 1)).updateStateByKey(new UpdateRunningSum());

  rst.print();
  
  jssc.start();
  try { 
  jssc.awaitTermination();
  } catch (Exception e) {
  System.out.println("exception 2: "+e.getMessage());
  }
}

}

class UpdateRunningSum implements Function2<List<Integer>, Optional<Integer>, Optional<Integer>> {
public Optional<Integer> call(List<Integer> values, Optional<Integer> current) {
int newSum = current.orElse(0);
for(int value : values) {
newSum += value;
}
return Optional.of(newSum);
}
};


번호 제목 날짜 조회 수
400 [shell script] 파일을 한줄씩 읽어서 파일내용으로 명령문 만들고 실행하는 shell script예제 2017.02.21 24149
399 [shell script]test.txt에 space로 분리된 내용을 일어들이는 예제 2017.02.21 18761
398 spark에서 hive table을 읽어 출력하는 예제 소스 2017.03.09 32956
397 spark에서 hive table을 읽어 출력하는 예제 소스 2017.03.09 26067
396 spark2.0.0에서 hive 2.0.1 table을 읽어 출력하는 예제 소스(HiveContext, SparkSession, SQLContext) 2017.03.09 26838
395 It is indirectly referenced from required .class files 오류 발생시 조치방법 2017.03.09 36082
394 spark 2.0.0의 api를 이용하는 예제 프로그램 2017.03.15 32606
393 kafka-manager 1.3.3.4 설정및 실행하기 2017.03.20 28814
392 nc -l 7777 : 7777포트에서 입력을 받는다. 2017.03.23 20238
» JavaStreamingContext를 이용하여 스트림으로 들어오는 문자열 카운트 소스 2017.03.30 19227
390 [메모리 덤프파일 분석] 2017.03.31 25575
389 streaming작업시 입력된 값에 대한 사본을 만들게 되는데 이것이 실패했을때 발생하는 경고메세지 2017.04.03 31760
388 protege 설명및 사용법 file 2017.04.04 31316
387 Container killed by the ApplicationMaster. Container killed on request. Exit code is 143 Container exited with a non-zero exit code 143 TaskAttempt killed because it ran on unusable node 오류시 조치방법 2017.04.06 38216
386 LUBM 개수별 hadoop HDFS data사이즈 정리 2017.04.06 18038
385 update를 많이 하면 heap memory가 많이 소진되고 최종적으로 OOM가 발생하는데 이에 대한 설명 2017.04.10 21597
384 [jsoup]Jsoup Tutorial 2017.04.11 18756
383 [Jsoup]특정페이지를 jsoup을 이용하여 파싱하는 샘플소스 2017.04.18 23346
382 Caused by: java.lang.ClassNotFoundException: org.apache.spark.Logging 발생시 조치사항 2017.04.19 25543
381 Spark에서 Serializable관련 오류및 조치사항 2017.04.21 33149
위로