하둡을 써보았다. 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을 설정해준다.
이제 환경변수를 설정해주자
sudo nano ~/.bashrc
에디터로 bashrc에서 환경설정해주자
맨아래에다가 아래 처럼 작성하였다.
자바 환경설정에서 export HADOOP_CLASS_PATH로 쓴거를 못찾아서 얘먹었었다... HADOOP_CLASSPATH 중요중요
제일 아래 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 |
---|