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();
지금까지 작업한 소스프로젝트를 올리도록 하겠습니다.
압축을 풀 경로는 C:\spring\spark 에 풀어 놓고, 이클립스 워크스페이스를 잡으시면, 큰 무리없이 실행하실 수 있습니다.
앞으로는 이 소스를 이용해서 이클립스-스파크프레임웍-RDD 기반에서 자바/스칼라 를 이용한 통계 데이터를 출력을 진행하도록 하겠습니다.
그리고, 별도로 제플린은 cygwin(시그윈:windows OS상에서 LINUX OS를 에뮬레이트 해주는 프로그램) 터미널기반으로 작업하도록 하겠습니다.
스프링 MVC로 입력 작업중 Mysql NOT NULL 조건이 먹히지 않을때 입니다. (0) | 2016.06.06 |
---|---|
전자정부표준프레임웍 제대로 공부하기 (0) | 2016.03.25 |
서브라임 에디터(유료) Java빌드시, OUT 결과에서 한글깨지는 에러처리 방법 (0) | 2015.11.22 |
메이븐 프로젝트 생성(web.xml+AOP설정+컨트롤러매핑+서비스파일추가까지(DAO는제외) (0) | 2015.10.13 |
스프링 MVC 구성 (0) | 2015.09.20 |
댓글 영역