* 이 포스팅은 'Apache Spark 와 Python으로 빅데이터 다루기' 강의 복습용으로 작성하였습니다.
Spark 기본 사항
- Spark란
- 대용량 데이터 처리를 위한 엔진
- 스파크 스크립트 : 파이썬, 자바, 스칼라에서 작동
- 하둡 맵리듀스보다 빠르다는 장점
- 핵심 : 복구 가능한 분산 데이터 세트
- RDD : 스파크의 기본 데이터 구조, 큰 데이터 세트
- 분산, 변형하는 성질
- 여러 클러스터에 나눌 수 있음
- 개인 컴퓨터에서도 작동 가능
- 특정 노드에 이상이 생겨도 자동적으로 작동 가능
- 분산, 변형하는 성질
RDD 인터페이스
- 아이템이 2개인 키-값쌍 RDD : rdd.map(lambda ~)
- 키 : 기존 rdd
- 값 : 원하는 쌍
- 주요 함수
- reduceByKey : 키가 같은 값끼리 모두 합치는 함수
- groupByKey : 공통된 키를 가지는 값의 목록을 구하는 함수
- sortByKey : 같은 키끼리 분류
- keys(), values() : 키만/값만 분류하기
- join, rightOuterJoin 등 : 2개의 키-값 RDD를 하나의 RDD로 합치는 함수핵심 : 키를 수정하지 않을 때는 맵, 플랫맵 대신 mapValues, flatmapValues 사용
- 연산에 들어가는 모든 요소가 값으로 변형된다
- map, flatmap보다 적은 부하량
- 키를 직접 다룰 수 없음
- 주요 변환 함수
- map : 다른 데이터로 변환. 각 원소와 일대일로 대응. 기존 데이터와 규모 동일
- flatmap : 다른 데이터로 변환. 일대다로 대응. 기존 데이터보다 크거나 작을 수 있음
- map vs. flatmap
- map : 각 원소를 새 원소로 변환. upper 등
- 기존 RDD 원소와 새 RDD 원소와 일대일 대응
- 크기를 줄여주지 못한다
- flatmap : 각 원소를 여러 항목으로 나누어 원소가 늘어날 수 있음. split 등
- map : 각 원소를 새 원소로 변환. upper 등
- map vs. flatmap
- filter : 필요없는 정보 필터링. 검색 기능과 유사
- T/F만 받으며, T인 경우에만 통과
- reduceByKey(lambda x, y: min(x,y)) : x,y 중에서 작은 것만 남김 > 결과적으로는 가장 작은 값 1개만 남게 된다
- list로 나타내기 위해선 collect() 사용
- distinct : 중복 삭제
- sample : 데이터 일부 불러내기. 버그없이 실험 시 유용
- union, intersection 등 : 두 RDD 간 사용하는 연산
- 주요 생성 함수
- parallelize : RDD 생성에 사용할 고정 데이터 불러오기(작은 용량)
- textFile : 파일 데이터 불러오기. s3n, hdfs도 사용 가능
- HiveContext : 하이브 콘텍스트
- JDBC, Cassandra, HBase, Elastisearch 등
- 주요 액션 함수
- collect : 원하는 값만 출력
- countfByValue : 특정 값의 발생 횟수
- take, top : 최종 데이터에서 일부만 불러냄
- reduce : 특정한 연산 수행, 하나의 RDD로 합쳐줌
ERROR ShutdownHookManager 트러블 슈팅
실습 진행 중, 아래와 같은 메시지가 떴습니다.
ERROR ShutdownHookManager: Exception while deleting Spark temp dir : ~~~~
프로그램이 돌아가는 데에는 문제가 없었지만, 결과값 밑에 에러가 뜨니까 보기 어렵더라구요.
결과적으로 근본적인 문제 해결에는 실패했습니다만, 두 가지 방법을 시도해보았습니다.
log4j.properties 파일 수정
아래 포스팅을 참고하여 파일을 수정했습니다.
[Spark] Exception while deleting Spark temp dir 에러 해결
Python에서 Spark을 실행할 때, 아래 에러가 나타났다. 살펴보니 Spark를 실행하는 동안 %Temp% 폴더에 폴더를 생성하는데, 그것을 지울 수 없다는 내용이다. 💡 우선 방법은 있다. %SPARK_HOME%\conf 폴더에
deep-flame.tistory.com
> 결과 : 파일 수정 직후에 돌렸을 때는 에러가 뜨지 않았으나, 프롬프트를 껐다가 다시 실행하면 동일한 에러가 뜸
tmp 폴더에 권한 부여
스택오버플로우를 참고하여 cmd에서 winutils.exe chmod 777 \tmp를 실행하여 권한을 부여하였습니다.
Exception while deleting Spark temp dir in Windows 7 64 bit
I am trying to run unit test of spark job in windows 7 64 bit. I have HADOOP_HOME=D:/winutils winutils path= D:/winutils/bin/winutils.exe I ran below commands: winutils ls \tmp\hive winutils c...
stackoverflow.com
> 결과 : 마찬가지로 파일 수정 직후에는 에러가 뜨지 않으나, 프롬프트를 껐다가 다시 실행하면 동일한 에러가 뜸
번외로 재부팅 후 실행하면 처음 돌릴 때만 에러가 뜨지 않고, 2번째부터는 동일한 에러가 뜹니다.
메모리 문제로 에러가 나오는 것 같은데, 아직까진 명확한 해결 방법을 모르겠어요....
'Data > spark' 카테고리의 다른 글
[Udemy] Spark Streaming, 구조적 스트리밍 (1) | 2024.07.05 |
---|---|
[Udemy] Spark ML을 사용한 머신러닝 (0) | 2024.07.02 |
[Udemy] Spark 프로그램의 고급 예제 (1) | 2024.06.15 |
[Udemy] SparkSQL, DataFrames 및 Datasets (0) | 2024.06.11 |
윈도우 pyspark setting 트러블 슈팅 (0) | 2024.05.06 |