- 앞 포스팅에서 구축한 라즈베리파이 클러스터로 '에어코리아'에서 제공하는 미세먼지 데이터를 분석 작업을 수행하고, 짧은 수행 시간을 확인하였음
- 이번 포스팅에선 라즈베리파이 클러스터에서 진행한 데이터 분석을 PC에서 Pandas로 같은 분석 작업을 수행하고, 수행 시간을 비교 해보고자 함
이전 포스팅 참고 2024.09.21 - [논문] - 라즈베리파이 클러스터 Spark DataFrame 에어코리아 미세먼지 데이터 분석
1. 실험에 사용 된 PC 사양과 라즈베리파이 사양 비교
- 명확한 실험 환경 설정을 위해, 실험에 사용 된 PC 사양과 라즈베리파이의 사양을 비교할 필요가 있다
- 라즈베리파이5의 비교군으로 사용 될 PC는 Latte Panda Sigma로 소형 PC이며, 내장 GPU를 사용하고 있다
- 데이터 분석에 중요한 사양만 비교하였다
Latte Panda Sigma PC | Raspberry Pi 5 | |
CPU | Intel i5-1340P @4.6GHz | Broadcom BCM2712@2.4GHz |
Memory | 16GB | 8GB |
Storage | 512SSD | 256GB SD card |
Power | DC 12~20V | 5V/5A |
Price | 684$ | 80$ |
2. PC - Pandas 데이터 분석 작업 실행
- Pandas로 Spark DataFrame으로 했던 같은 분석 작업을 수행해보겠다
2.1. Pandas 이슈
- 기존에 있던 2001_2022.csv 파일을 Pandas 데이터 프레임으로 변경하는 과정에서 메모리 사용량 초과로 커널이 재시작 되는 현상이 발생했다
- 때문에 시작부터 진행이 안되는 상황이다
- 혹시 2001_2022.csv 로 하나로 통합 된 파일을 한번에 DF로 변환하려고 해서 커널 재시작 현상이 발생한 걸까 해서
- 통합하기 전의 csv 파일들을 각각 따로 DF로 변환하려고 해봤지만 마찬가지로 커널 재시작 현상이 발생
2.2. 원인 분석
- Python Pandas에서 이런 현상이 발생하는 이유는 Python이 싱글 스레드를 가용하고, in-memory 특성으로 모든 데이터를 메모리에 올려서 사용하기 때문에 빠르다는 장점이 있다
- 하지만 하드웨어의 메모리 리소스 보다 데이터의 크기가 크다면 이렇게 커널이 재시작 되는 현상이 발생한다
- 이를 더욱 상세하게 보기 위해 모니터링 시스템으로 확인하고자 했다
2.2.1. PC 리소스 모니터링 - htop
- PC의 리소스 모니터링을 하기 위해 htop 명령어로 모니터링을 확인했음
- 확인 결과 싱글 스레드를 사용하고, 메모리 사용량이 점점 많아지다, 결국 스왑메모리까지 전부 사용하고 커널 재시작 발생
- 좀 더 명확한 모니터링을 위해 모니터링 시스템을 설치 할 필요가 있었음
2.2.2. 시스템 모니터링을 위한 Promethus, Grafana, node exporter 설치
- 컴퓨터 시스템 모니터링을 하기 위해 Promethus, Grafana, node exporter을 설치하였음
- 자세한 설치 방법은 다음에 다루기로 하고 시계열 그래프로 메모리 사용량을 모니터링 한 결과
- Grafana로 메모리 사용량을 모니터링 한 결과, 메모리 사용량(노란색 라인)이 점점 증가하다 한계치(초록색 라인)에 근접해서 결국 커널 재시작 현상이 발생하여 메모리를 모두 반환한 것을 그래프로 확인하였다
- 그렇다면 라즈베리파이 클러스터는 어떨까?
2.2.3. 라즈베리파이 클러스터 메모리 사용량 모니터링
- 라즈베리파이 클러스터에서도 Promethus, node exporter, Grafana를 설치하고 데이터 분석 작업을 하는 동안 메모리 사용량을 확인 해보았다
- 2~3.5GB 안으로 메모리를 사용하면서 분석 작업을 수행하는 것을 확인하였다
- PC에서 Spark를 실행해도 마찬가지로 메모리 사용량이 적은 것을 확인하였음 (PC에서 Spark을 실행할 때는 단일 노드로 실행 했기 때문에, Spark Standalone으로 설정하여 실행)
- 심지어 단일 라즈베리파이5로도 데이터 분석을 수행한 것을 확인할 수 있었다
- Spark와 Python Pandas의 이러한 메모리 사용량 차이는 여러가지 이유가 있을 수 있는 데,
- Lazy Evaluation, Spark의 In-Memory Computing 방식(메모리 부족 시에 데이터를 디스크로 자동으로 넘기고, 다시 메모리로 가져오기도 함), Tungsten 엔진, Disk Spill & Shuffle Memory Management 등의 이유가 있을 수 있다
2.3. 데이터 분석에 사용되는 데이터 크기 줄이기
- Pandas로 데이터 분석을 하고 Spark와 수행 성능을 비교해야 하는데, 메모리 사용량 문제로 진행이 되지 않았기 때문에 데이터 크기를 줄여서 분석을 하고자 한다
- 2015~2018년의 데이터를 통합해서 약 1.1GB 정도 하는 크기의 데이터를 통합해서 csv파일로 만들었다
- 이제 이 데이터를 Pandas와 Spark으로 분석해서 수행 성능 시간을 비교하고자 한다
3. Pandas와 Spark 데이터 분석 수행 시간 비교
- Pandas로 데이터 분석을 수행한 코드는 다음에 첨부하겠다
3.1. 2001~2022년(약7.1GB) 데이터 분석 수행 성능 비교
- 2001~2022년 데이터 분석 수행 비교군은 단일 라즈베리파이, 라즈베리파이 클러스터, PC Spark, PC Pandas 4가지 비교군을 선정하였다
- Single Raspverry
- 단위는 초(second) 이다
Single Raspberry Pi 5 | Raspberry Pi 5 Cluster | PC Spark | PC Pandas | |
Job 1 | 95.787 | 34.883 | 14.993 | 측정 불가 |
Job 2 | 155.053 | 28.575 | 19.077 | - |
Job 3 | 222.492 | 40.920 | 26.783 | - |
Job 4 | 266.854 | 47.808 | 30.276 | - |
Job 5 | 457.410 | 93.119 | 61.616 | - |
- 이 표를 그래프로 그려보면
- Single Raspberry Pi - Spark 환경에서 데이터를 분석했을 때, 가장 많은 시간이 소요 되었지만 에러나 이슈 없이 데이터 분석 수행을 완료하였음
- Raspberry Pi Cluster - Spark 환경과 PC - Spark 환경에서는 데이터 분석 수행 성능이 1.5~2.3배 차이를 보였다
- PC - Pandas 환경에선 앞에서 다뤘듯이, 메모리 사용량 초과로 데이터 분석이 불가하였다
3.2. 2015~2018년 (약1.1GB) 데이터 분석 수행 시간 비교
Single Raspberry Pi 5 | Raspberry Pi 5 Cluster | PC Spark | PC Pandas | |
Job 1 | 13.566 | 12.893 | 2.035 | 0.324 |
Job 2 | 22.570 | 11.202 | 3.283 | 0.107 |
Job 3 | 30.470 | 12.174 | 4.349 | 0.879 |
Job 4 | 33.582 | 14.609 | 4.808 | 0.43 |
Job 5 | 63.853 | 31.962 | 9.967 | 0.258 |
- 단위: 초
- 2015~2018년 데이터 분석 작업 실행 결과, 2001~2022년 데이터 분석 결과와 다르게
- Single Raspiberry Pi와 Raspberry Pi Cluster와 수행 성능 차이가 크지 않았음을 확인할 수 있었다
- 또한, Raspberry Pi Cluster와 PC - Spark의 차이가 약 3~6.4배 정도 차이로 늘어났다
- 같은 PC에서 Spark와 Pandas로 데이터 분석 작업을 수행 했을 때 Pandas가 최소 4.9배에서 최대 38.6배 우수한 성능을 보였다
4. 데이터 분석 수행 시간 비교 결과
- 데이터의 크기가 작거나 PC의 메모리가 충분한 경우 PC - Pandas 환경의 수행 성능이 제일 좋았기 때문에, 가장 적합함을 확인할 수 있었다
- 특히, 동일한 사양의 PC에서 Pandas와 Spark를 사용했을 때, Pandas가 4.9~38.6배 우수한 성능을 보였다
- 반면, 데이터의 크기가 매우 크거나, 하드웨어의 리소스가 제한된 환경에서는 Pandas에서 메모리 사용량 초과로 커널이 재시작 되는 현상이 발생되었으며, Spark는 단일 라즈베리파이로도 데이터 분석 작업을 완료했기 때문에 Spark를 사용하는 것이 적합함을 보였다
- 또한, 데이터의 크기가 증가함에 따라 1.1GB -> 7.1GB 라즈베리파이 클러스터와 PC - Spark의 성능 차이가 3~6.4배 -> 1.5~2.3배로 감소하는 것을 확인하였다
- 데이터의 크기가 더욱 증가하면 성능 차이가 더 줄어들 것으로 예상할 수 있다
- 이로써, 라즈베리파이 클러스터로도 대용량 데이터 처리가 가능함을 확인할 수 있었다
이러한 분석 작업을 2024년 01~04월에 수행하였고, 기록으로 남겨둔 자료를 통해 블로그를 작성해보았다.
다음 포스팅에선 했던 실험들을 통해 얻은 결과를 논문으로 작성하여 KCC2024(한국종합컴퓨터학술대회)에 투고 하여 ICC 제주에서 논문 발표를 하게 된 것을 포스팅 하겠다.
'논문' 카테고리의 다른 글
2024년 한국종합컴퓨터 학술대회(KCC2024) 논문 발표 후기 (0) | 2024.09.27 |
---|---|
'사물인터넷 환경 저비용 대용량 데이터 분석 시스템 설계 및 성능 비교' 논문 작성 후기 (7) | 2024.09.23 |
라즈베리파이 클러스터 Spark DataFrame 에어코리아 미세먼지 데이터 분석 (1) | 2024.09.21 |