본문 바로가기

데이터처리/spark

[reference] spark - programming quick start

Contents

  • spark 사용법
    • Spark-shell
    • self-contained application

Spark 사용법에 대해 알아보자

 

Spark-shell 을 이용한 방법과 어플리케이션을 이용한 방법을 알아보자

 

 

- 스파크 2.0 이전에는 스파크의 주 프로그래밍 인터페이스가 RDD 였다.

2.0 이후엔 RDD 는 데이터셋으로 데체 되었다

RDD 인터페이스도 여전히 지원되지만, 데이터셋을 사용하길 권장된다.

데이터 셋에 대한 자세한 내용은 나중에 알아보도록 하자

 

DataSet-

https://spark.apache.org/docs/latest/sql-programming-guide.html

 

 

Spark-Shell

 

 

스파크의 셸은 API를 배울 수 있는 간단한 방법과 데이터를 대화식으로 분석할 수 있는 강력한 도구를 제공한다.

스칼라 (Java VM에서 실행되므로 기존 Java 라이브러리를 사용하는 좋은 방법) 또는 Python에서 사용할 수 있다.

스파크 디렉터리에서 다음을 실행하여 시작한다

 

 

스파크의 primary 추상화는 dataset 이라고 불리는 분산된 항목 모음이다.

dataSet 은 Hadoop InputFormats (ex. HDFS 파일) 에서 생성하거나 다른 데이터셋을 변환해서 생성 할 수 있다.

 

이 예제는 스파크 소스 디렉터리에 있는 README 파일의 텍스트에서 dataSet을 만드는 예제다

 

some action 을 호출 해서 dataSet을 direct 하게 가져올 수 있고,

dataSet을 변환해서 새 값을 얻을 수도 있다.

 

이제 이 데이터셋을 새로운 데이터셋으로 전환해보자  

파일 항목의 하위 집합이 있는 새 데이터 집합을 반환하기 위해 필터를 호출한다.

 

 

캐시

 

스파크는 클러스터 전체의 인메모리 캐시로 dataSet 을 저장(pulling)하는 기능도 지원한다.

"핫한 데이터셋"을 쿼리할때나 pageRnk 같은 반복적으로 데이터를  접근할때 아주 유용하다

 

자체(Self- Contained) 어플리케이션

 

스파크 API를 사용하여 자체 포함 애플리케이션을 작성하고자 한다고 가정하자.

우리는 스칼라(sbt 포함), 자바(maven 포함), 파이톤(python)에서 간단한 어플리케이션을 거닐 것이다.

 

impleApp.scala라는 이름의 매우 간단한 스파크 애플리케이션을 스칼라에서 만들었다.

 

어플리케이션은 scala.App 을 extending 하는 대신 main() 메소드를 정의해야한다

 

위 프로그램은 'a'가 포함된 라인 수와 'b' 가 포함 된 라인 수만 README 에서 계산함

 

스파크가 설치된 위치로 YOUR_SPARK_HOME 을 바꿔야한다.

spark-shell 에서는 자체적으로 SparkSession을 초기화 하지만

이 프로그램에서는 프로그램의 part 로 sparkSession 을 초기화 하고있다.

 

sparkSession 을 구성하기위해 sparkSession.builder 를 호출한다.

그리고 application 이름을 set 하고

마지막으로 getOrCreate() 를 sparkSession instance 를 얻기위해 호출한다.

 

이 어플리케이션은 Spark API 에 의존하기 때문에 우리는 또한 SBT(build.sbt) 설정 파일을 포함할 것이다.

 

이 파일은 또한 스파크가 의존하는 리포지토리를 추가한다:

 

 

 

sbt가 제대로 작동하려면 SimpleApp.scala를 레이아웃하고 일반적인 디렉토리 구조에 따라 build.sbt를 구성해야 한다. 우리는 애플리케이션의 코드를 포함하는 JAR 패키지를 생성하고

, spark-submit 스크립트를 사용하여 프로그램을 실행할 수 있다.

 

아마도 이 build.sbt 를 이용해서 어플리케이션의 jar 를 만들고
spark-submit으로 이 jar를 보낼 수 있게 해주는듯?