본문 바로가기

Bigdata Hadoop

라즈베리 파이 4 우분투 클러스터에 Hadoop HDFS 데이터 레이크 설치하기

반응형

소개


몇 주 전에 저는 아파치 스파크에 기반한 실험적인 가정용 '빅 데이터' 시스템을 만들기로 했습니다. 이를 위한 첫 번째 단계는 아파치 스파크가 모든 것을 읽고 쓸 수 있는 분산 파일 시스템을 만드는 것입니다.

 

본 자료의 원문 기사는 이 링크를 따라가세요.


HDFS는 오류 감지 및 복구, 대용량 데이터 세트, 데이터 하드웨어 등과 같은 기능을 제공하는 Hadoop 분산 파일 시스템으로, Hadoop 에코시스템의 일부이지만 Apache Spark의 데이터 분산 파일 시스템으로 훌륭하게 작동합니다.

HDFS 파일시스템은 제 10개의 라즈베리파이 4 클러스터 중 8개의 RPI에 설치됩니다. 최소한의 스토리지 크기와 적절한 속도를 위해 SSD 8개 + USB3 어댑터 8개를 추가로 구입했습니다.

 

 

 

 

HDFS 설치

 

우선, 단일 노드에 HDFS 파일 시스템을 설치하여 모든 것이 간단한 방법으로 작동하는지 테스트해 보겠습니다. 저는 이미 라즈베리파이 4용 우분투 18.04 서버를 설치했지만, 우분투 20.04 서버를 설치한 경우에도 이 단계는 크게 다르지 않을 것입니다.

 

제 경우에는 pi3cluster가 RPI 마스터 호스트 이름이고 pi4cluster, pi5cluster, pi6cluster, pi7cluster, pi8cluster, pi9cluster, pi10cluster가 노드 호스트 이름입니다. 모든 라즈베리 파이가 모든 이름/IP 쌍으로 /etc/hosts 파일을 선언했으므로 아직 완료하지 않은 경우 이 작업을 수행해야 합니다: \

 

192.168.1.32        pi3cluster
192.168.1.33        pi4cluster
192.168.1.34        pi5cluster
192.168.1.35        pi6cluster
192.168.1.36        pi7cluster
192.168.1.37        pi8cluster
192.168.1.38        pi9cluster
192.168.1.39        pi10cluster

 

1. 새로운 SSD 8개를 준비합니다. 모두 라즈베리 파이 4 USB3 포트에 꽂으면 /dev/sda 장치로 사용할 수 있습니다. 모두 파티션하고 포맷해 보겠습니다. 모든 RPI에서 이 명령을 반복합니다: 

 

sudo fdisk /dev/sda

    #(select option n, new partition)
    #(select option p, primary type)
    #(select option w, write and exit)
    # like this:

 

 

 

2. /dev/sda1 새 파티션을 포맷하고 새 리눅스 디렉토리를 생성하여 마운트합니다(모든 RPI에서 이 작업을 수행합니다). 

 

sudo mkfs.ext4 /dev/sda1
sudo mkdir /mnt/hdfs

 

3. 리눅스 파일 시스템 목록을 편집하고 새 파일 시스템을 추가합니다(모든 RPI에서 이 작업을 수행합니다) 

 

sudo nano /etc/fstab

 

4. 나노가 표시되면 파일 끝에 다음 줄을 추가합니다(모든 RPI에서 이 작업을 수행):

 

/dev/sda1 /mnt/hdfs ext4 defaults 0 0  

 

5.리눅스 파일 시스템 마운팅 지점 새로 고침:  

 

sudo mount -av

 

6. 여기에서 Java 및 wget 패키지를 설치합니다:Hadoop Java 버전 설명서에서 권장되는 버전을 확인할 수 있습니다. (모든 RPI에서 수행) 

 

sudo apt install openjdk-8-jdk-headless wget

 

7. 하둡 hdf에 대한 새 시스템 사용자 추가(모든 RPI에서 수행) 

 

sudo adduser hadoop

 

8. 사용 가능한 최신 하둡 패키지를 다운로드하여 복사한 후 마스터 RPI에만 설치합니다. 

 

cd ~
wget https://www-eu.apache.org/dist/hadoop/common/hadoop-3.1.2/hadoop-3.1.2.tar.gz
tar xzf hadoop-3.2.1.tar.gz
rm hadoop-3.2.1.tar.gz
sudo mkdir /opt
sudo mv hadoop-3.1.2 /opt/hadoop
sudo chown hadoop:hadoop -R /opt/hadoop

 

 

9. 하둡 hfds 데이터 폴더 생성(모든 RPI에서 수행) 

 

sudo mkdir -p /mnt/hdfs/datanode
sudo mkdir -p /mnt/hdfs/namenode
sudo chown hadoop:hadoop -R /mnt/hdfs

 

10. hadoop 사용자로 로그인하고 ssh 키를 생성합니다(모든 RPI에서 이 작업을 수행합니다). 

 

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

 

11. hadoop 사용자로 로그인한 마스터 노드에서 다른 모든 노드에 마스터를 인증하고 마스터 ssh 키를 인증된 키로 추가한 다음, 모든 노드에 대해 이 명령을 반복하여 를 노드 ip로 바꿉니다. 

 

$ cat ~/.ssh/id_rsa.pub | ssh hadoop@<ip> 'cat >> .ssh/authorized_keys'

 

12. 하둡에 필요한 모든 환경 변수를 이 파일 /home/hadoop/.bashrc에 추가합니다(모든 RPI에서 이 작업을 수행합니다). 

 

export HADOOP_HOME=/opt/hadoop
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

 

해당 줄을 추가한 후 변수를 다시 로드합니다. 

 

source ~/.bashrc

 

13. 경로에 Hadoop을 추가하고 /home/hadoop/.profile을 편집합니다. 파일 끝에 이 줄을 추가합니다(모든 RPI에서 이 작업을 수행합니다). 

 

PATH=/opt/hadoop/bin:/opt/hadoop/sbin:$PATH

 

14. 하둡 환경 구성 파일에서 JAVA_HOME을 설정합니다. 

 

nano $HADOOP_HOME/etc/hadoop/hadoop-env.sh

 

다음을 추가합니다. export java_home=/usr/lib/jvm/java-8-openjdk-arm64/bin/java like: 

 

 

15. 하둡 클러스터 구성 파일 변경을 시작해 보겠습니다. 모든 텍스트를 복사하여 붙여넣을 수 있는 곳은 hdfs-config.txt입니다. 코어 사이트 hadoop 파일에 구성 섹션을 추가합니다. 

 

hdfs-config.txt 파일 내용

 

-------------------
core-site.xml
-------------------
<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://pi3cluster:9000</value>
  </property>
</configuration>

-------------------
hdfs-site.xml
-------------------
<configuration>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:///mnt/hdfs/datanode</value>
  </property>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:///mnt/hdfs/namenode</value>
  </property>
  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>
</configuration>

-------------------
mapred-site.xml
-------------------
<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>

-------------------
yarn-site.xml
-------------------
<configuration>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <property>
    <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  </property>
</configuration>

 

 

nano $HADOOP_HOME/etc/hadoop/core-site.xml

 

 

 

16. hdfs-site hadoop 파일에 구성 섹션을 추가합니다. 

 

nano $HADOOP_HOME/etc/hadoop/hdfs-site.xml

 

 

 

17. mapred-site haddop 파일에 구성 섹션을 추가합니다. 

 

nano $HADOOP_HOME/etc/hadoop/mapred-site.xml

 

 

 

18. yarn-site hadoop 파일에 구성 섹션을 추가합니다. 

 

nano $HADOOP_HOME/etc/hadoop/yarn-site.xml

 

 

19. 모든 구성이 완료되고 SSD를 파티션하고 마운트한 후 HDFS를 포맷할 수 있습니다(마스터 RPI만). 

 

/opt/hadoop/bin/hdfs namenode -format -force

 

20. HDFS 파일 시스템을 시작하고 몇 가지 작업을 수행하여 모든 것이 정상적으로 작동하는지 확인해 보겠습니다. 

 

cd $HADOOP_HOME/sbin/
./start-dfs.sh
./start-yarn.sh
hadoop fs -mkdir /test_folder
hadoop fs -ls /

 

 

21. (A) 서비스 웹, (B) 클러스터 정보 웹, (C) 하둡 노드 웹, (D) 생성한 "test_folder"도 있는지 확인합니다. 

 

http://<your server ip>:9870/
http://<your server ip>:8042/
http://<your server ip>:9864/
http://<your server ip>:9870/explorer.html

 

(A) 

 

 

 

(B) 

 

 

 

(C) 

 

 

 

(D) 

 

 

21. 나중에 서버를 다시 시작하려면 다음 명령을 사용하세요. 

 

cd $HADOOP_HOME/sbin/
stop-all.sh
start-all.sh

 

단일 노드에서 HDFS 클러스터로 확장하기

 

단일 노드로서 Hadoop HDFS가 정상적으로 작동하는지 확인했다면, 이제 이를 모든 가능한 노드로 확장하여 HDFS 클러스터를 만들 차례입니다.

 

22. 하둡 클러스터 구성 파일을 그림과 같이 그대로 두고 다시 변경해 보겠습니다. 모든 텍스트를 복사하여 붙여넣을 수 있는 곳은 hdfs-cluster-config.txt입니다. pi3cluster와 같은 RPI 호스트 이름을 특정 이름으로 변경하는 것을 잊지 마세요. 

 

hdfs-cluster-config.txt 내용

 

-------------------
core-site.xml
-------------------
<configuration>
  <property>
    <name>fs.default.name</name>
    <value>hdfs://pi3cluster:9000</value>
  </property>
</configuration>

-------------------
hdfs-site.xml
-------------------
<configuration>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:///mnt/hdfs/datanode</value>
  </property>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:///mnt/hdfs/namenode</value>
  </property>
  <property>
</configuration> 

-------------------
mapred-site.xml
-------------------
<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
  <property>
    <name>yarn.app.mapreduce.am.resource.mb</name>
    <value>256</value>
  </property>
  <property>
    <name>mapreduce.map.memory.mb</name>
    <value>128</value>
  </property>
  <property>
    <name>mapreduce.reduce.memory.mb</name>
    <value>128</value>
  </property>
</configuration>

-------------------
yarn-site.xml
------------------- 
 <configuration>
  <property>
    <name>yarn.acl.enable</name>
    <value>0</value>
  </property>
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>192.168.1.32</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <property>
    <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  </property>
  <property>
    <name>yarn.nodemanager.resource.memory-mb</name>
    <value>900</value>
  </property>
  <property>
    <name>yarn.scheduler.maximum-allocation-mb</name>
    <value>900</value>
  </property>
  <property>
    <name>yarn.scheduler.minimum-allocation-mb</name>
    <value>64</value>
  </property>
  <property>
    <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>false</value>
  </property>
</configuration>

 

 

nano $HADOOP_HOME/etc/hadoop/core-site.xml

 

 

 

 

nano $HADOOP_HOME/etc/hadoop/hdfs-site.xml

 

 

 

 

nano $HADOOP_HOME/etc/hadoop/mapred-site.xml

 

 

 

 

nano $HADOOP_HOME/etc/hadoop/yarn-site.xml

 

 

 

 

 

23. 클러스터에서 모든 서비스가 중지되었는지 확인하고 이전부터 모든 파일을 삭제합니다. 

 

cd $HADOOP_HOME/sbin/
stop-all.sh
$ clustercmd rm –rf /opt/hadoop_tmp/hdfs/datanode/*
$ clustercmd rm –rf /opt/hadoop_tmp/hdfs/namenode/*

 

 

24. hadoop 사용자로 로그인하여 hadoop 구성 내에 마스터 및 작업자 파일을 생성합니다. 

마스터 파일에는 마스터 RPI 호스트 이름 한 줄만 추가합니다(제 경우에는 pi3cluster).

 

nano /opt/hadoop/etc/hadoop/master
nano /opt/hadoop/etc/hadoop/workers

 

작업자 파일에는 RPI 노드의 모든 호스트 이름을 나열하는 데 필요한 만큼의 줄을 추가합니다. 제 경우에는

 

pi4cluster

pi5cluster

pi6cluster

pi7cluster

pi8cluster

pi9cluster

pi10cluster

 

25. 마스터 노드에서만 네임 노드를 포맷합니다. 중요: 이전부터 중요한 파일이 있는 경우 hdfs 파일 폴더를 백업하면 해당 파일이 삭제됩니다. 

 

hdfs namenode -format -force

 

 

26. 단일 마스터 노드에서 공유 네트워크 폴더나 펜 드라이브에 하둡 홈을 저장합니다. 

 

sudo tar -czvf /mnt/shared-network-folder/hadoop.tar.gz /opt/hadoop

 

27. 모든 새 라즈베리 파이 클러스터 노드에서 같은 위치에 tar 파일을 압축을 풀고 소유권을 hadoop 사용자에게 강제로 부여합니다. 

 

sudo tar -xzvf /mnt/shared-network-folder/hadoop.tar.gz -C /opt/
sudo chown hadoop:hadoop -R /opt/hadoop

 

 

28. 마스터 노드에서 hadoop 사용자로 로그인하여 HDFS 시스템을 시작합니다. 

 

start-dfs.sh && start-yarn.sh

 

 

29. 멀티노드 hadoop HDFS 분산 파일 시스템을 볼 수 있어야 하며, 다음 URL을 찾아보세요: http://:9870/dfshealth.html#tab-datanode. 

 

 

 

 

 

 

반응형

더욱 좋은 정보를 제공하겠습니다.~ ^^