DataScience Lab 박사과정 김희찬 2015-07-17(금) Big Data 처리를 위한 기초 in Big Data Analytics Short Courses Fast Tutorial! DataScience Lab 박사과정 김희찬 2015-07-17(금)
목 차 Hadoop이란? Hadoop Distributed File System MapReduce Framework 실습!
Hadoop이란? 소개 왜 사용하는가? 신뢰가능하고 확장성이 높은 분산처리 컴퓨팅을 위한 오픈소스 소프트웨어 많은 CPU/디스크를 한번에 관리 필요 (Scalable) 가끔 디스크가 망가지더라도 데이터 유지 필요 (Reliable) 몇몇 디스크가 망가지거나 기타 다른 에러가 발생해도 전체 작업은 문제없이 구동되어야함 (Fault-tolerant) 여러 컴퓨터 끼리 데이터를 주고 받기가 간편 (Simple)
Hadoop이란? 분산 처리란? 분산 처리 시스템에서 중요한 것은 크게 두 가지 여러 대의 컴퓨터를 이용하여 어떠한 목적을 달성하기 위한 프로그램을 구동하는 것 컴퓨터 한 대만으로는 부족한 큰 연산량이나 데이터를 처리하기 위함 분산 처리 시스템에서 중요한 것은 크게 두 가지 분산 저장 여러 컴퓨터에 있는 디스크를 하나의 디스크인 것처럼 쓰는 것 분산 처리 여러 컴퓨터의 CPU를 하나의 작업을 위해 적절히 일을 분담하는 것
Hadoop Distributed File System HDFS란? Hadoop 에서 분산 저장을 위해 고안한 데이터 저장 방법 파일을 여러 군데에 나누어 저장해두고 각 파일이 어디있는지 주소를 중심의 컴퓨터가 기억하고 있는 방법 한 디스크가 망가져도 데이터를 잃지 않기 위해 같은 데이터를 다른 곳에도 복제해둠 Namenode 데이터가 어디에 저장되어있는지에 대한 정보를 가진 컴퓨터 Datanode 실제로 데이터를 저장하고 있는 컴퓨터
Hadoop Distributed File System HDFS와 Local Disk의 구분 우분투가 깔려있는 Disk와 HDFS는 분리되어있음 한 컴퓨터의 Disk의 일부를 HDFS에 사용하도록 나누어둔 것 HDFS 전체는 여러 대의 컴퓨터의 Disk의 일부를 이용하는 것! 즉 HDFS는 가상의 하나의 큰 Disk가 됨 그래서 하나의 PC에서는 HDFS의 파일 내용을 정상적으로는 확인할 수 없음 HDFS에 데이터를 업로드하는 이유 본인의 컴퓨터에서 데이터를 이 가상의 Disk로 데이터를 올려야 Hadoop이 해당 데이터를 인식할 수 있기 때문에 이후의 작업이 가능함
MapReduce Framework MapReduce란? 여러 대의 컴퓨터를 이용하여 데이터를 처리하기 위한 방법 Key, Value (Hashtable과 유사) Map은 각각의 컴퓨터가 일정한 처리를 하는 단계 Reduce는 Map에서 처리한 데이터를 특정 키를 가지고 데이터를 모은 후 처리를 하는 단계 Map과 Reduce 사이에 키를 가지고 데이터를 정렬함
MapReduce Framework Job이란? MapReduce Framework를 이용하여 데이터를 처리하는 작업 단위 Java로 구현한 후 Hadoop을 이용하여 실행하면 구현된 절차에 따라 MapReduce Framework 위에서 구동됨 작업이 각 컴퓨터에서 잘 진행되는지를 확인하는 것이 존재함 JobTracker Namenode와 비슷하게 각 컴퓨터가 무슨 일을 하고 있는지 확인함 TackTracker에 무슨 문제가 생기면 해당 컴퓨터에 시켰던 일을 비교적 여유로운 다른 TaskTracker에 일을 시킴 TaskTracker Datanode와 비슷하게 실제로 작업을 진행하는 컴퓨터가 JobTracker로 주기적으로 작업 결과를 보냄
실 습! 실습할 내용 Hadoop 설치 Terminal 실행 VM에 설치된 DB는 많은 사양을 요구하므로 삭제 실 습! 실습할 내용 Hadoop 설치 Terminal 실행 VM에 설치된 DB는 많은 사양을 요구하므로 삭제 sudo apt-get remove --purge mysql-server mysql-client mysql-common mysql-workbench sudo apt-get autoremove sudo apt-get autoclean 다른 컴퓨터와 통신을 위한 SSH 설치 및 키 생성 sudo apt-get install ssh ssh-keygen –t rsa cat ~/.ssh.id_rsa.pub >> ~/.ssh/authorized_keys 본인 아이피 확인 ifconfig 통신 시 편리함을 위해 아이피에 별명 추가 sudo gedit /etc/hosts 아래 내용 추가 192.168.xxx.100 courseMaster 192.168.xxx.101 courseSlave
실 습! 실습할 내용 Hadoop 설치 웹 브라우저를 이용하여 Hadoop 바이너리 다운로드 실 습! 실습할 내용 Hadoop 설치 웹 브라우저를 이용하여 Hadoop 바이너리 다운로드 hadoop.apache.org -> Releases -> Mirror site -> http 미러 중 하나 접속 -> hadoop-1.2.1 폴더로 이동 -> hadoop-1.2.1.tar.gz 다운로드
실 습! 실습할 내용 Hadoop 설치 압축 해제할 파일 생성 다운받은 파일 이동 압축 해제 실 습! 실습할 내용 Hadoop 설치 압축 해제할 파일 생성 mkdir binary 다운받은 파일 이동 mv ~/Downloads/hadoop-1.2.1.tar.gz ~/binary/ 압축 해제 cd ~/binary tar xvzf hadoop-1.2.1.tar.gz 폴더 이름을 짧게 수정하기 위해 소프트링크 생성 ln –s hadoop-1.2.1 hadoop Hadoop 임시 파일과 데이터를 저장하기 위한 폴더 생성 mkdir ~/binary/course/binary/hadoop/dfs mkdir ~/binary/course/binary/hadoop/dfs/name mkdir ~/binary/course/binary/hadoop/dfs/data mkdir ~/binary/course/binary/hadoop/tmp
실 습! 실습할 내용 Hadoop 설치 Hadoop 환경 설정을 변경해야할 파일 리스트 hadoop-env.sh 실 습! 실습할 내용 Hadoop 설치 Hadoop 환경 설정을 변경해야할 파일 리스트 hadoop-env.sh core-site.xml hdfs-site.xml mapred-site.xml masters slave
실 습! 실습할 내용 Hadoop 설치 hadoop-env.sh 설정 실 습! 실습할 내용 Hadoop 설치 hadoop-env.sh 설정 gedit ~/binary/hadoop/conf/hadoop-env.sh 파일에 아래 내용 추가 export HADOOP_HOME=/home/course/binary/hadoop 주석 제거 (앞의 #제거) export HADOOP_LOG_.... export HADOOP_SLAVES…. 주석 제거 및 내용 수정 (앞의 #제거) export JAVA_HOME =/usr/lib/jvm/java-7-openjdk-i386/
실 습! 실습할 내용 Hadoop 설치 core-site.xml 설정 실 습! 실습할 내용 Hadoop 설치 core-site.xml 설정 gedit ~/binary/hadoop/conf/core-site.xml <property> <name>fs.default.name</name> <value>hdfs://courseMaster:54310</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/course/binary/hadoop/tmp</value> </property>
실 습! 실습할 내용 Hadoop 설치 hdfs-site.xml 설정 실 습! 실습할 내용 Hadoop 설치 hdfs-site.xml 설정 gedit ~/binary/hadoop/conf/hdfs-site.xml <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.name.dir</name> <value>/home/course/binary/hadoop/dfs/name</value> </property> <property> <name>dfs.data.dir</name> <value>/home/course/binary/hadoop/dfs/data</value> </property>
실 습! 실습할 내용 Hadoop 설치 mapred-site.xml 설정 실 습! 실습할 내용 Hadoop 설치 mapred-site.xml 설정 gedit ~/binary/hadoop/conf/mapred-site.xml <property> <name>mapred.job.tracker</name> <value>courseMaster:54311</value> </property>
실 습! 실습할 내용 Hadoop 설치 hadoop-env.sh 설정 실 습! 실습할 내용 Hadoop 설치 hadoop-env.sh 설정 gedit ~/binary/hadoop/conf/masters courseMaster gedit ~/binary/hadoop/conf/slaves courseSlave
실 습! 실습할 내용 Hadoop 설치 VM 종료 후 VM 메모리를 1기가로 줄임 VM 폴더를 복사 실 습! 실습할 내용 Hadoop 설치 VM 종료 후 VM 메모리를 1기가로 줄임 VM 폴더를 복사 복사한 폴더의 이름은 BigDataShortCourse2로 설정 VMware Player에서 새로운 VM을 불러옴 이름이 같으니 복잡하므로 맨 위에 새로 생긴 VM의 이름을 BigDataShortCourse2로 수정 두 VM을 실행함 VM 실행 후 Terminal을 실행하여 각각의 VM에서 아래 명령어를 수행 ifconfig courseMaster와 courseSlave 각각의 IP와 맞는지 확인 BigDataShortCourse VM의 터미널에서 아래 명령어 실행 ~/binary/hadoop/bin/hadoop namenode –format ~/binary/hadoop/bin/start-all.sh
실 습! 실습할 내용 Hadoop 설치 VM 종료 후 VM 메모리를 1기가로 줄임 VM 폴더를 복사 실 습! 실습할 내용 Hadoop 설치 VM 종료 후 VM 메모리를 1기가로 줄임 VM 폴더를 복사 복사한 폴더의 이름은 BigDataShortCourse2로 설정 VMware Player에서 새로운 VM을 불러옴 이름이 같으니 복잡하므로 맨 위에 새로 생긴 VM의 이름을 BigDataShortCourse2로 수정 두 VM을 실행함 VM 실행 후 Terminal을 실행하여 각각의 VM에서 아래 명령어를 수행 ifconfig courseMaster와 courseSlave 각각의 IP와 맞는지 확인 BigDataShortCourse VM의 터미널에서 아래 명령어 실행 ~/binary/hadoop/bin/hadoop namenode –format ~/binary/hadoop/bin/start-all.sh 접속허용을 물어보는 질문에는 yes로 대답
실 습! 실습할 내용 Hadoop 설치 VM 종료 후 VM 메모리를 1기가로 줄임 VM 폴더를 복사 실 습! 실습할 내용 Hadoop 설치 VM 종료 후 VM 메모리를 1기가로 줄임 VM 폴더를 복사 복사한 폴더의 이름은 BigDataShortCourse2로 설정 VMware Player에서 새로운 VM을 불러옴 이름이 같으니 복잡하므로 맨 위에 새로 생긴 VM의 이름을 BigDataShortCourse2로 수정 두 VM을 실행함 VM 실행 후 Terminal을 실행하여 각각의 VM에서 아래 명령어를 수행 ifconfig courseMaster와 courseSlave 각각의 IP와 맞는지 확인 BigDataShortCourse VM의 터미널에서 아래 명령어 실행 ~/binary/hadoop/bin/hadoop namenode –format ~/binary/hadoop/bin/start-all.sh 접속허용을 물어보는 질문에는 yes로 대답 설치 확인 localhost:50030, localhost:50070 접속해보기
실 습! Wordcount 입력된 문서에 ‘특정’ 단어가 몇 번 나왔을까? 사람이 샘을 한다면 아래와 같을 것 실 습! Wordcount 입력된 문서에 ‘특정’ 단어가 몇 번 나왔을까? 사람이 샘을 한다면 아래와 같을 것 파일을 읽어오고 각 줄을 훑어보며 특정 단어가 나왔는지를 확인 단어가 나왔다면 횟수를 세어나감 컴퓨터에게 이 일을 시키려면 아무것도 모르는 사람을 다루듯이 파일이 ‘어느 경로’에 있으니 그 파일을 프로그램으로 불러올 것임 단어의 등장 횟수를 기록해둘 공간을 확보 파일의 처음부터 끝까지 한 줄씩 읽어서 각 줄에 특정 단어가 나왔는지 확인하고 단어가 나왔다면 아까 확보해둔 공간에 횟수를 하나 늘려서 기록함 파일 끝까지 읽었다면 세어나간 횟수를 출력함
실 습! Wordcount 입력된 문서에 ‘특정’ 단어가 몇 번 나왔을까? 실 습! Wordcount 입력된 문서에 ‘특정’ 단어가 몇 번 나왔을까? 컴퓨터에게 이 일을 시키려면 아무것도 모르는 사람을 다루듯이 파일이 ‘어느 경로’에 있으니 그 파일을 프로그램으로 불러올 것임 단어의 등장 횟수를 기록해둘 공간을 확보 파일의 처음부터 끝까지 한 줄씩 읽어서 각 줄에 특정 단어가 나왔는지 확인하고 단어가 나왔다면 아까 확보해둔 공간에 횟수를 하나 늘려서 기록함 파일 끝까지 읽었다면 세어나간 횟수를 출력함
실 습! Wordcount 입력된 문서에 ‘특정’ 단어가 몇 번 나왔을까? 직접 생성해보자! 실 습! Wordcount 입력된 문서에 ‘특정’ 단어가 몇 번 나왔을까? 직접 생성해보자! shortcourse 패키지 우 클릭 -> New -> Class 클래스 이름 : Wordcount 아래 main 함수 생성 클릭
실 습! Wordcount 입력된 문서에 ‘특정’ 단어가 몇 번 나왔을까? 직접 생성해보자!
실 습! Wordcount Advanced 입력된 문서에 각 명사가 몇 번 나왔을까? 이렇게 생각해보자 실 습! Wordcount Advanced 입력된 문서에 각 명사가 몇 번 나왔을까? 이렇게 생각해보자 문장을 읽는 부분에서 JSON 형태니까 변환하고, 형태소 분석을 진행한 후에 명사만 추출하고 각 명사에 대해 숫자를 각각 따로 세어주면 되지 않을까? 컴퓨터에게 이것을 시킨다면? 1. 각 명사의 출현횟수를 저장할 공간을 생성 2. JSON 문자열을 객체로 변환 3. 객체의 본문 내용을 가지고 와서 형태소 분석 4. 형태소 분석한 결과를 이용하여 명사만 추출 5. 출현횟수를 저장할 공간에서 이번 명사가 처음 등장한 것이면 명사와 1을 넣어주고 이미 등장한 적이 있다면 그 전에 등장한 횟수를 가지고 와서 명사와 이전 횟수에 1을 더한 횟수를 넣어줌
실 습! Wordcount Advanced on Hadoop 입력된 문서에 각 명사가 몇 번 나왔을까? 실 습! Wordcount Advanced on Hadoop 입력된 문서에 각 명사가 몇 번 나왔을까? 이번 작업의 특징을 먼저 잡아내자 단어 별로 횟수를 세는 것 (Hashtable의 Key가 무엇이었던가) 단어를 Key로 한다면 MR Framework가 자동으로 키는 모아주니까 좀 더 쉽게 횟수를 샐 수 있음 Map에서는 앞의 2, 3, 4를 진행하고 각 단어를 Key로, Value를 1로 하여 Reduce로 전송 Reduce에서는 같은 Key끼리 묶여 있으므로 Value를 전부 더하면 해당 단어가 출현한 횟수가 됨
THANKS