웹사이트 검색

Ubuntu 16.04에서 독립형 모드로 Hadoop을 설치하는 방법


소개

Hadoop은 저렴한 시스템 클러스터에서 매우 큰 데이터 세트의 처리 및 저장을 지원하는 Java 기반 프로그래밍 프레임워크입니다. 이는 빅 데이터 분야의 첫 번째 주요 오픈 소스 프로젝트였으며 Apache Software Foundation의 후원을 받았습니다.

Hadoop 2.7은 4개의 주요 계층으로 구성됩니다.

  • Hadoop Common은 다른 Hadoop 모듈을 지원하는 유틸리티 및 라이브러리 모음입니다.
  • Hadoop Distributed File System을 나타내는 HDFS는 데이터를 디스크에 유지하는 역할을 합니다.
  • Yan Another Resource Negotiator의 줄임말인 YARN은 HDFS의 \운영 체제입니다.
  • MapReduce는 Hadoop 클러스터의 원래 처리 모델입니다. 클러스터 또는 맵 내에서 작업을 분산한 다음 노드의 결과를 쿼리에 대한 응답으로 구성하고 축소합니다. 2.x 버전의 Hadoop에서 많은 다른 처리 모델을 사용할 수 있습니다.

Hadoop 클러스터는 설정하기가 상대적으로 복잡하기 때문에 프로젝트에는 Hadoop 학습, 간단한 작업 수행 및 디버깅에 적합한 독립형 모드가 포함되어 있습니다.

이 튜토리얼에서는 독립 실행형 모드로 Hadoop을 설치하고 포함된 예제 MapReduce 프로그램 중 하나를 실행하여 설치를 확인합니다.

전제 조건

이 자습서를 따르려면 다음이 필요합니다.

  • sudo 권한이 있는 루트가 아닌 사용자가 있는 Ubuntu 16.04 서버: Ubuntu 16.04 초기 서버 설정 가이드에서 이러한 권한을 가진 사용자를 설정하는 방법에 대해 자세히 알아볼 수 있습니다.

이 사전 요구 사항을 완료하면 Hadoop 및 종속 항목을 설치할 준비가 된 것입니다.

시작하기 전에 Hadoop 소개를 살펴보는 것도 좋습니다.

1단계 - 자바 설치

시작하려면 패키지 목록을 업데이트합니다.

  1. sudo apt-get update

다음으로 Ubuntu 16.04에 기본 Java Development Kit인 OpenJDK를 설치합니다.

  1. sudo apt-get install default-jdk

설치가 완료되면 버전을 확인해보자.

  1. java -version
Output
openjdk version "1.8.0_91" OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-3ubuntu1~16.04.1-b14) OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode)

이 출력은 OpenJDK가 성공적으로 설치되었는지 확인합니다.

2단계 - Hadoop 설치

Java가 있으면 Apache Hadoop 릴리스 페이지를 방문하여 가장 최근의 안정적인 릴리스를 찾습니다. 현재 릴리스의 바이너리를 따릅니다.

다음 페이지에서 최신 안정 릴리스 바이너리에 대한 링크를 마우스 오른쪽 버튼으로 클릭하고 복사합니다.

서버에서 wget을 사용하여 가져옵니다.

  1. wget http://apache.mirrors.tds.net/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz

참고: Apache 웹 사이트는 최상의 미러로 동적으로 안내하므로 URL이 위의 URL과 일치하지 않을 수 있습니다.

다운로드한 파일이 변경되지 않았는지 확인하기 위해 SHA-256을 사용하여 빠르게 확인합니다. 릴리스 페이지로 돌아온 다음 Apache 링크를 따르십시오.

다운로드한 버전의 디렉토리를 입력하십시오.

마지막으로 다운로드한 릴리스의 .mds 파일을 찾은 다음 해당 파일의 링크를 복사합니다.

다시 한 번 마우스 오른쪽 버튼을 클릭하여 파일 위치를 복사한 다음 wget을 사용하여 파일을 전송합니다.

  1. wget https://dist.apache.org/repos/dist/release/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz.mds

그런 다음 확인을 실행합니다.

  1. shasum -a 256 hadoop-2.7.3.tar.gz
Output
d489df3808244b906eb38f4d081ba49e50c4603db03efd5e594a1e98b09259c2 hadoop-2.7.3.tar.gz

이 값을 .mds 파일의 SHA-256 값과 비교하십시오.

  1. cat hadoop-2.7.3.tar.gz.mds
...
hadoop-2.7.3.tar.gz: SHA256 = D489DF38 08244B90 6EB38F4D 081BA49E 50C4603D B03EFD5E 594A1E98 B09259C2
...

대소문자와 공백의 차이는 무시해도 됩니다. 미러에서 다운로드한 파일에 대해 실행한 명령의 출력은 apache.org에서 다운로드한 파일의 값과 일치해야 합니다.

파일이 손상되거나 변경되지 않았음을 확인했으므로 -x 플래그와 함께 tar 명령을 사용하여 -z를 추출합니다. 는 압축 해제, -v는 상세 출력, -f는 파일에서 추출하도록 지정합니다. 아래 명령에서 탭 완성을 사용하거나 올바른 버전 번호로 대체하십시오.

  1. tar -xzvf hadoop-2.7.3.tar.gz

마지막으로 추출된 파일을 로컬에 설치된 소프트웨어에 적합한 위치인 /usr/local로 이동합니다. 필요한 경우 다운로드한 버전과 일치하도록 버전 번호를 변경합니다.

  1. sudo mv hadoop-2.7.3 /usr/local/hadoop

소프트웨어가 준비되면 환경을 구성할 준비가 된 것입니다.

3단계 - Hadoop의 Java 홈 구성

Hadoop에서는 환경 변수로 또는 Hadoop 구성 파일에서 경로를 Java로 설정해야 합니다.

Java에 대한 경로인 /usr/bin/java/etc/alternatives/java에 대한 심볼릭 링크이며, 이는 다시 기본 Java 바이너리에 대한 심볼릭 링크입니다. -f 플래그와 함께 readlink를 사용하여 경로의 모든 부분에 있는 모든 심볼릭 링크를 재귀적으로 따라갑니다. 그런 다음 sed를 사용하여 출력에서 bin/java를 트리밍하여 JAVA_HOME에 대한 올바른 값을 제공합니다.

기본 Java 경로를 찾으려면

  1. readlink -f /usr/bin/java | sed "s:bin/java::"
Output
/usr/lib/jvm/java-8-openjdk-amd64/jre/

이 출력을 복사하여 Hadoop의 Java 홈을 이 특정 버전으로 설정할 수 있습니다. 이렇게 하면 기본 Java가 변경되더라도 이 값이 변경되지 않습니다. 또는 파일에서 동적으로 readlink 명령을 사용하여 Hadoop이 시스템 기본값으로 설정된 모든 Java 버전을 자동으로 사용하도록 할 수 있습니다.

시작하려면 hadoop-env.sh를 엽니다.

  1. sudo nano /usr/local/hadoop/etc/hadoop/hadoop-env.sh

그런 다음 다음 옵션 중 하나를 선택합니다.

옵션 1: 정적 값 설정

 . . .
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre/
 . . . 

옵션 2: Readlink를 사용하여 값을 동적으로 설정

 . . .
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
 . . . 

참고: Hadoop과 관련하여 hadoop-env.shJAVA_HOME 값은 /etc/profile 또는 사용자의 프로필에서.

4단계 - Hadoop 실행

이제 Hadoop을 실행할 수 있어야 합니다.

  1. /usr/local/hadoop/bin/hadoop
Output
Usage: hadoop [--config confdir] [COMMAND | CLASSNAME] CLASSNAME run the class named CLASSNAME or where COMMAND is one of: fs run a generic filesystem user client version print the version jar <jar> run a jar file note: please use "yarn jar" to launch YARN applications, not this command. checknative [-a|-h] check native hadoop and compression libraries availability distcp <srcurl> <desturl> copy file or directories recursively archive -archiveName NAME -p <parent path> <src>* <dest> create a hadoop archive classpath prints the class path needed to get the credential interact with credential providers Hadoop jar and the required libraries daemonlog get/set the log level for each daemon

도움말은 독립 실행형 모드에서 실행되도록 Hadoop을 성공적으로 구성했음을 의미합니다. 함께 제공되는 예제 MapReduce 프로그램을 실행하여 제대로 작동하는지 확인합니다. 이렇게 하려면 홈 디렉터리에 input이라는 디렉터리를 만들고 Hadoop의 구성 파일을 여기에 복사하여 해당 파일을 데이터로 사용합니다.

  1. mkdir ~/input
  2. cp /usr/local/hadoop/etc/hadoop/*.xml ~/input

다음으로 다음 명령을 사용하여 여러 옵션이 있는 Java 아카이브인 MapReduce hadoop-mapreduce-examples 프로그램을 실행할 수 있습니다. hadoop-mapreduce-examples에 포함된 많은 예제 중 하나인 grep 프로그램을 호출한 다음 입력 디렉토리인 input과 출력 디렉토리 grep_example. MapReduce grep 프로그램은 리터럴 단어 또는 정규 표현식의 일치 항목을 계산합니다. 마지막으로, 우리는 선언문 내에서나 끝에서 principal이라는 단어가 나오는 것을 찾기 위해 정규 표현식을 제공할 것입니다. 표현식은 대소문자를 구분하므로 문장 시작 부분에 대문자가 있으면 단어를 찾을 수 없습니다.

  1. /usr/local/hadoop/bin/hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar grep ~/input ~/grep_example 'principal[.]*'

작업이 완료되면 처리된 내용과 발생한 오류에 대한 요약을 제공하지만 실제 결과는 포함하지 않습니다.

Output
. . . File System Counters FILE: Number of bytes read=1247674 FILE: Number of bytes written=2324248 FILE: Number of read operations=0 FILE: Number of large read operations=0 FILE: Number of write operations=0 Map-Reduce Framework Map input records=2 Map output records=2 Map output bytes=37 Map output materialized bytes=47 Input split bytes=114 Combine input records=0 Combine output records=0 Reduce input groups=2 Reduce shuffle bytes=47 Reduce input records=2 Reduce output records=2 Spilled Records=4 Shuffled Maps =1 Failed Shuffles=0 Merged Map outputs=1 GC time elapsed (ms)=61 Total committed heap usage (bytes)=263520256 Shuffle Errors BAD_ID=0 CONNECTION=0 IO_ERROR=0 WRONG_LENGTH=0 WRONG_MAP=0 WRONG_REDUCE=0 File Input Format Counters Bytes Read=151 File Output Format Counters Bytes Written=37

참고: 출력 디렉터리가 이미 존재하는 경우 프로그램이 실패하고 요약이 표시되지 않고 출력이 다음과 같이 표시됩니다.

Output
. . . at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.hadoop.util.RunJar.run(RunJar.java:221) at org.apache.hadoop.util.RunJar.main(RunJar.java:136)

결과는 출력 디렉터리에 저장되며 출력 디렉터리에서 cat을 실행하여 확인할 수 있습니다.

  1. cat ~/grep_example/*
Output
6 principal 1 principal.

MapReduce 작업은 principal이라는 단어 뒤에 마침표가 있는 항목 1개와 그렇지 않은 6개 항목을 발견했습니다. 예제 프로그램을 실행하면 독립 실행형 설치가 제대로 작동하고 시스템에서 권한이 없는 사용자가 탐색 또는 디버깅을 위해 Hadoop을 실행할 수 있음이 확인되었습니다.

결론

이 튜토리얼에서는 독립 실행형 모드로 Hadoop을 설치하고 제공된 예제 프로그램을 실행하여 이를 확인했습니다. 자신만의 MapReduce 프로그램을 작성하는 방법을 알아보려면 Apache Hadoop의 Hadoop Cluster Setup 가이드를 참조하십시오.