출처 : http://www.windowsazure.com/en-us/develop/net/tutorials/hadoop-marketplace/
이 샘플은 Windows Azure 상에서 2 가지 방법으로 Apache Hadoop 기반의 클러스터에서 MapReduce 프로그램을 어떻게 수행하는지를 알아보고, 클러스터에 수집된 데이터를 Excel 에서 분석하는 방법에 대해서 알아보는 것이다.
실제 데이터 분석을 처리하는 것은 자바로 구현된 MapReduce 프로그램이며, 이 프로그램을 수행하는 방법은 아래와 같이 두 가지 방법을 사용할 수 있다.
Hadoop jar 파일 – “Create Job UI” 에서 jar 파일을 이용해서 수행한다.
Pig 에서 스크립트 – Pig 에서 제공되는 Fluent API 를 이용하는 자바스크립트를 이용해서 수행한다.
샘플에서 사용할 데이터는 Azure Marketplace 를 통해서 데이터, 이미지, 주요 상업 데이터 제공자들로부터 실 시간 웹 서비스 및 신뢰할 수 있는 공공 데이터들을 수집하게 된다. 이렇게 수집된 데이터는 인구 통계학적, 환경, 금융, 소매, 스포츠 데이터를 포함한 데이터들의 다양한 구매 및 소비를 단순화하는 것이다. 이렇게 수집된 데이터는 Azure에서 Hadoop 으로 업로드 되고, Excel 을 이용해서 데이터를 분석한 결과를 조회하는 방식이다.
MS 에서 제공하는 빅 데이터의 핵심은 BI (Business Intelligence) 의 구성 요소와 Hadoop 의 통합이라고 볼 수 있다. MS BI 와 Hadoop 과의 통합의 가장 좋은 사례는 Hadoop 클러스터의 Data warehouse 프레임워크에 Excel 로 접속이 가능하다는 점이다. 이 샘플에서는 Hive ODBC 드라이버를 통해서 Excel에서 Hadoop 클러스터에 존재하는 데이터에 접근하는 방법에 대해서 알아보도록 한다.
이 샘플을 통해서 확인하고 배울 수 있는 내용은 다음과 같다.
Hadoop jar 파일을 이용한 자바 MapReduce 를 실행하는 기본적인 방법
HDFS 클러스터에 입력을 위한 파일의 업로드와 HDFS 클러스터에 출력된 파일을 읽는 방법
상호작용이 가능한 콘솔인 Pig 상의 Fluent API를 이용해서 MapReduce 스크립트를 실행하는 방법
상호작용이 가능한 콘솔을 이용하여 Azure 클러스터에서 DataMarket 의 데이터를 Hadoop으로 입력하는 방법
Azure 클러스터 상의 Hadoop 에서 저장된 데이터를 Excel 에서 조회하는 방법
Set up and configuration
이 샘플 수행을 위해서는 Azure 상의 Hadoop 에 접근할 수 있고, 작업을 위한 클러스터를 생성할 수 있는 계정이 필요하다. 이 부분에 대한 정보는 여기 내용 들 중에서 “Getting started with Microsoft Hadoop on Windows Azure” 섹션을 참조하기 바란다.
How to run a basic Java MapReduce program using a Hadoop jar file with the Create Job UI
Hadoop Portal 계정 페이지에서 “Your Tasks” 섹션의 “Create Job” 아이콘을 클릭하면 작업을 생성하는 화면이 아래와 같이 나타난다.MapReduce 프로그램을 구동시키기 위해서는 Job Name, Jar file 을 설정하고 MapReduce 프로그램이 수행 시점에 필요할 수 있는 파라미터가 존재하면 추가하면 된다. 그리고 입력으로 사용될 파일과 코드 파일의 위치를 서정하고 출력이 처리될 경로를 지정하면 된다.
간략하게 MapReduce 작업을 실행하기 위해서 인터페이스를 어떻게 사용하여야 하는지는 계정 페이지의 “Manage your account” 섹션에서 “Samples” 아이콘을 클릭하고 “Pi Estimate” 샘플을 보면 된다.
PI Estimate 샘플 페이지는 어플리케이션 정보와 Java MapReduce 프로그램을 위한 다운로드와 Azure 상의 Hadoop에서 필요로 하는 jar 파일을 포함하는 파일들을 배포하기 위한 어플리케이션에 대한 정보를 제공하고 있다. 클러스터에 파일을 배포하기 위해서는 오른쪽에 존재하는 “Deploy to your cluster” 버튼을 누르면 된다.
위의 그림은 “Create Job” 페이지에서 예제를 위해서 구성한 정보들을 보여주는 것이다. 파라미터는 기본적으로 “pi 16 10000000” 로 설정되어 있다. 첫 번째 숫자는 몇 개의 Map 을 생성할 것인지를 의미하고, 두 번째 숫자는 각 Map 당 얼마나 많은 샘플들을 이용할 것인지를 의미한다. 따라서 1600만 램덤 숫자를 기반으로 PI 를 측정하라는 명령이라고 생각하면 된다. “Final Command” 는 지정한 파라미터 값들을 기준으로 자동으로 구성되며 지정된 jar 파일을 기준으로 최종 Hadoop 실행 명령을 나타내는 것이다.
Hadoop 클러스터에서 프로그램을 구동하기 위해서는 “Execute Job” 버튼을 누르면 된다. 실행이 되면 작업의 상태가 표시되고, 구동이 완료되면 “Completed Successfully” 로 작업의 상태가 변경된다. 그리고 “Output” 섹션에 처리 결과가 표시된다.
How to run a javascript MapReduce script using the Interactive Console
대화형 콘솔을 제공하는 Pig 기반에서 Fluent API 를 사용하여 MapReduce 작업을 수행하는 방법을 알아보도록 하자. 알아볼 샘플은 입력된 데이터 파일의 단어 개수를 파악하는 것으로 클러스터에 업 로드한 파일을 사용한다. 그러나 샘플은 클러스터에 업 로드 된 스크립트 파일이 반드시 필요한 것은 아니다. 일단 대화형 콘솔을 이용해서 파일을 HDFS에 올리는 것부터 알아보도록 하자.우선 클러스터에 올릴 대상인 WordCount.js 스크립트 파일을 여기를 통해서 로컬 PC 로 다운로드 하도록 한다. 그리고 입력으로 사용할 데이터 파일을 여기에서 다운로드 하도록 한다. 입력으로 사용할 파일은 텍스트 기반의 어떤 파일이든 상관없다.
대화형 Javascript 콘솔을 얻기 위해서 계정 페이지로 다시 이동하여 “Your Cluster” 섹션에서 “Interactive Console” 아이콘을 클릭하면 Interactive Javascript Console 로 이동하게 된다.
스크립트 파일을 클러스터로 업 로드 하기 위해서는 업 로드 명령인 fs.put() 을 콘솔에서 입력하면 된다. 그럼 아래와 같은 화면이 나타나고, 여기에 다운로드 했던 파일을 선택하고 클러스터 상의 업 로드 대상 경로를 지정하면 된다.
이런 과정을 입력으로 사용할 데이터 파일도 동일하도록 수행한다. 업 로드 과정이 모두 완료 되었으면 콘솔 창에서 아래와 같은 명령을 지정하여 MapReduce 프로그램을 실행한다.
js> pig.from(“/example/data/davinci.txt”).mapReduce(“wordcount.js”, “word, count:long”).orderBy(“count DESC”).take(10).to(“DaVinciTop10Words”)
작업의 처리 과정에 대해서 보기 위해서는 “View log”를 클릭하면 된다. 로그 상에는 작업이 실패할 경우에 검증 정보도 볼 수 있다. 작업이 완료된 후에 “DaVinciTop10Words” 라는 디렉터리의 결과를 보기 위해서는 다음과 같은 명령을 수행하면 된다.
js> file = fs.read(“DaVinciTop10Words”)
How to import data with the Hive Interactive Console from DataMarket
Windows Azure Marketplace 페이지를 열고 Live ID 로 로그인하고 “My Account” 탭에서 계정 등록에서 등록과정을 처리하도록 한다.
Account Key 가 기본적으로 설정되어 있다. 이 키는 어플리케이션이 Azure Marketplace Dataset 에 등록하는데 필요한 것이므로 중요한 정보이다. 여기서 화면의 상단에 존재하는 “Data” 를 클릭하고 검색 항목에 “crime”이라고 입력한 후 검색을 처리한다.
검색이 처리가 되면 위의 화면과 같이 검색된 정보들이 보여진다. 검색된 내용들 중에서 위의 그림에서와 같이 “2006 – 2008 Crime in the United States (Data.gov)”를 선택하면 아래의 화면과 같이 “Subscription” 항목이 존재하고 비용이 들지 않는 것을 볼 수 있다. “Subscription”을 클릭하고 등록과정을 처리하도록 한다.
이제 등록이 완료되면 메뉴 페이지가 보인다. 거기에서 “Explore this Dataset” 버튼을 클릭하면 아래와 같이 질의를 실행할 수 있는 화면이 나타난다.
다른 파라미터 정보를 입력하지 않고 “Run Query” 버튼을 클릭하면 결과 페이지를 확인할 수 있다. 질의에 사용된 정보는 “Develop” 탭에 보여지므로 이를 복사해 놓도록 한다.
다시 원래의 Hadoop on Azure 페이지로 돌아와서 “Your Cluster” 섹션에서 “Manage Cluster” 아이콘을 클릭하도록 한다.
*** 현재는 DataMarket 과 Set up S3 메뉴가 지원되지 않는 상태이므로 DataMarket 에서 데이터를 가져오는 새로운 방법을 찾아봐야 한다. 따라서 아래의 기능은 현재 검증해 볼 수 없다.
아래와 같이 바뀐 화면에서 Azure DataMarket으로부터 데이터를 가져오기 위해서 “DataMarket” 아이콘을 클릭한다.
DataMarket 에 사용한 계정의 User Name (Live ID), Passkey (Account Key), Query (위에서 복사한 질의 명령), Hive Table Name (임의로 원하는 정보로 샘플에서는 Crime_data) 을 입력하고 “Import Data” 버튼을 누른다.
이제 아래와 같은 처리 과정에 대한 페이지가 나타나게 된다.
데이터를 가져오는 작업이 완료가 되면 계정 페이지로 돌아가서 “Your Cluster” 섹션의 “Interactive Consol” 아이콘을 선택한다. 그리고 콘솔 페이지에서 “Hive”를 선택한다.
그리고 위의 화면에서 아래 쪽에 입력 항목에 다음과 같은 코드를 작성하도록 한다.
create table crime_results as select city, max(violentcrime)as maxviolentcrime from crime_datagroup by city order by maxviolentcrime desc limit 10
그리고 “Evaluate” 버튼을 누르면 처리가 진행되고 결과가 보여지게 된다.
How to connect to and query Hive data in a cluster from Excel
다시 계정 페이지로 돌아와서 “Your Cluster” 섹션의 “Open Ports” 아이콘을 클릭한다. 열린 포트 구성 페이지에서 ODBC Server 항목의 Toggle 을 변경해서 오픈 상태로 변경한다.
다시 계정 페이지로 돌아와서 “Manage your account” 섹션의 “Download” 아이콘을 클릭한다. 그리고 Excel Add-in 을 설치하기 위한 “HiveODBCSetupX64.msi” 를 클릭하여 다운로드 한다. 물론 자기 PC 에 따라서 골라서 선택하도록 한다.
IE 를 사용하는 경우는 아래의 화면과 같이 SmartScreent Filter 팝업이 나타날 수 있다. 이런 경우는 “Run anyway” 옵션을 선택하고 진행하도록 한다.
다운로드된 파일을 실행한 후에 Excel 을 실행하고 “Data” 탭의 메뉴를 보면 “Hive Panel” 메뉴가 생성된 것을 확인할 수 있다. 이 메뉴를 클릭하도록 한다.
왼쪽에 “Hive Query” 패널이 나타나면 “Enter Cluster Details” 버튼을 클릭하도록 한다.
Hadoop on Azure 에서 설정했던 클러스터 정보를 입력하고 Host 는 “localhost” 로 그리고 포트는 위에서 Open 했던 10000 을 지정하고 “Authentication” 섹션에서 계정 정보를 입력하고 “OK” 버튼을 클릭한다.
Hive Query 패널에서 “Select the Hive Object to Query” 콤보 박스에서 “crime_results”를 선택하고 컬럼 섹션에서 “city” 와 “maxviolentcrime”를 선택하고 “HiveQL” 을 클릭한 후에 “select city, maxviolentcrime from crime_results limit 200” 을 입력한 후에 “Execute Query” 버튼을 클릭한다.
이제 작업이 진행되고 지정한 조건과 같이 범죄가 많이 발생한 도시를 기준으로 결과를 볼 수가 있다. 처리 결과를 가시적으로 표현하기 위해서 “Insert” 메뉴에서 “Bar” Chart를 추가하도록 한다. 그럼 아래와 같이 결과 페이지를 구성할 수 있다.
Summary
이 샘플을 통해서 Hadoop on Azure Portal 을 이용해서 MapReduce 작업을 구동시키는 두 가지 방법을 알아 보았다. 하나는 jar 파일을 이용해서 “Create Job” UI 를 이용하여 처리한 것이고, 또 다른 하나는 “Interactive Console”을 통해서 Javascript 를 Pig 라이브러리를 이용한 수행이었다. 그리고 콘솔을 통해서 입력과 처리를 위한 스크립트 및 데이터 파일을 업로드 작업에 대한 것도 확인해 보았다. 마지막에는 Excel Add-in 을 설치하고 ODBC 드라이버를 이용해서 데이터가 저장된 HDFS 클러스터와 연계하는 방법에 대해서도 확인해 보았다.
현재까지는 아주 간단하고 단순한 경우만을 대상으로 Hadoop 이 Azure 상에서 어떻게 운영되고, 작업을 처리하는지를 확인해 본 것 뿐이다. 보다 실제와 가까운 작업을 위해서는 보다 많은 경우와 데이터 처리 부분을 검토해 보아야 한다.
댓글
댓글 쓰기