Data/spark

[Udemy] Spark 기본 사항 및 RDD 인터페이스

sennysideup 2024. 5. 21. 21:05
반응형

* 이 포스팅은 'Apache Spark 와 Python으로 빅데이터 다루기' 강의 복습용으로 작성하였습니다.

 

Spark 기본 사항

  • Spark란
    • 대용량 데이터 처리를 위한 엔진
    • 스파크 스크립트 : 파이썬, 자바, 스칼라에서 작동
    • 하둡 맵리듀스보다 빠르다는 장점
    • 핵심 : 복구 가능한 분산 데이터 세트
  • RDD : 스파크의 기본 데이터 구조, 큰 데이터 세트
    • 분산, 변형하는 성질
      • 여러 클러스터에 나눌 수 있음
      • 개인 컴퓨터에서도 작동 가능
      • 특정 노드에 이상이 생겨도 자동적으로 작동 가능

 

RDD 인터페이스

  1. 아이템이 2개인 키-값쌍 RDD : rdd.map(lambda ~)
    1. 키 : 기존 rdd
    2. 값 : 원하는 쌍
    3. 주요 함수
      1. reduceByKey : 키가 같은 값끼리 모두 합치는 함수
      2. groupByKey : 공통된 키를 가지는 값의 목록을 구하는 함수
      3. sortByKey : 같은 키끼리 분류
      4. keys(), values() : 키만/값만 분류하기
      5. join, rightOuterJoin 등 : 2개의 키-값 RDD를 하나의 RDD로 합치는 함수핵심 : 키를 수정하지 않을 때는 맵, 플랫맵 대신 mapValues, flatmapValues 사용
        1. 연산에 들어가는 모든 요소가 값으로 변형된다
        2. map, flatmap보다 적은 부하량
        3. 키를 직접 다룰 수 없음
  2. 주요 변환 함수
    1. map : 다른 데이터로 변환. 각 원소와 일대일로 대응. 기존 데이터와 규모 동일
    2. flatmap : 다른 데이터로 변환. 일대다로 대응. 기존 데이터보다 크거나 작을 수 있음
      • map vs. flatmap
        • map : 각 원소를 새 원소로 변환. upper 등
          • 기존 RDD 원소와 새 RDD 원소와 일대일 대응
          • 크기를 줄여주지 못한다
        • flatmap : 각 원소를 여러 항목으로 나누어 원소가 늘어날 수 있음. split 등
    3. filter : 필요없는 정보 필터링. 검색 기능과 유사
      • T/F만 받으며, T인 경우에만 통과
      • reduceByKey(lambda x, y: min(x,y)) : x,y 중에서 작은 것만 남김 > 결과적으로는 가장 작은 값 1개만 남게 된다
      • list로 나타내기 위해선 collect() 사용
    4. distinct : 중복 삭제
    5. sample : 데이터 일부 불러내기. 버그없이 실험 시 유용
    6. union, intersection 등 : 두 RDD 간 사용하는 연산
  3. 주요 생성 함수
    1. parallelize : RDD 생성에 사용할 고정 데이터 불러오기(작은 용량)
    2. textFile : 파일 데이터 불러오기. s3n, hdfs도 사용 가능
    3. HiveContext : 하이브 콘텍스트
    4. JDBC, Cassandra, HBase, Elastisearch 등
  4. 주요 액션 함수
    1. collect : 원하는 값만 출력
    2. countfByValue : 특정 값의 발생 횟수
    3. take, top : 최종 데이터에서 일부만 불러냄
    4. 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번째부터는 동일한 에러가 뜹니다.

메모리 문제로 에러가 나오는 것 같은데, 아직까진 명확한 해결 방법을 모르겠어요....