상세 컨텐츠

본문 제목

이클립스-스파크프레임웍-RDD를 사용한 웹통계 출력 기초

JSP·자바·코틀린

by 김일국 2016. 1. 8. 19:40

본문

1. 스칼라 최신버전 설치 ( http://www.scala-lang.org/download/ )

> 환경설정: 윈도우환경변수 등록

> SCALA_HOME -  C:\스칼라 설치경로\Scala

> PATH - %SCALA_HOME%\bin

> 설치 확인 : 윈도우CMD모드에서 scala -version


2. 이클립스 IDE for Java EE 최신버전 압축풀기 ( https://eclipse.org/downloads/ )

> 저는 Eclipse IDE for Java EE Developers (Mars버전-최신)을 받았습니다.

3. 이클립스에 스파크 프레임웍 설치

> 이클립스 -> 신규 메이븐 프로젝트 생성

> pom.xml 파일수정

>> 의존성 추가

<dependency>

      <groupId>com.sparkjava</groupId>

      <artifactId>spark-core</artifactId>

      <version>2.2</version>

    </dependency>

> 프로젝트 마우스 오른쪽버튼 클릭 -> Maven -> Download 클릭

4. 스파크 프레임웍 설치 확인 및 자바를 이용한 출력 확인 (http://192.168.0.3:4567/hello)

 - src/main/java/Main.java 생성

import static spark.Spark.*;

public class Main {

public static void main(String[] args) {

get("/hello", (req, res) -> "한글 Spark!");

}

}

> 위 코드 작성 후 저장 -> Run (스파크 내장 웹서버가 기동 됩니다. 아래 Console화면의 빨간색 문자출력부분이 4567포트서버가 가동되었다는 표시입니다)

> 브라우저 띄워서 결과확인: http://192.168.0.3:4567/hello


5. 스파크 프레임웍+자바를 이용한 DB연동 확인(결과는 바로 위 화면과 같습니다.)

- src/main/java/Main.java 파일에 기존코드를 아래코드로 대체

public static void main(String[] args) {

// 기본 구성 정보

Connection conn = null;

ResultSet result;

PreparedStatement pstmt;

String url = "jdbc:mysql://localhost:3306/db_client";

String id = "root";

String pwd = "apmsetup";

String driver = "com.mysql.jdbc.Driver";

try {

// 드라이버 클래스

Class.forName(driver);

   // 커넥션 연결

conn = DriverManager.getConnection(url, id, pwd);

}catch(ClassNotFoundException cfe){

// do nothing

}catch(SQLException se){

// do nothing

}

   // statement 생성

String sql;

//sql = "select 'test' test from dual");//더미테스트일때

sql = "select name AS test from tbl_client";

String test = "";//결과값

try {

// 쿼리 날리기

pstmt = conn.prepareStatement(sql);    

result = pstmt.executeQuery();

   // 결과값 꺼내기

while(result.next()) {

     test = result.getString("test");

     System.out.println(test);

   }

// 커넥션 종료

   conn.close();

}catch(SQLException se){

se.printStackTrace();

}

String Html ="<div style='color:red'>마지막레코드출력</div><span style='color:black'>"+ test + "</span>";

get("/hello", (req, res) -> Html);

}


6. 스칼라를 이용한 출력 확인

> HELP메뉴의 이클립스 마켓플레이스에서 scala IDE 4.2.x 플러그인 설치

> 스칼라 신규 프로젝트 생성

> scala프로젝트에서 New -> Scala Object 생성

> - src/Demo.scala

> 아래와 같은 샘플코드 작성후 Run

object Demo {

  def main(args: Array[String]) {

    println("한글 Scala")

    helloWorld.hello()

  }

}

object helloWorld {

  def hello() {

    println("Hello World 출력")

  }

}

object fileReadObj {

  def main(args: Array[String]) {

    val PATH = getClass.getResource("").getPath

    try{

      for(line <- Source.fromFile(PATH+"read.txt").getLines()){

        println(line)

      }

    }catch{

      case ex: Exception => println(ex)

    }

  }

}


7. 스칼라에서 Mysql DB연동 확인 (위 화면과 결과가 같습니다.)

> src/Demo.scala 에 아래 Object를 추가 한다.

import java.sql.Connection

import java.sql.DriverManager


object ConnectionDB {

  def main(args: Array[String]): Unit = {

    

    // 기본 구성 정보

    var driver = "com.mysql.jdbc.Driver"

    var url = "jdbc:mysql://localhost:3306/db_client"

    var user = "root"

    var password = "apmsetup"

    

    // 드라이버 클래스

    Class.forName(driver)

    

    // 커넥션 연결

    var connection:Connection = DriverManager.getConnection(url, user, password)

    

    // statement 생성

    var statement = connection.createStatement()

    

    // 쿼리 날리기

    //var result = statement.executeQuery("select 'test' test from dual")//더미테스트일때

    var result = statement.executeQuery("select name AS test from tbl_client")//실제 DB일때

    

    // 결과값 꺼내기

    while( result.next() ){

      var test = result.getString("test");

      println(test)  

    }

    

    // 커넥션 종료

    connection.close()

  }

}


8. 위 작업중 com.mysql.jdbc.Driver 부분에서 에러가 발생됩니다.

> 외부라이브러리를 추가해 주면, 정상적으로 출력이 나옵니다.

> scala프로젝트에서 오른쪽 클릭 -> Builde Path -> Libraries -> Add External JARs 클릭

> mysql-connector-java-5.1.11.jar 파일 선택 후 추가 (다른버전이라도 상관 없습니다.)

mysql-connector-java-5.1.11.jar


이러한 작업을 하는 목적은 이클립스기반으로 스파크 프레임웍을 사용해서 자바(또는 스칼라)를 이용해서 통계를 구한것을 제플린을 이용해서 웹브라우저로 그래프를 출력하기 위해서 입니다.(제플린 출력은 다음시간에...)

지금까지는 이클립스 개발환경(IDE)을 이용해서

- 스파크 프레임웍 기반으로 자바를 이용해서 DB연동 후 웹브라우져로 출력

- 스칼라를 이용해서 DB연동

이렇게 해 보았습니다.


9. 마지막 추가작업으로 위 소스중에 스파크-자바 소스에서 단순한 DB내용만 출력하는 데서 RDD(Resilent Distributed Dataset-탄력적인 분산 데이터셋)을 사용해서, 단어카운터를 검색하는 앱을 추개해 보았습니다.(아래는 결과화면 입니다.)

- pom.xml (메이븐 의존성코드 추가)

<dependency>

    <groupId>org.scala-lang</groupId>

    <artifactId>scala-library</artifactId>

    <version>2.10.2</version>

</dependency>

<dependency>

    <groupId>org.apache.spark</groupId>

    <artifactId>spark-core_2.10</artifactId>

    <version>1.3.0</version>

</dependency>


- src/main/java/Main.java //추가한 자바 소스

import java.nio.file.Path;

import java.nio.file.Paths;

import java.sql.*;

import org.apache.spark.SparkConf;

import org.apache.spark.api.java.JavaRDD;

import org.apache.spark.api.java.JavaSparkContext;

import org.apache.spark.api.java.function.Function;


//외부txt파일 가져오기

Path currentRelativePath = Paths.get("");

String s = currentRelativePath.toAbsolutePath().toString();

s = s + "\\src\\main\\java\\";

//하둡 홈폴더 지정

System.setProperty("hadoop.home.dir", s);

System.out.println("Current relative path is: " + s);

//자바에서 스파크 초기화하기

SparkConf sparkConf = new SparkConf().setAppName("JavaNetworkWordCount").setMaster("local");

JavaSparkContext sc = new JavaSparkContext(sparkConf);

//파일 입력 데이터를 불러온다

JavaRDD<String> input = sc.textFile(s+"read.txt").cache();

//RDD 라인에서 First문자가 들어있는 갯수 구함

long numFirsts = input.filter(new Function<String, Boolean>() {

     public Boolean call(String numFirsts) { return numFirsts.contains("First"); }

   }).count();

//RDD 라인에서 Second문자가 들어있는 갯수 구함

long numSeconds = input.filter(new Function<String, Boolean>() {

     public Boolean call(String numSeconds) { return numSeconds.contains("Second"); }

   }).count();

System.out.println("Lines with First: " + numFirsts + ", lines with Second: " + numSeconds);

String sparkcontext = "Lines with First: " + numFirsts + ", lines with Second: " + numSeconds;

sc.close();


지금까지 작업한 소스프로젝트를 올리도록 하겠습니다.

spark.zip

압축을 풀 경로는 C:\spring\spark 에 풀어 놓고, 이클립스 워크스페이스를 잡으시면, 큰 무리없이 실행하실 수 있습니다.

앞으로는 이 소스를 이용해서 이클립스-스파크프레임웍-RDD 기반에서 자바/스칼라 를 이용한 통계 데이터를 출력을 진행하도록 하겠습니다.

그리고, 별도로 제플린은 cygwin(시그윈:windows OS상에서 LINUX OS를 에뮬레이트 해주는 프로그램) 터미널기반으로 작업하도록 하겠습니다.



mysql-connector-java-5.1.11.jar
0.7MB
spark.zip
0.07MB

관련글 더보기

댓글 영역