티스토리 뷰
기술 면접 대비가 시리즈가 되고 있는거 같습니다 ㅎㅎ
이번에는 Spark 면접 대비 질문답을 정리해보려고 합니다.
출처는 이곳이며, 다른 글과 마찬가지로 조언, 잘못된 점등 말씀해주시면 감사하겠습니다.
1. Apache Spark는 무엇인가요?
: 아파치 스파크는 상용 하드웨어 클러스터에서 실행되는 클러스터 컴퓨팅 프레임워크로서 여러 소스에서 다양한 데이터를 읽고 쓰는 작업을 수행합니다. 스파크에서의 작업은 map과 reduce 작업이 있습니다.
2. Spark는 MapReduce와 어떻게 다르나요? 그리고 Spark는 MapReduce보다 빠른가요?
: 예, 스파크는 맵리듀스보다 빠릅니다. 스파크가 맵리듀스보다 빠른 주요 이유는 다음과 같습니다.
- 스파크에는 긴밀한 결합이 없습니다. 다시말해서 맵후에 반드시 축소해야하는 필수 규칙이 없습니다.
- 스파크는 데이터를 가능한 한 "메모리 내"로 유지하려고 합니다. 맵리듀스에서 중간데이터는 HDFS에 저장되므로 소스에서 데이터를 가져오는데 시간이 걸리지만 스파크는 그렇지 않습니다.
3. Spark의 구조에 대해 설명해주세요. Spark 어플리케이션은 어떻게 작동되나요?
:
- 아파치 스파크의 응용프로그램에는 두가지, 드라이버 프로그램과 작업자 프로그램이 포함됩니다.
- 두 클러스터 노드와 상호작용 하기 위해 클러스터 워커 있어야 합니다. spark context는 클러스터 매니저의 도움으로 워커 노드와 연락합니다.
- Spark Context는 마스터와 같고 Spark 워커는 slave와 같습니다.
- 워커는 작업을 실행하기 위한 실행자(excutor)를 유지합니다. 의존성 또는 인수를 전달해야 하는 경우에는 Spark Context가 이것을 처리합니다. RDD는 Spark Excutor에 상주합니다.
- 스레드를 사용하여 스파크 응용프로그램을 로컬로 실행할수도 있으며 분산환경을 활용하려면 기타 스토리지 시스템을 활용할수도 있습니다.
4. RDD는 무엇인가요?
: RDD는 Resilient Distributed Dataset으로 많은
5. 맵리듀스에서 colaesce()와 repartition()은 무엇인가요?
: 두가지 모두 RDD의 파티션수를 수정하는데 사용되지만, colaesce()는 전체 셔플을 하지 않습니다.
1000개의 파티션에서 100개의 파티션으로 이동하면 셔플이 없으며 대신 100개의 새 파티션 각각이 현재 파티션 10개를 차지하며 셔플이 필요하지 않습니다.
Repartition은 셔플과 통합을 수행합니다. 다시 파티션하면서 해시를 통해 데이터가 분산되어 지정된 수의 파티션이 생성됩니다.
6. RDD를 생성하면서 파티션의 설정은 어떻게 하나요?
: sc.textFile을 사용하거나 다음과 같이 병렬화 기능을 사용하여 RDD를 작성하는 동안 파티션수를 지정할 수 있습니다.
val rdd = sc.parallelize(data, 4)
val data = sc.textFile(route, 4)
7. actions와 transformations는 무엇인가요?
: 변환은 기존 RDD에서 새 RDD를 작성하며 이러한 변환은 lazy하게 실행되어서 action을 호출할 때까지 실행되지 않습니다.
transformation의 예시로 map, filter, flatMap등이 있으며,
actions는 RDD의 결과를 리턴합니다. 예시로는 reduce(), count(), collect()등이 있습니다.
8. lazy Evaluation은 무엇인가요?
: Transformation함수를 기존 RDD에서 작성하고 Action함수를 호출하지 않으면 실질적으로 연산 작업이 이루어 지지 않습니다.
이런 경우 스파크에서 Transformation간의 관계를 통해 최적의 수행을 할 수 있도록 합니다.
9. actions와 transformations의 함수는 무엇이 있나요?
: 7번과 중복
10. cache()와 persist()는 무엇인가요?
: RDD가 여러번 사용되거나 RDD가 복잡한 과정을 거쳐서 생성되는 경우에 RDD를 메모리에 저장하고 싶은 경우가 있습니다.
이런 경우네 cache와 persist가 활용될 수 있습니다.
cache와 persist함수를 사용하여 RDD를 지속시킬수 있습니다. action을 통해 처음 계산될 때 노드의 메모리에 저장됩니다.
persist()를 호출할 때 디스크나 메모리 또는 둘다에 RDD를 저장하도록 지정할 수 있습니다. 직렬화된 형식인지 아닌지등도 설정할 수 있습니다.
cache()는 persist()와 유사하지만 스토리지 레벨이 메모리로만 설정됩니다.
11. Accumulators는 무엇인가요?
: 누산기는 쓰기 전용 변수이며 한번 초기화되어 워커에게 전송됩니다. 이 워커는 작성된 논리를 기반으로 업데이트하고 집계하거나 처리할 드라이버로 다시 보냅니다.
드라이버만이 누산기의 값에 접근할수 있으며, 워커는 쓰기만 가능합니다.
12. Broadcast Variable은 무엇인가요?
: 읽기 전용 공유변수를 말합니다. 서로 다른 단계에서 워커에서 여러번 사용해야할 데이터 셋이 있다고 한다면 모든 변수를 드라이버로부터 워커에게 공유하고 읽을수 있습니다.
13. 스파크 작업중에 개발자가 할수 있는 최적화는 무엇이 있나요?
: 스파크는 메모리의 사용량이 많습니다.
먼저, 얼마나 스파크가 데이터 로컬리티의 각 단계에서 타임아웃까지 얼만큼 기다릴것인지를 적용합니다.
데이터 셋에 필터를 가능한 먼저 적용합니다. caching의 경우에는 스토리지 레벨을 적절하게 결정합니다.
스파크의 파티션 수를 적절히 설정합니다.
14. Spark SQL은 무엇인가요?
: 데이터 집합에서 실행되는 SQL쿼리를 이용하는 구조화된 데이터 처리 모듈입니다.
15. 데이터 프레임이란 무엇인가요?
: 테이블과 비슷하게 열과 행으로 구성된 구조화된 데이터입니다.
16. Hive를 spark SQL에 어떻게 연결할 수 있습니까?
: hive-site.xml파일을 스파크의 conf디렉토리에 배치합니다.
그런 다음 스파크 세션 객체를 사용하여 데이터 프레임을 구성할수 있습니다.
17. GraphX란 무엇인가요?
: 그래프 형식의 데이터를 다루기 위한 Graph computation입니다.
스파크와 마찬가지로 fault tolerance, scaling가 있으며 그래프 알고리즘들을 보유합니다.
19. 스파크 스트리밍은 무엇인가요?
: 데이터가 지속적으로 입력되는 빠른 데이터 처리를 위해 사용 가능한 것입니다. Kafka, kinesis등에서 데이터의 입력이 들어올 수 있으며, 데이터를 대상으로 푸시하기 전에 데이터에 대한 다양한 처리를 핤 있습니다.
20. 슬라이딩 윈도우는 무엇인가요?
: 스파크 스트리밍에서는 배치 간격을 지정해야합니다. 예를 들어 배치간격은 10초로 설정하면 스파크는 마지막10초동안 얻은 데이터, 즉 마지마 "배치 간격" 시간을 처리합니다.
그러나 슬라이딩 윈도우를 사용하면 처리해야할 "마지막 배치 수"를 지정할 수 있습니다.
추가 참고 자료 링크
1. 하용호님 RDD설명 자료. https://www.slideshare.net/yongho/rdd-paper-review
'개발 일반' 카테고리의 다른 글
통계 관련 기술면접 대비 (1) | 2019.10.17 |
---|---|
Hadoop 기술 면접 대비 (1) | 2019.10.08 |
Java 기술 면접 대비 (0) | 2019.10.03 |
Python 기술 면접 대비 (0) | 2019.10.03 |
[세팅] pycharm 메모리 설정 하기 (0) | 2019.02.11 |