CodeGym /행동 /All lectures for KO purposes /빅데이터: 맵리듀스

빅데이터: 맵리듀스

All lectures for KO purposes
레벨 1 , 레슨 897
사용 가능

3.1 빅데이터라는 용어의 출현 연혁

빅 데이터라는 용어는 비교적 최근에 등장했습니다. Google 트렌드는 2011년 이후로 이 문구 사용이 활발하게 증가하기 시작했음을 보여줍니다 .

동시에 게으른 사람 만이 지금 용어를 사용하지 않습니다. 특히 마케팅 담당자가 이 용어를 부적절하게 사용하는 경우가 많습니다. 그렇다면 빅데이터란 과연 무엇일까요? 문제를 체계적으로 기술하고 부각시키기로 하였으므로 개념 정의가 필요하다.

내 연습에서 나는 다른 정의를 만났습니다.

  • 빅데이터는 100GB 이상의 데이터(500GB, 1TB 등 원하는 대로)가 있는 경우입니다.
  • 빅 데이터는 Excel에서 처리할 수 없는 데이터입니다.
  • 빅 데이터는 단일 컴퓨터에서 처리할 수 없는 데이터입니다.

그리고 심지어 이것들:

  • 빅 데이터는 일반적으로 모든 데이터입니다.
  • 빅 데이터는 존재하지 않으며 마케터가 발명했습니다.

Wikipedia의 정의를 고수하겠습니다.

빅 데이터는 컴퓨터 네트워크의 수많은 노드에 걸쳐 지속적으로 성장하고 배포되는 조건에서 효과적인 사람이 인지할 수 있는 결과를 얻기 위해 방대한 양과 상당한 다양성을 지닌 정형 및 비정형 데이터를 처리하기 위한 일련의 접근 방식, 도구 및 방법입니다. 2000년대 후반에 전통적인 데이터베이스 관리 시스템 및 비즈니스 인텔리전스 클래스 솔루션의 대안.

따라서 빅 데이터를 통해 특정 데이터 양이나 데이터 자체가 아니라 정보의 분산 처리가 가능한 처리 방법을 이해할 것입니다. 이러한 방법은 작은 데이터 세트(예: 이 강의 내용)뿐만 아니라 큰 데이터 세트(예: 인터넷의 모든 페이지 콘텐츠)에 적용될 수 있습니다.

다음은 빅 데이터 기술이 필요한 데이터 소스에 대한 몇 가지 예입니다.

  • 인터넷에서 사용자 행동 로그
  • 운송 회사를 위한 자동차의 GPS 신호
  • Large Hadron Collider의 센서에서 가져온 데이터
  • 러시아 주립 도서관의 디지털화된 책
  • 모든 은행 고객의 거래에 대한 정보
  • 대형 소매 체인 등의 모든 구매에 대한 정보

데이터 소스의 수가 빠르게 증가하고 있으며 이는 데이터 처리 기술에 대한 수요가 점점 더 많아지고 있음을 의미합니다.

3.2 빅데이터 원칙

빅 데이터의 정의에 따라 이러한 데이터 작업의 기본 원칙을 공식화할 수 있습니다.

1. 수평적 확장성. 임의로 많은 양의 데이터가 있을 수 있으므로 대용량 데이터를 처리하는 모든 시스템은 확장 가능해야 합니다. 데이터 양이 2배 증가했습니다. 클러스터의 철 양이 2배 증가했고 모든 것이 계속 작동했습니다.

2. 내결함성. 수평적 확장성의 원칙은 클러스터에 많은 시스템이 있을 수 있음을 의미합니다. 예를 들어 Yahoo의 Hadoop 클러스터에는 42,000개 이상의 시스템이 있습니다(이 링크에서 조직 전체의 클러스터 크기를 볼 수 있음). 즉, 이러한 시스템 중 일부는 실패할 수 있습니다. 빅 데이터 관행은 이러한 혼란을 인식하고 심각한 결과 없이 생존해야 합니다.

3. 데이터 지역성. 대규모 분산 시스템에서 데이터는 많은 수의 시스템에 분산됩니다. 데이터가 물리적으로 한 서버에 있고 다른 서버에서 처리되는 경우 데이터 전송 비용이 처리 자체 비용을 초과할 수 있습니다. 따라서 BigData 솔루션을 설계하는 데 가장 중요한 원칙 중 하나는 데이터 지역성의 원칙입니다. 가능하면 데이터를 저장하는 동일한 시스템에서 데이터를 처리합니다.

모든 최신 빅 데이터 도구는 어떤 식으로든 이 세 가지 원칙을 따릅니다. 이를 따르기 위해서는 데이터 개발 도구를 개발하기 위한 몇 가지 방법, 방법 및 패러다임을 제시해야 합니다. 오늘 강의에서 분석할 가장 고전적인 방법 중 하나입니다.

3.3 맵리듀스

MapReduce 는 컴퓨터 클러스터에서 대량의 데이터를 처리하기 위해 Google에서 제안한 분산 데이터 처리 모델입니다. MapReduce는 다음 그림에 잘 설명되어 있습니다.

MapReduce는 데이터가 일부 레코드로 구성되어 있다고 가정합니다. 데이터 처리는 3단계로 이루어집니다.

1. 맵 스테이지 . 이 단계에서 사용자가 정의한 map() 함수를 사용하여 데이터를 전처리합니다. 이 단계의 작업은 데이터를 전처리하고 필터링하는 것입니다. 이 작업은 기능적 프로그래밍 언어의 매핑 작업과 매우 유사합니다. 각 입력 레코드에 사용자 정의 함수가 적용됩니다.

단일 입력 레코드에 적용된 map() 함수는 많은 키-값 쌍을 생성합니다. 설정 - 즉, 하나의 레코드만 반환하거나 아무 것도 반환하지 않거나 여러 키-값 쌍을 반환할 수 있습니다. 키와 값에 무엇이 들어갈지는 사용자에게 달려 있지만 키는 매우 중요한 것입니다. 미래에 하나의 키를 가진 데이터는 축소 기능의 한 인스턴스에 속하기 때문입니다.

2. 스테이지 셔플. 사용자가 눈치 채지 못합니다. 이 단계에서 맵 기능의 출력은 "비닝"됩니다. 각 빈은 맵 단계의 하나의 출력 키에 해당합니다. 앞으로 이러한 바스켓은 reduce를 위한 입력으로 사용됩니다.

3. 스테이지 축소. 셔플 단계에서 생성된 값을 가진 각 "바구니"는 reduce() 함수의 입력이 됩니다.

축소 기능은 사용자가 제공하며 단일 "바구니"에 대한 최종 결과를 계산합니다 . reduce() 함수가 반환한 모든 값의 집합은 MapReduce 작업의 최종 결과입니다.

MapReduce에 대한 몇 가지 추가 정보:

  1. 기능 의 모든 실행은 독립적으로 작동하며 서로 다른 클러스터 시스템을 포함하여 병렬로 실행할 수 있습니다.
  2. reduce 기능 의 모든 실행은 독립적으로 작동하며 서로 다른 클러스터 시스템을 포함하여 병렬로 실행할 수 있습니다.
  3. 셔플은 내부적으로 병렬 정렬을 나타내므로 다른 클러스터 시스템에서도 작동할 수 있습니다. 포인트 1-3을 통해 수평적 확장성 원칙을 구현할 수 있습니다 .
  4. 맵 기능은 일반적으로 데이터가 저장되는 동일한 시스템에서 사용됩니다. 이는 네트워크를 통한 데이터 전송을 줄입니다(데이터 지역성의 원칙).
  5. MapReduce는 항상 전체 데이터 스캔이며 인덱스가 없습니다. 이는 매우 빠른 응답이 필요한 경우 MapReduce를 제대로 적용할 수 없음을 의미합니다.

3.4 맵리듀스로 효과적으로 해결한 과제의 예

단어 수

고전적인 작업인 단어 수부터 시작하겠습니다. 작업은 다음과 같이 공식화됩니다. 많은 문서 모음이 있습니다. 작업은 말뭉치에서 적어도 한 번 발생하는 각 단어에 대해 말뭉치에서 발생하는 총 횟수를 계산하는 것입니다.

해결책:

방대한 문서 모음이 있으므로 하나의 문서를 MapRreduce 작업에 대한 하나의 입력 레코드로 만듭니다. MapReduce에서는 사용자 정의 함수만 정의할 수 있습니다(파이썬과 유사한 의사 코드 사용).

def map(doc): 
for word in doc: 
yield word, 1 
def reduce(word, values): 
yield word, sum(values) 

map 함수는 입력 문서를 쌍(단어, 1) 세트로 바꾸고, 우리를 위해 투명하게 셔플하여 쌍(단어, [1,1,1,1,1,1])으로 바꾸고, 이들의 합계를 줄이고 반환합니다. 단어에 대한 최종 답변 .

광고 시스템 로그 처리

두 번째 예는 Data-Centric Alliance의 실제 사례에서 가져온 것입니다.

작업: 다음 형식의 광고 시스템의 csv-log가 있습니다.

<user_id>,<country>,<city>,<campaign_id>,<creative_id>,<payment></p> 
 
11111,RU,Moscow,2,4,0.3 
22222,RU,Voronezh,2,3,0.2 
13413,UA,Kyiv,4,11,0.7 
… 

러시아 도시에서 광고를 표시하는 평균 비용을 계산해야 합니다.

해결책:

def map(record): 
user_id, country, city, campaign_id, creative_id, payment = record.split(",") 
payment=float(payment) 
if country == "RU": 
yield city, payment 
def reduce(city, payments): 
yield city, sum(payments)/len(payments) 

지도 기능은 이 항목이 필요한지 확인하고 필요한 경우 필요한 정보(도시 및 결제 금액)만 남깁니다. reduce 함수는 해당 도시의 모든 지불 목록이 주어진 도시에 대한 최종 답을 계산합니다.

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION