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에 대한 몇 가지 추가 정보:
- 맵 기능 의 모든 실행은 독립적으로 작동하며 서로 다른 클러스터 시스템을 포함하여 병렬로 실행할 수 있습니다.
- reduce 기능 의 모든 실행은 독립적으로 작동하며 서로 다른 클러스터 시스템을 포함하여 병렬로 실행할 수 있습니다.
- 셔플은 내부적으로 병렬 정렬을 나타내므로 다른 클러스터 시스템에서도 작동할 수 있습니다. 포인트 1-3을 통해 수평적 확장성 원칙을 구현할 수 있습니다 .
- 맵 기능은 일반적으로 데이터가 저장되는 동일한 시스템에서 사용됩니다. 이는 네트워크를 통한 데이터 전송을 줄입니다(데이터 지역성의 원칙).
- MapReduce는 항상 전체 데이터 스캔이며 인덱스가 없습니다. 이는 매우 빠른 응답이 필요한 경우 MapReduce를 제대로 적용할 수 없음을 의미합니다.
3.4 맵리듀스로 효과적으로 해결한 과제의 예
단어 수
고전적인 작업인 단어 수부터 시작하겠습니다. 작업은 다음과 같이 공식화됩니다. 많은 문서 모음이 있습니다. 작업은 말뭉치에서 적어도 한 번 발생하는 각 단어에 대해 말뭉치에서 발생하는 총 횟수를 계산하는 것입니다.
해결책:
방대한 문서 모음이 있으므로 하나의 문서를 MapRreduce 작업에 대한 하나의 입력 레코드로 만듭니다. MapReduce에서는 사용자 정의 함수만 정의할 수 있습니다(파이썬과 유사한 의사 코드 사용).
|
|
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
…
러시아 도시에서 광고를 표시하는 평균 비용을 계산해야 합니다.
해결책:
|
|
지도 기능은 이 항목이 필요한지 확인하고 필요한 경우 필요한 정보(도시 및 결제 금액)만 남깁니다. reduce 함수는 해당 도시의 모든 지불 목록이 주어진 도시에 대한 최종 답을 계산합니다.
GO TO FULL VERSION