강의 요약: EE542 Lecture 10 - Uses of Cloud
이번 강의에서는 클라우드 컴퓨팅의 다양한 활용 사례와 핵심 기술을 다루었다. Google, Facebook, Yahoo! 등 주요 IT 기업의 클라우드 활용, Hadoop과 MapReduce 프로그래밍 모델, 데이터 분석 및 클라우드 기반 애플리케이션 개발 사례가 주요 주제였다.
주요 내용
1. 클라우드 컴퓨팅의 산업적 활용
- Google 활용 사례:
- 인덱스 구축: Google Search를 위한 인덱스 구축.
- 기사 클러스터링: Google News에서 기사 클러스터링.
- 통계적 기계 번역: 다양한 언어 간의 번역을 위한 기계 학습 기술 사용.
- Yahoo!의 활용 사례:
- 인덱스 구축: Yahoo! Search를 위한 인덱스 구축.
- 스팸 탐지: Yahoo! Mail에서 스팸 탐지 기능 구현.
- Facebook의 활용 사례:
- 데이터 마이닝: 사용자 데이터를 분석하여 인사이트 도출.
- 광고 최적화: 광고의 효율성을 높이기 위한 데이터 분석.
- 스팸 탐지 연구: 사용자 경험을 개선하기 위한 스팸 탐지 연구 진행.
2. 연구 분야에서의 활용
• Wikipedia 갈등 분석 (PARC).
• 자연어 처리 (CMU).
• 기후 시뮬레이션 (Washington).
• 생물정보학 (Maryland).
• 입자 물리학 (Nebraska).
• 암 연구: 대량의 데이터를 처리하기 위한 클라우드 환경의 필요성 강조
3. 클라우드 환경의 목표
• 확장성: 대규모 데이터를 빠르게 처리.
• 예: 단일 노드로 100TB 스캔 시 24일 소요 → 1000 노드 클러스터로 35분에 처리.
• 비용 효율성:
• 저렴한 범용 하드웨어 사용.
• 자동 장애 복구와 관리자 부담 감소.
4. 클라우드 환경의 도전 과제
• 저렴한 노드의 높은 실패율:
• 1000 노드의 평균 고장 주기(MTBF) = 하루.
• 해결책: 시스템 수준의 내결함성 설계.
• 낮은 네트워크 대역폭:
• 해결책: 데이터를 계산 지점으로 이동.
• 분산 시스템 프로그래밍의 복잡성:
• 해결책: MapReduce와 같은 제한된 프로그래밍 모델 활용.
5. Hadoop의 개념과 활용
• Hadoop:
• 분산 데이터 저장 및 처리 프레임워크.
• Apache 오픈소스 프로젝트로 개발.
• MapReduce 프로그래밍 모델:
• 데이터 집약적 컴퓨팅을 위한 모델.
- MapReduce의 정의:
- 데이터 집약적 컴퓨팅을 위한 프로그래밍 모델: 저렴한 클러스터에서 실행됨.
- 구글에 의해 개발됨: 하루에 20PB의 데이터를 처리함.
- Apache 하둡 프로젝트에 의해 대중화됨: Yahoo!, Facebook, Amazon 등에서 사용됨.
- MapReduce의 데이터 유형:
- 키-값 레코드: 데이터는 키-값 쌍으로 구성됨.
- Map 및 Reduce 함수:
- Map 함수: (Kin, Vin) → list(Kinter, Vinter)
- Reduce 함수: (Kinter, list(Vinter)) → list(Kout, Vout)
• 주요 사례:
• Yahoo!: 10,000 코어 클러스터에서 웹 검색 데이터 처리.
• Facebook: 100PB 이상의 데이터를 Hadoop 클러스터에서 호스팅.
• AMAZON, NETFLIX: 대량의 데이터를 처리하기 위해 하둡을 사용함.
• New York Times: 1851-1922년의 기사에서 PDF를 동적으로 생성하고, 하둡과 MapReduce를 사용하여 4TB의 TIFF를 24시간 내에 1100만 개의 PDF 기사로 변환함.
• 주요 응용 프로그램:
• 광고: 사용자 행동을 분석하여 추천 생성.
• 검색: 관련 문서 그룹화.
• 보안: 비정상적인 패턴 검색.
6. MapReduce 사용 사례
• Word Count:
• 텍스트 데이터에서 단어 빈도 계산.
# Example: Word Count
def mapper(line):
foreach word in line.split():
output(word, 1)
def reducer(key, values):
output(key, sum(values))
# An Optimization: The Combiner
# Local reduce function for repeated keys produced by same map
# For associative ops. like sum, count, max
# Decreases amount of intermediate data
# Example: local counting for Word Count:
def combiner(key, values):
output(key, sum(values))
• 정렬(Sort):
• 키를 기준으로 데이터 정렬.
• Inverted Index:
• 단어가 포함된 파일 목록 생성.
• 가장 많이 사용된 단어 찾기:
• 여러 파일에서 가장 자주 등장하는 단어 100개 선택.
# 1. Search
# Input: (lineNumber, line) records
# Output: lines matching a given pattern
# Map:
if(line matches pattern):
output(line)
# Reduce: identity function
# - Alternative: no reducer (map-only job)
# 2. Sort
# Input: (key, value) records
# Output: same records, sorted by key
# Map: identity function
# Reduce: identify function
# Trick: Pick partitioningfunction p such thatk1 < k2 => p(k1) < p(k2)
# 3. Inverted Index
# Input: (filename, text) records
# Output: list of files containing each word
# Map:
foreach word in text.split():
output(word, filename)
# Combine: uniquify filenames for each word
#Reduce:
def reduce(word, filenames):
output(word,sort(filenames))
# 4. Most Popular Words
# Input: (filename, text) records
# Output: the 100 words occurring in most files
# Two-stage solution:
# - Job 1:
# Create inverted index, giving (word, list(file)) records
# - Job 2:
# Map each (word, list(file)) to (count, word)
# Sort these records by count as in sort job
# Optimizations:
# - Map to (word, 1) instead of (word, file) in Job 1
# - Estimate count distribution in advance by sampling
# 5. Numerical Integration
# Input: (start, end) records for sub-ranges to integrate
# Can implement using custom InputFormat
# Output: integral of f(x) over entire range
# Map:
def map(start, end):
sum = 0
for(x = start; x < end; x += step):
sum += f(x) * step
output(“”, sum)
# Reduce:
def reduce(key, values):
output(key, sum(values))
(Word Count using Hadoop)
# Mapper.py
import sys
for line in sys.stdin:
for word in line.split():
print(word.lower() + "\t" + 1)
# Reducer.py
import sys
counts = {}
for line in sys.stdin:
word, count = line.split("\t")
dict[word] = dict.get(word, 0) + int(count)
for word, count in counts:
print(word.lower() + "\t" + 1)
7. 미래 클라우드 활용
- 데이터 수집 및 처리:
- 데이터 병합: 다양한 출처의 데이터를 통합함.
- 데이터 분할: 대량의 데이터를 효율적으로 처리하기 위해 분할함.
- 데이터 분석:
- 변환: 데이터를 분석하여 유용한 정보로 변환함.
- 확장 및 축소: 데이터의 범위를 조정하여 분석의 효율성을 높임.
- 패턴 매칭: 데이터에서 유의미한 패턴을 찾아냄.
- 하드웨어 가속:
- 고성능 데이터 처리: 대량의 데이터를 신속하게 처리함.
- 전력 효율적인 데이터 처리: 에너지를 절약하면서 데이터 처리 성능을 유지함.
파이썬을 통한 데이터 분석
- 파이썬 패키지:
- NumPy/SciPy: 수치 및 과학적 함수 라이브러리.
- Numba: JIT 컴파일을 지원하는 파이썬 컴파일러.
- Pandas: 고성능 데이터 구조 및 데이터 분석 도구.
- ScientificPython: 과학적 컴퓨팅 모듈의 모음.
- 파이썬의 장점:
- 오픈 소스: MATLAB보다 유리함.
- 쉬운 문법: R보다 사용하기 쉬움.
- HW 가속기 라이브러리: 클라우드 환경에서 파이썬을 선호함.
요약
이 강의는 클라우드 컴퓨팅이 IT 산업과 연구 분야에서 어떻게 혁신을 이끌고 있는지 설명한다. Hadoop과 MapReduce는 대규모 데이터 처리의 핵심 도구로 자리 잡았으며, 클라우드 인프라는 데이터 분석 및 애플리케이션 개발의 기반을 제공한다.
키워드
클라우드 컴퓨팅, Hadoop, MapReduce, 데이터 분석, 확장성, 내결함성, Google, Facebook, 데이터 마이닝, 분산 처리
'Learn > '24_Fall_(EE542) Internet&Cloud Computin' 카테고리의 다른 글
(Lecture 12) Logic, Memory, and Reconfigurable Hardware Accelerators (0) | 2025.01.08 |
---|---|
(Lecture 11) Hardware Acceleration in Cloud (0) | 2025.01.08 |
(Lecture 9) Cloud Computing (0) | 2025.01.08 |
(Lecture 8) Single Processor to Cloud (0) | 2025.01.08 |
(Lecture 7) Computer Networks for Cloud (0) | 2025.01.08 |