SPARK(3) SparkContext
지난 시간의 Spark의 실행하기 위해
val conf = new SparkConf().setAppName("HelloWorld").setMaster("local[1]")
.set("spark.executor.memory", "4g")
.set("spark.driver.memory", "4g")
val sc = new SparkContext(conf)
다음과 같은 코드를작성 하였는데
풀이를 하면
SparkConf() 는 SparkContext를 생성 하기 위한 설정 파일이다.
setAppName()은 Spark어플리케이션의 이름
setMaster() 는 로컬 피씨에서 사용 하기 위해 local로 적어준것이고 [ N ] 은 실행할 스레드의 개수(core)를 의미한다.
로컬 피씨의 전체 의 core를 쓰고 싶다면 [*] 를 사용해주면 된다.
SparkContext 객체는 클러스터상에서 스파크 작업 실행을 관리 하는 객체이다.
SparkContext 는 많은 유용한 메서드를 제공하는데 , 많이 쓰이는 것은 탄력적 분산 데이터셋
을 생성하는 메서드들을 가장 자주 사용하게 된다.
탄력적 분산 데이터셋(RDD)
은 클러스터의 여러 노드에 파티션으로 나뉘어 분산되며, 각 파티션은 RDD전체 데이터중 일부를 담게 된다.
여기서 파티션의 의미는 스파크에서 병렬 처리되는 단위.
RDD를 생성하는 간단한 방법은 로컬 객체 컬렉션을 인수로 SparkContext의 parallelize 메서드를 실행 하는것.
val rdd = sc.parallelize(Array(1,2,3,4),4)
첫 번째 파라미터는 병렬 처리 하려는 객체 컬렉션을 나타내며, 두번째 인수는 파티션의 개수이다.
파티션내의 객체들에 대한 연산을 수행하게 될때, 스파크는 구동자 프로세스로 부터 객체 컬랙션의 일부를 가지고 온다.
RDD를 HDFS, 텍스트파일 를 포함한 디렉토리로부터 생성하기 위해서는
val rdd2 = sc.textFile('hdfs:///hadoopData/process01.txt')
textFile 메서드를 사용한다. 단, 메서드의 인수로 디렉토리 이름을 입력하게되면 스파크는 그 디렉터리의 모든 파일을 RDD로 구성요소로 간주하게된다. 이렇게 parallelize, textFile등의 메서드의 코드 의 시점까지는 데이터를 읽어들이거나, 메모리에 올리는 일은 실제로 일어나지 않는다. 스파크는 파티션 내의 객체들에 대해 연산을 수항할때가 되서야 섹션=스플릿 단위로 읽어 RDD에 정의한 필터링 과 같은 집계같은 작업을 통해 가공을 함.
오류가 있거나 궁금한점있으면 같이 공유했으면 좋겠습니다.
'BackEnd > Spark' 카테고리의 다른 글
Spark BroadCast (0) | 2019.08.28 |
---|---|
SPARK 에서의 기본 행동(action) 연산자 및 변환(transformation)연산자(2) (0) | 2018.06.18 |
SPARK 에서의 기본 행동(action) 연산자 및 변환(transformation)연산자(1) (0) | 2018.06.17 |
Spark (2) 기본예제 및 scala (0) | 2018.05.15 |
SPARK(1)-환경 구축 (1) | 2018.05.13 |