• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 엔지니어링

  • 해결 여부

    해결됨

안녕하세요, 성능평가에 대해 궁금합니다.

23.11.16 22:31 작성 23.11.16 22:31 수정 조회수 156

1

제가 강의에서 놓친 부분이 있는지 모르겠지만,

제가 만든 빅데이터 클러스터가 잘 만들었는지 아닌지 궁금할 때가 있는데요 !

 

제가 만든 클러스터의 성능평가에 대한 부분은 어떻게 진행해야 하는지 궁금합니다.

답변 2

·

답변을 작성해보세요.

3

안녕하세요 luxmaris16님,

우선 제 강의를 수강해주셔서 감사하고 제가 방금 귀국해서 질문을 제대로 확인했습니다.
해외 중요일정때문에 다소 답변이 늦어진 점 양해부탁드립니다.

1) 본론으로 들어가면, 클러스터 성능 평가는 다양한 케이스가 존재할 수 있으나 단순히 성능 평가보다 좋은 클러스터의 Criteria를 궁금해하실 것 같아서 범용적인 부분부터 짚어볼게요. 일단 인프라 관점으로 durability 가 중요합니다. 가령, 특정 노드에 모종의 이슈가 발견하면, e.g., 하드웨어 전체 클러스터 또는 작업에 영향을 끼칠 수 있으므로 availability 와 fault tolerance 잘 보장되어야 합니다. 전자는 저희가 이론 및 자세한 코드랩을 통해 배운 SPOF 이슈를 해결하기 위해 고가용성을 보장해주며 해결하고 있고, 후자는 Slave 또는 Worker 문제가 감지가 될 경우 재연산을 해주거나 Datanode가 문제가 생길시 Replication 와 같이 HDFS 자체적으로 잘 보장해준다고 보면 됩니다.

2) 다음 연산관점으로 기초하면, 강의에서 강조했다시피 요구되는 데이터의 성질 및 알고리즘 특성을 파악해서 function flow 아키텍쳐를 잘 설계하면서 성능을 좋게 만들 수 있습니다. 가령 데이터가 한쪽으로 몰려있는 Skewed 데이터를 MapReduce에 기본으로 돌린다면 하나의 Reducer에 특정 키가 대량으로 몰리면서 Shuffle이 많이 발생하여 network bottleneck 또는 메모리 이슈가 생길 수 있겠죠? 그래서 단적인 예로 Mapper에서 Local Reducer처럼 즉 미리 연산을 처리해주고 (e.g., combiner) 같은 Reducer에 넘기더라도 많은 부분들이 계산되어있으므로 Shuffle 양이 눈에 띄게 줄면서 성능이 개선될 수 있습니다.
또 하나의 예로 반복적인 iteration을 돌리는데 매번 같은 또는 변화없는 데이터를 불러오는 'join' 작업을 하는 것보다, 그 같은 또는 변화없는 데이터를 캐싱해놓고 반복적인 join 작업을 한다면 성능상 큰 이점을 볼 수 있습니다. 이처럼 풀려는 문제의 요구사항 및 데이터 성질 및 알고리즘을 사전에 잘 분석하여 연산 로직들을 잘 설계하면 전체적인 성능 및 생산성 증대시킬수 있습니다.

3) 마지막으로 여러개의 클러스터를 구성해서 experimental comparison 진행한다면 (보통 논문에서 많이 실험하는 케이스) 정형화된 여러 작업들 (multiple queries) 돌려서 각각 performance, e.g., elapsed time 측정하여 성능을 비교할 수 있습니다. 다시 말해, 다양한 환경을 가정하여 구성한 여러개의 쿼리들을 각각 클러스터에 돌리면 각 쿼리마다 performance 결과값이 나오겠죠? 가령 첫번째 클러스터에서는 network 작업이 많은 쿼리가 다른 클러스터보다 성능이 좋게 나오고 또 다른 쿼리는 trade-off도 발생하여 성능이 떨어질 수도 있겠고요. 이런 식으로 다양한 작업 SET을 돌려서 성능을 비교 측정하는 방법이 Benchmark 시스템을 이용하는 것입니다. 참고로 오래전이지만 저는 독일에서 intel bigdata benchmark 시스템을 만들며 논문을 썼습니다.
추가적으로 논문을 쓸 때와 industry에서 요구되는 성능 지표와 데이터와 알고리즘 성질은 다룰 수 있으니 이 부분은 염두해주시기 바랍니다. 쉬운말로 industry에서 고객을 위해 특정 상황에서만 집중하여 성능을 개선을 요할때도 있는 것처럼요.


끝으로, 모든 개발이 비슷하겠지만 처음부터 구축한 클러스터에 바로 코딩을 해서 작업을 돌린다고 한번에 Dramatic한 성능을 기대하기에는 욕심일 수 있습니다. 우선 첫번째 강조한 가장 필수적인 durability 보장되는 클러스터를 구성한 후에, 저도 항상 유념하는 "Hack it first, optimize it later" 스타일로 계속해서 돌려보면서 어느 부분에서 최적화 할 수 있을지 리소스를 어떻게 튜닝해볼지 고민해보며 위에 나열한 criteria 기반으로 분석하고 개선한다면 자연스럽게 표현하신 '좋은 클러스터를 구축' 하실 있을거라 사료됩니다.

 

답변을 간단 명료하게 드리는게 좋으나 수강생의 입장으로 클러스터의 성능에 대한 범용적인 면을 두루두루 알려드리는게 차후 더 좋을 것 같아 편하게 서술했으니 참고해주시기 바랍니다. 감사합니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.11.18

안녕하세요, luxmaris16님. 빅데이터 클러스터의 성능평가에 대해 궁금하신 것 같네요.

빅데이터 클러스터의 성능평가를 위해 다음과 같은 방법들을 고려할 수 있습니다.
1. 클러스터의 용량 및 성능 지표 확인: 클러스터의 용량과 리소스 사용량, CPU 및 메모리 사용량, 네트워크 성능 등을 확인하여 클러스터의 성능을 평가할 수 있습니다.
2. 벤치마킹: 비슷한 용도로 사용되는 다른 클러스터와 성능 비교를 통해 클러스터의 성능을 평가할 수 있습니다.
3. 실제 데이터를 활용한 실험: 실제 데이터를 사용하여 클러스터의 작동을 확인하고 성능을 평가할 수 있습니다.
4. 로깅 및 모니터링: 클러스터의 동작을 로깅하고 모니터링하여 성능 이슈나 병목 현상을 확인하고 개선할 수 있습니다.

이러한 방법들을 조합하여 빅데이터 클러스터의 성능을 평가하고 개선하는 방법을 찾아보시면 좋을 것 같습니다. 추가로 강의에서 놓친 부분이 있다면 해당 내용을 다시 복습해보시는 것도 도움이 될 수 있습니다. 성공적인 클러스터 운영을 기원합니다!