이 프로그램은 Hadoop MapReduce 및 Google DatapRoc을 사용하여 웹 페이지에서 추출한 대규모 문서 세트에서 발생하는 역 단어 색인을 작성하기위한 Java 프로그램입니다.
데이터 세트로서 우리는 여기에서 사용 가능한 Stanford 웹베이스 프로젝트에서 파생 된 총 408 개의 파일 (HTML 태그에서 추출한 텍스트)에서 74 개의 파일의 하위 집합을 사용하고 있습니다. 2007 년 2 월에 완료된 웹 크롤링에서 얻었습니다. 5 만 개가 넘는 웹 사이트에서 총 1 억 개 이상의 웹 페이지가 가장 큰 컬렉션 중 하나입니다. 이 버전은 이미 정리되었습니다.
이 프로젝트에서는 먼저 로컬 (독립형) 모드를 사용하여 샘플 Hadoop 클러스터를 설정 한 다음 실제 데이터 세트에서 Google Dataproc에서 완전히 분산 된 모드로 실제 프로젝트를 구현합니다.
Hadoop의 지원 개발 및 생산 플랫폼이므로 GNU/Linux에 프로젝트를 설정해야합니다. Hadoop 배포를 얻으려면 Apache Download Mirrors 중 하나에서 최근 안정적인 릴리스를 다운로드하십시오. 이 프로젝트는 hadoop-3.1.1 사용하여 배포 및 테스트되었습니다. 다운로드 된 Hadoop 배포판을 풀어주십시오. 배포 폴더에서 파일 etc/hadoop/hadoop-env.sh 편집하여 환경 변수 매개 변수를 다음과 같이 정의하십시오.
# add these line to the hadoop-env.sh or set them in terminal
export JAVA_HOME=/usr/java/latest
export PATH= ${JAVA_HOME} /bin: ${PATH}
export HADOOP_CLASSPATH= ${JAVA_HOME} /lib/tools.jar그런 다음 다음 명령을 시도하십시오.
$ bin/hadoopHadoop 스크립트의 사용 설명서가 표시되어야합니다. 이제 독립형 모드에서 Hadoop 클러스터를 시작할 준비가되었습니다.
이 간단한 Hadoop 작업은 Mapper의 인수로 "입력"폴더에서 두 개의 텍스트 파일을 얻습니다.
# file01
5722018411 Hello World Bye World # file02
6722018415 Hello Hadoop Goodbye Hadoop또한 Hadoop 작업을 제출하고 축소 단계를 적용함으로써 다음과 같이 반전 인덱스를 생성합니다.
bye 5722018411:1
goodbye 6722018415:1
hadoop 6722018415:2
hello 5722018411:1 6722018415:1
world 5722018411:2 Hadoop 작업을 제출하려면 Madreduce 구현은 jar 파일로 포장되어야합니다. 이를 위해이 프로젝트의 InvertedIndex.java 파일을 Hadoop의 배포 루트 폴더에 복사하고 여전히 존재하는 동안 다음 명령을 실행하여 InvertedIndex.java 컴파일하고 jar 파일을 만듭니다.
$ bin/hadoop com.sun.tools.javac.Main InvertedIndex.java
$ jar cf invertedindex.jar InvertedIndex * .class 이 프로젝트의 input/file01 및 input/file02 복사하여 Hadoop Distrubution 폴더의 input 폴더 안에 배치하십시오. 여전히 존재하는 동안 다음 명령을 실행하여 작업을 제출하고 input 폴더에서 입력 파일을 가져오고 반전 인덱스를 생성하고 출력을 output 폴더에 저장하십시오.
$ bin/hadoop jar invertedindex.jar InvertedIndex input output마지막으로 출력을 보려면 아래 명령을 실행하십시오.
$ bin/hadoop dfs -cat output/part-r-00000 이 섹션에서는 Google DatapRoc에 3 개의 작업자 노드가있는 클러스터를 생성하고 실제 데이터 세트에서 invertedindex.jar 작업을 실행합니다.
먼저 Google Cloud 플랫폼에 계정이 필요합니다. 이미없는 경우 300 달러의 무료 크레딧으로 평가판에 가입 할 수 있습니다.
Google Cloud Console에서 새 프로젝트를 만들거나 기존 프로젝트를 선택하십시오. 이 연습에서는 Dataproc을 사용합니다. DatapRoc을 사용하여 Hadoop을 실행하는 Compute 인스턴스 클러스터를 신속하게 만들 수 있습니다. DatAPROC의 대안은 각 컴퓨팅 노드를 개별적으로 설정하고, HDFS를 설치하고, HDFS를 설정하고, 마스터 노드를 설정하는 것입니다. DatapRoc 은이 격렬한 프로세스를 자동화합니다.
Google Cloud Consol에서 왼쪽의 탐색 목록에서 DatapRoc을 선택하십시오. DatAPROC을 처음 사용하는 경우 DatAPROC API를 먼저 활성화해야 할 수도 있습니다. '클러스터 만들기'를 클릭하면 클러스터 구성 섹션으로 이동합니다. 클러스터에 고유 한 이름을 제시하고 원하는 영역을 선택하십시오. 마스터와 3 개의 작업자 노드를 만들어야합니다. 마스터 및 각 멤버의 기본 구성 프로세서 (N1-Standard-4 4VCPU 15 GB 메모리)를 선택하고 스토리지를 32GB HDD 스토리지로 줄입니다. 작업자 노드 수를 3으로 변경하십시오. 다른 모든 것을 기본값으로두고 'Create'를 클릭하십시오.
클러스터가 설정되었으므로 작업을 실행하기 전에 조금 구성해야합니다. 콘솔의 Cloud DatapRoc 섹션 아래의 클러스터 목록에서 방금 만든 클러스터를 선택하십시오. VM 인스턴스 탭으로 이동하여 인스턴스 옆의 SSH 버튼을 마스터 역할로 클릭하십시오.
SSH 버튼을 클릭하면 xterm 또는 터미널과 같은 명령 줄 인터페이스 (CLI)로 이동합니다. 다음 단계의 모든 명령은 CLI에 입력해야합니다. HDFS에는 현재 사용자를위한 홈 디렉토리가 없습니다. 더 진행하기 전에이를 설정해야합니다. (사용자 이름 런 whoami 찾으려면)
$ hadoop fs -mkdir -p /user/ < your username here > JAVA_HOME 이미 설정되었으며 다시 설정할 필요가 없습니다.
이 단계는 새로운 SSH 터미널을 열 때마다 수행해야합니다. 이 단계를 제거하려면 etc/hadoop/hadoop-env.sh 에서 JAVA_HOME , PATH 및 HADOOP_CLASSPATH 설정할 수도 있습니다.
$ export PATH= ${JAVA_HOME} /bin: ${PATH}
$ export HADOOP_CLASSPATH= ${JAVA_HOME} /lib/tools.jar이제 실행 :
$ hadoop fs -ls오류가 없으면 클러스터가 성공적으로 설정되었음을 의미합니다. 오류가 발생하면 환경이 누락 된 환경 변수 또는 사용자 홈 디렉토리가 제대로 설정되지 않았기 때문일 가능성이 높습니다.
환경 변수가 설정되어 있는지 확인하려면 명령 env 실행하십시오.
참고 : 클러스터를 사용하지 않을 때는 클러스터에 대한 청구서를 비활성화하십시오. 그것을 달리게하는 것은 추가 크레딧이 필요합니다.
이 링크에서 데이터 세트를 다운로드하고 내용을 압축 해제하십시오. 'Development'및 'Full Data'라는 이름의 두 개의 폴더가 있습니다. '개발'데이터는 개발 및 테스트 목적으로 사용될 수 있습니다.
왼쪽 탐색 메뉴에서 'DatapRoc'을 클릭하십시오. 다음으로 클러스터의 기본 클라우드 스토리지 스테이징 버킷의 주소를 찾으십시오.
왼쪽 탐색 표시 줄의 스토리지 섹션으로 이동하여 버킷 목록에서 클러스터의 기본 버킷을 선택하십시오. Upload Folder 버튼을 클릭하고 devdata 및 fulldata 폴더를 개별적으로 업로드하십시오.
이제 실제 데이터에서 MapReduce 구현을 실행하기 위해 Hadoop 작업을 제출할 준비가되었습니다. ssh 또는 nano / vi 명령을 사용하여 마스터 클러스터에서 InvertedIndex.java 복사하거나 생성하십시오.
jar 파일을 만들려면 다음 명령을 실행하십시오.
$ hadoop com.sun.tools.javac.Main InvertedIndex.java
$ jar cf invertedindex.jar InvertedIndex * .class이제 작업용 항아리 파일이 있습니다. 이 JAR 파일을 클러스터의 기본 클라우드 버킷에 배치해야합니다. 버킷에 Jar라는 폴더를 만들고 해당 폴더에 업로드하십시오. 클러스터의 마스터 노드 자체에서 JAR 파일을 만든 경우 다음 명령을 사용하여 JAR 폴더에 복사하십시오.
$ hadoop fs -copyFromLocal ./invertedindex.jar
$ hadoop fs -cp ./invertedindex.jar gs://dataproc-69070.../JAR gs://dataproc-69070... 부분은 클러스터의 기본 버킷입니다. Hadoop 환경에 파일 시스템의 정기적 인 위치가 아니라고 Hadoop 환경에 대해 GS : //에 의해 선불해야합니다.
DatapRoc 페이지의 왼쪽 탐색 표시 줄에서 '작업'섹션으로 이동하여 '작업 제출'을 클릭하십시오. 작업 매개 변수를 다음과 같이 채 웁니다.
gs:///dataproc-69070.../JAR/invertedindex.jar .gs:///dataproc-69070.../fulldata .gs:///dataproc-69070.../fulloutput . 폴더는 실행 중에 생성됩니다. 기존 폴더의 이름을 주면 오류가 발생합니다.이제 직업을 제출하십시오. 로그가 작동하는 동안 로그를 볼 수 있습니다.
참고 : Java.lang.Interrupted Exception 만나면 안전하게 무시할 수 있습니다. 당신의 직업은 여전히 실행됩니다.
출력 파일은 버킷의 출력 폴더에 저장됩니다. 이 폴더를 열면 역 색인이 여러 세그먼트에 있음을 알 수 있습니다. (모든 출력 파일을 mergin 전에 폴더에서 _success 파일을 삭제하십시오). 파일을 병합하고 최종 텍스트 출력을 만들려면 다음 명령을 실행합니다.
$ hadoop fs -getmerge gs://dataproc-69070.../fulloutput ./output.txt
$ hadoop fs -copyFromLocal ./output.txt
$ hadoop fs -cp ./output.txt gs://dataproc-69070.../output.txt 이제 전체 데이터 세트의 역 색인을 성공적으로 만들었습니다. grep 사용하여 모든 단어에 대한 인덱스 항목을 볼 수 있습니다.
$ grep -w ' ^peace ' output.txt 새 작업을 다시 컴파일하고 다시 제출하려면 아래 명령을 사용하여 .jar , .class , .java 및 hadoop 파일을 제거 할 수 있습니다.
$ hadoop fs -rm ./wordcount.jar ./output.txt WordCount * .class
$ hadoop fs -rm gs://dataproc-69070.../JAR/wordcount.jar ; gs://dataproc-69070.../output.txt
$ hadoop fs -rm gs://dataproc-69070.../fulloutput/ *
$ hadoop fs -rmdir gs://dataproc-69070.../fulloutput
이 작품은 Creative Commons Adatribution 4.0 International 라이센스에 따라 라이센스가 부여됩니다.