본문 바로가기

빅데이터/Hadoop

[Hadoop] Hadoop 설치 + wordcount 예제

하둡을 써보았다. 17년도에 써봤는데 그때는 이것저것 해도 아무것도 몰랐는데 이번에 제대로 해보았다.

 

 

설치 guide --> https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html

 

 

Pseudo-Distributed Operation : 이 모드로 설치했다.

 

- Hadoop can also be run on a single-node in a pseudo-distributed mode where each hadoop daemon runs in a separate Java process

 

가이드대로 설치하니 크게 어려움은 없었다.

 

순서는

 

1. 리눅스 계정 생성

 

2. 자바 8 버전 설치  --> https://cwiki.apache.org/confluence/display/HADOOP/Hadoop+Java+Versions

더 높은 버전도 있는데 3.x는 Java8 지원이고 11은 진행중이라고 한다. (위의 링크 참고)

 

3. 하둡 설치

 

4. ssh 및 환경변수 설정

 

5. 실행해보기

 


1. 리눅스 계정 생성

 

서버 컴퓨터에 환경설정이 이것저것 엉킬 수 있으니 하둡용 계정을 만들었다.

 

useradd [계정명] -m -s /bin/bash

-m : 홈 디렉토리, /home/[계정명] 이 생성이 된다. workspace를 나누기 위해 넣어주자

-s /bin/bash : 쉘 환경 설정, 이것을 안해주면 [계정명] 으로 로그인해도 쉘 환경을 쓰지 못한다. 꼭꼭 넣어주자

 

su [계정명]
passwd

만든 계정으로 로그인 해준 뒤, passwd로 비밀번호를 설정해 준다.

 

 

2. 자바 8 설치

 

자바가 CLI로 설치가 안된다.

 

설치 가이드 --> https://help.ubuntu.com/community/Java

sudo apt install oracle-java8-installer

ppa를 추가하고 위의 코드로 install을 해도 못찾는다고 한다..

 

그냥 오라클 홈페이지에서 jdk8을 다운받았다.

 

다운로드 페이지 --> https://www.oracle.com/technetwork/java/javase/downloads/index.html

 

이제 오라클 회원가입을 해야 다운받을 수 있게 됬나보다.

 

tar xvzf [jdk_version.tar.gz]

압축을 풀면 jdk_version의 폴더가 나온다.

 

나는 jdk default 버전이 11인가 이라서 8버전을 /home/hadoop 폴더에 설치해서 환경변수를 지정해 주었다.

 

 

3. 하둡 설치

 

얘도 tar.gz를 다운받고 압출을 풀면된다. --> https://www.apache.org/dyn/closer.cgi/hadoop/common

 

하둡 폴더가 생성되는데 다른 설정먼저 해주자.

 

 

4. ssh 및 환경변수 설정

sudo apt-get install ssh
sudo apt-get install pdsh

대부분 미리 설치 되어있지만 혹시나 required software를 설치해보자.

 

비밀번호 없이 ssh로 접속하기위해 이것저것 설정해준다.

ssh localhost

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys

 

 

가이드라인 대로,

 

hadoop_path/etc/hadoop/hadoop-env.sh 에 들어가서 JAVA_HOME을 설정해준다.

 

에디터로 수정해주자.
JAVA_HOME 설정 해준다.

 

이제 환경변수를 설정해주자

sudo nano ~/.bashrc

에디터로 bashrc에서 환경설정해주자

 

맨아래에다가 아래 처럼 작성하였다.

하둡 환경설정해준다.

 

 

자바 환경설정

자바 환경설정에서 export HADOOP_CLASS_PATH로 쓴거를 못찾아서 얘먹었었다... HADOOP_CLASSPATH 중요중요

 

마지막 SSH

제일 아래 PDSH_RCMD_TYPE=SSH로 설정해주었다.

 

rcmd: socket permission denied linux

 

계속 위와 같은 에러가 발생해서 구글링 해보니 저 환경변수만 설정해주니 해결 되었다.

 

source ~/.bashrc

환경변수 작성이 완료 되었으면 source ~/.bashrc 로 설정을 반영시킨다.

 

configuration

 

etc/hadoop/core-site.xml을 다음과 같이 수정한다.

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>

 

etc/hadoop/hdfs-site.sml을 다음과 같이 수정한다.

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

 

 

5. 실행해보기

 

- 1 파일 시스템을 포맷시킨다.

bin/hdfs namenode -format

 

- 2 Namenode, Datanode daemon을 실행한다.

sbin/start-dfs.sh

 

jps로 확인해보자

 

잘 실행되고 있다

 

- 3 MapReduce를 사용할 폴더를 생성한다.

bin/hdfs dfs -mkdir /user
bin/hdfs dfs -mkdir /user/workspace

 

- 4 Copy the input files into the distributed filesystem

여기서 많이 헷갈렸다..

하둡 공식 가이드라인

input에 무엇을 줘야할지 이해가 안갔다. 근데 그냥 폴더하나 더 만들면 된다..

 

bin/hdfs dfs -mkdir /user/workspace/wordcount

간단하게 wordcount를 수행할 폴더를 만들어 주고,

bin/hdfs dfs -put etc/hadoop/*.xml /user/workspace/wordcount

wordcount를 수행할 폴더에 하둡 설정 xml을 넣어준다. (wordcount 작업을 해 줄 파일들이다.)

 

- 5 wordcount를 실행해준다.

bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar grep [input] [output] 'dfs[a-z.]+'

bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar grep /user/workspace/wordcount /user/worksapce/wordcount_result 'dfs[a-z.]+'

 

위와 같이 input, output을 설정해주면 wordcount내 폴더에 있는 파일들을 순회하면서 wordcount 작업을 실행한다.

 

- 6 결과 파일을 확인한다

bin/hdfs dfs -get [distributed filesystem] [local filesystem]
cat [local filesystem]/*

dfs --> local로 파일을 옮겨준다

혹은

bin/hdfs dfs -cat [distributed filesystem]/*

로 확인한다.

 

실제로 이런식으로 나온다.

 

 

- 7 끄기

sbin/stop-dfs.sh

 

 


후기...

 

전에는 왜 계정생성하고 왜 ssh 설정하고 이런것들을 잘 몰랐는데 지금은 훨씬 쉽게 사용할 수 있었다.

 

응용해서 사용하기 위해서는 여러 컴퓨터로 사용해봐야할 것 같다.. 제일 간단한 작업만 해보고, 실제 하둡 코드분석만 해본 것이기 때문에 여러 응용코드를 보고 어떤식으로 구현하는지를 봐야 겠다.

 

'빅데이터 > Hadoop' 카테고리의 다른 글

[Hadoop] 하둡으로 TF-IDF  (0) 2019.12.23