Hadoop
- 예전에 하둡을 구축한 적이 있었다. 다만, 그때는 아무것도 모를 때 주먹구구식으로 블로그에서 뒤져가며 대충 지은 집이라 설명도 이해도 참혹한 수준이었다.
- 그리고 한동안 잊고 있었는데, 최근에 하둡을 또다시 구축할 일이 생겼다. 그래서 이번엔 그나마 조금 발전된 지식으로 하둡에 대해 다시 적어본다.
- 분산처리 데이터 컴포넌트니, 뭐니 하는 서론은 넘기고 바로 구축부터 시작한다.
Requirements
- Hadoop 3 이상
- Java JDK 1.8 권장(되도록이면 라이선스 이슈가 없는 OpenJDK를 권장)
- Linux(예시에서는 Ubuntu지만, CentOS를 추천) 1대 - 각 노드를 분산시키지 않고 전부 localhost에서 기동시킬 것이다
- wget, openssh
하둡 프로젝트 다운로드
- 다운로드 주소는 역사와 전통의 apache archive. ${VERSION}의 위치에 원하는 버전을 적어넣으면 된다. 예시에서는 21. 11. 05 현재 최신버전인 3.3.1버전을 다운로드
# https://archive.apache.org/dist/hadoop/common/hadoop-${VERSION}/hadoop-${VERSION}.tar.gz wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz tar xvfz hadoop-3.3.1.tar.gz
필요 패키지 설치 및 환경변수 설정
- 하둡은 Java를 기반으로 하는 데이터 분산처리 프레임워크다. 당연히 자바 설치 및 세팅은 필수다.
- 또한, 하둡은 각 노드간 SSH 기반 통신을 하므로 SSH 설치 및 포트 오픈, No password SSH 접속도 필수다.
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 export HADOOP_HOME=${path where you unzip} export HADOOP_PREFIX=$HADOOP_HOME export HADOOP_COMMON_HOME=$HADOOP_HOME export HADOOP_HDFS_HOME=$HADOOP_HOME export HADOOP_MAPRED_HOME=$HADOOP export HADOOP_CONR_DIR=$HADOOP_HOME/etc/hadoop export YARN_HOME=$HADOOP_HOME export YARN_CONF_DIR=$YARN_HOME
- ubuntu18.04 및 20.04 기준 apt로 설치했을 경우의 JAVA_HOME.
- 해당 옵션들을
/etc/profile
, 혹은~/.bashrc
에 추가해주고 해당 파일을source
명령어로 적용시켜준다.
SSH 세팅
ssh-keygen -f ~/.ssh/id_rsa -N ' ' -t rsa
ssh-keygen -f ~/.ssh/id_dsa -N ' ' -t dsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod u+x ~/.ssh/authorized_keys
service ssh restart
- 아까도 말했듯이, 하둡은 노드간 SSH 기반 통신을 진행하므로 SSH 기본 세팅은 필수다.
- 해당 계정의 비밀번호가 설정되어있지 않다면
passwd
로 비밀번호를 설정해준다. - 위 설정이 모두 끝났다면
ssh localhost
로 known_hosts에 본인을 추가해주고 비밀번호를 입력하지 않고 접속이 가능한지 확인한다.
하둡 설정
- 하둡 설정 파일은
\*.xml
,\*.sh
,\*.cmd
의 3종류 형태이다. - xml계열 파일 중에서는
core-site.xml
,hdfs-site.xml
,mapred-site.xml
,yarn-site.xml
을 수정 - sh계열 파일 중에서는
hadoop-env.sh
,yarn-env.sh
를 수정 - cmd계열 파일은 윈도우에서 사용하는 것이므로 linux 환경에서는 신경쓰지 않아도 된다.
- 설정 파일들은 모두
HADOOP_CONF_DIR
위치에 있어야 한다.
core-site.xml
- 하둡의 핵심이 되는 namenode 및 hdfs의 핵심 설정들을 건드리는 파일
- 하둡을 깊게 공부한 것이 아니라면 섣불리 건드리지 말것.
fs.defaultFS
속성이 필수이며, 추가로hadoop.tmp.dir
를 변경해주는 것이 좋다.<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> <description>ESSENTIAL. set HDFS and namenode address and port</description> </property> <property> <name>hadoop.tmp.dir</name> <value>/root/tmp</value> <description>default value is /tmp/hadoop-${user.name}. setting to other dir is recommended.</description> </property> </configuration>
hadoop.tmp.dir
을 변경해주는 이유: /tmp 폴더는 일반적으로 임시 파일들을 보관하는 위치로써, 생각보다 디스크 사이즈가 크지 않아 지정된 용량이 꽉 찰 경우 데이터가 유실될 우려가 있음
hdfs-site.xml
- 보통 제일 긴 파일.
- hdfs의 세팅 전반 및 namenode, secondarynamenode, backupnode, datanode, webhdfs 등 HDFS 시스템을 주 목적으로 사용한다면 가장 많은 설정을 건드리게 되는 위치
- 보통 일반적으로는 각 노드의 데이터 저장 위치나 포트, 호스트 정도를 변경해주게 된다.
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.permissions.enabled</name> <value>false</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>/data/namenode</value> </property> <property> <name>dfs.namenode.checkpoint.dir</name> <value>/data/namesecondary</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/data/datanode</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> <property> <name>dfs.namenode.http.address</name> <value>localhost:9080</value> </property> <property> <name>dfs.datanode.http.address</name> <value>localhost:9090</value> </property> </configuration>
dfs.webhdfs.enabled
옵션에 true를 주게 되면 webhdfs가 열린다. 보통 50070포트에서 웹서버가 실행되게 되는데, HDFS 파일들을 눈으로 직접 확인할 수 있기 때문에 데이터 관리에 도움을 준다.dfs.namenode.http.address
및dfs.datnode.http.address
옵션은 각 노드의 상태나 job 실행 여부등을 웹페이지 형태로 모니터링 할수 있도록 한다.
mapred-site.xml
- 보통 가장 건드릴 일이 없는 파일.
- Hadoop 대신 HDFS를 목적으로 구축하게되는 경우,
mapreduce.framework.name
로 yarn 정도를 넣어주고 패스하게 된다.<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
yarn-site.xml
- hadoop으로 편입된 yarn 프레임워크에 리소스매니저와 노드매니저가 던져졌다.
- 이 두 노드에 관한 설정들이 들어가는 파일.
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>localhost</value> </property> <property> <name>yarn.resoucemanager.resource-tracker.address</name> <value>localhost:9025</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>localhost:9030</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>localhost:9040</value> </property> </configuration>
hadoop-env.sh
- hadoop의 설정파일들을 선언해주는 파일
- 환경변수로 넣은 값들 중 여기서 다시 선언해줘야 하는 값이 일부 존재한다.
JAVA_HOME
.HADOOP_HOME
정도가 해당export HADOOP_HOME=/home/hd/hadoop export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
- 외에 JVM 관련 옵션들이 약간 있지만, 확실하게 아는 것이 아니면 건드리지 않는 것을 권장
- 만일 본인이 root 계정으로 하둡을 구동해야 하는 경우,
HADOOP_NAMENODE_USER
,HADOOP_DATANODE_USER
,HADOOP_SECONDARYNAMENODE_USER
로 root을 선언해줘야 한다.
yarn-env.sh
- hadoop-env.sh 파일의 yarn 버전. 하지만 hadoop-env.sh와는 다르게 따로 설정해줘야 하는 값은 거의 없다.
- 마찬가지로 root로 진행중일 경우,
YARN_RESOURCEMANAGER_USER
,YARN_NODEMANAGER_USER
값에 root를 선언
workers
- 실제로 하둡 JOB이 실행될 노드들을 적어준다.
hdfs-site.xml
파일의dfs.replication
값과 workers에 쓰인 노드의 갯수가 일치해야 한다.
하둡 클러스터 초기화
- 실행에 앞서, 한번 하둡을 포맷해줘야 한다.
- 각 설정파일에 참고된 노드들을 동일한 cluster ID로 묶어주고, 없는 폴더들을 생성해주는 작업.
# HADOOP_HOME/bin hdfs namenode -format
하둡 실행
# HADOOP_HOME/sbin
start-dfs.sh && start-yarn.sh
- 기본적으로 데몬 형태로 실행된다.
- 로그를 보고 싶다면
HADOOP_LOG_DIR
위치에 로그가 생성되니 참고할것. 따로 설정해주지 않았다면 위치는HADOOP_HOME/logs
- 만일 fg형태로 실행시켜 stdout을 지켜보고 싶다면
$HADOOP_HOME/bin 위치의
hdfs ${nodename},
yarn ${nodename}```... 명령으로 실행시켜보자.
'Infra' 카테고리의 다른 글
[Kafka] Kafka 3.0.0 출시 및 Kraft의 근황 (0) | 2021.09.27 |
---|---|
Nginx (0) | 2021.08.19 |
Hadoop - Spark 연동 - 3. Spark 설치 (0) | 2021.04.23 |
Hadoop - Spark 연동 - 2. Hadoop 설치 (0) | 2021.04.23 |
Hadoop - Spark 연동 - 1. 우분투 설정 (0) | 2021.04.21 |