소프트웨어 개발/Scala - Functional

Spark 설치, 이용하기

늘근이 2015. 5. 31. 10:37

스칼라를 기반으로 하는 Spark는 그야말로 확 끌리는 도구 아닐까 싶다. 일단 무작정 다운로드를 해보자.

약 200메가 정도 되니, 자신의 하둡 설치 버젼에 따라 잘 골라서 다운로드하면 된다.

https://spark.apache.org/downloads.html

이제 압축을 풀어주고 바로 이용해볼수 있다.

tar -xvfz spark-1.3.1.tgz


스파크에는 다음 기능이 있다.

RDD – Resilient Distributed Datasets

Transformations & Actions - RDD에는 상기의 두가지 연산이 있음 (기존의 Reduce보다 제공하는 연산이 굉장히 많다.) RAM에도 읽기만 가능하게 만들어서, fault-tolerant & efficient한 램 스토리지를 만들었다고 한다. 그렇게 해서 나온것이 바로 Spark. 스파크는 다음과 같은 과정으로 쉽게 시작할수 있다. 아무래도, 여러가지 컨셉상 맞는 프로그래밍 언어는 Scala라고 생각하여, 스칼라로 시작한다.

 

일단 다음의 명령어로, 스파크를 시작해볼수 있다.

./bin/spark-shell

 



이제 scala> 와 같은 콘솔이 뜨면 바로 작업하면 된다.

 

HDFS 파일 (Hadoop InputFormates) 로 만들어질수도 있는데, README파일을 가지고 다음과 같이 변수로 끌어올수 있다.

Val textFile = sc.textFile(“README.md”)

 

이제 이것을 바로 분석해 볼수있다.

textFile.count() // ß 숫자세기

textFile.first() //ß 첫번째 아이템

 

심플한 스칼라 앱.

여기서부터는 훨씬 자바보다 쉽게 프로그래밍 가능합니다.

 

package counting

 

import org.apache.spark.SparkConf

import org.apache.spark.SparkContext

 

 

object Test {

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

          val logFile = "YOUR_SPARK_HOME/README.md" // Should be some file on your system

    val conf = new SparkConf().setAppName("Simple Application")

    val sc = new SparkContext(conf)

    val logData = sc.textFile(logFile, 2).cache()

    val numAs = logData.filter(line => line.contains("a")).count()

    val numBs = logData.filter(line => line.contains("b")).count()

    println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))

   }

}

 

솔좀 안좋은게 버전문제로 약간 문제가 생길수 있다. 2.10 버전과 2.11버전의 문제다. 따라서 build path에서 버전을 좀 설정해주어야 함.

자 이제, 이거 제대로 한번 컴파일 해보아야 한다. 다음과 같은 명령어는 먹히는것으로 기록되었다.

./bin/spark-submit --class "counting.Test" --master local[4]  scalaTest.jar

--master local[4] 는 생략해도 되는것으로 보인다.

패키지 이름을 잘 써주어야 한다.