본문 바로가기

Bigdata Hadoop

데이터 과학/빅데이터 실험실 - 4부 중 1부: 라즈베리 파이 또는 VM 클러스터 - OS 및 통신

반응형

 

데이터 과학/빅데이터 실험실 - 4부 중 1부: 라즈베리 파이 또는 VM 클러스터 - OS 및 통신 

데이터 과학/빅데이터 실험실을 Raspberry Pi 4 또는 VM 클러스터에서 Hadoop, Spark, Hive, Kafka, Zookeeper 및 PostgreSQL로 조립하기 

 

이 텍스트는 모든 Ubuntu 20.04 서버 클러스터에 설치를 지원하는 데 사용할 수 있으며, 이것이 잘 설계된 계층화 소프트웨어의 장점입니다.

 

아래 참고 링크 마지막에 본 글의 원래 링크를 추가합니다.

 

또한 노드가 더 많은 경우 원하는 대로 소프트웨어를 배포할 수 있습니다. 이 글에서는 ssh, vim, nano 등 Linux 명령줄을 알고 있다고 가정합니다. 통신을 설정해야 하고 Zookeeper와 Kafka 모두 홀수 개의 노드가 필요하므로 3개 미만의 라즈베리로 시작하는 것은 권장하지 않습니다. 단일 노드로 시도하는 경우 이 가이드를 사용할 수 있습니다. 하지만 Raspberry에서는 성능이 실망스러울 수 있으므로 단일 노드의 경우 적절한 양의 RAM과 프로세서를 갖춘 가상 머신을 사용하는 것이 좋습니다. 크기 때문에 튜토리얼을 네 부분으로 나눠서 설명해야 했습니다. 

 

 

모든 구성 파일은 [1]에서 확인할 수 있습니다: 

 

면책 조항: 이 글은 누구나 무료로 사용할 수 있도록 제공되며 책임은 본인에게 있습니다. 모든 출처를 인용하는 데 주의를 기울였지만 누락된 부분이 있다고 생각되면 메모를 보내주세요. 소프트웨어 버전에 따라 종속성 때문에 다른 방식으로 작동할 수 있으므로 처음 시도할 때 사용한 것과 동일한 버전을 사용하는 것이 좋습니다. 

 

1. 소개

 

데이터 과학이나 비즈니스 인텔리전스를 교육하거나 공부하는 것은 보통 혼자서 하는 작업입니다. MBA에 다니거나 온라인 강의를 들을 수도 있지만, 지식을 통합하려면 연습과 실험이 필요합니다.

 

일부 기술의 경우 이 과정은 간단합니다. Python과 R은 일반 컴퓨터에 쉽게 설치할 수 있습니다. 그러나 전반적인 실험을 위해서는 데이터 수집부터 보고/시각화에 이르기까지 여러 도구가 통합되어야 합니다.

 

그리고 이러한 도구는... 뭐라 말할까요... 저는 제가 사용하는 도구를 이해하지 못하는 것을 좋아하지 않습니다. 저는 1987년에 12yo로 베이직 언어를 배운 나이든 사람입니다. 오디오 테이프 플레이어에서 Z80 로딩 프로그램을 가지고 놀았고, 90년대에는 Novell 네트워크를 관리했으며, Minix 이후 몇 년 후에야 Linux를 사용했지만 저는 박물관 큐레이터가 아닙니다. 포트란, 파스칼, C, 자바, 그리고 지금은 R과 파이썬을 배웠습니다. 그리고 실제 환경에 가까운 환경에서 파이프라인과 분석을 훈련하고 싶어서 다시 도구로 돌아가게 되었습니다. 훈련할 환경뿐만 아니라 이 환경을 실제로 이해할 수 있는 환경이 필요하다고 느낍니다.

 

환경과 관련해서는 (몇몇 친구들과 함께) Apache 지원 솔루션에 대해 이야기하고 있습니다: 클러스터에 설치된 Hadoop, Spark, Hive, Postgres, Kafka 등입니다. 데스크톱에서는 Anaconda와 Rstudio를 사용할 가능성이 높습니다(Anaconda는 미안하지만 저는 독립형 Rstudio를 선호합니다).

 

이것이 제가 꿈꾸는 연구실이고, 저는 그것을 선택했습니다.

 

빅 데이터 환경은 현실 세계에서 분산된 솔루션이 필요하며 확장성이 가장 중요한 요건입니다. 따라서 환경을 구성하는 방법을 배우는 것이 중요했습니다. 저는 클라우드 기반 솔루션을 선택하지 않았습니다. '개인 연구실'에 대한 제한 없이 모든 권한을 갖고 싶었기 때문입니다.

 

먼저 노트북에 전체 솔루션을 설치하여 3개의 가상 머신(VirtualBox를 통한 Ubuntu 20.04)을 사용했습니다. 작동은 했지만 성능과 네트워킹이라는 몇 가지 단점이 있었습니다. 최악의 경우 - 노트북을 집에서 회사로 옮겼다가 다시 가져오는데, 이런 종류의 '가상 네트워크'를 사용하는 것은 그곳에서는 허용되지 않았습니다.

 

저는 연구실용 클러스터를 가상화하기 위해 강력한 스테이션을 구입하기로 결정했을 때 Raspberry를 사용해보기로 했습니다.

 

새로운 라즈베리 파이 4는 최대 4GB 램까지 사용할 수 있습니다. 페라리는 아니지만 팬이 있고 작업을 할 수 있는 작은 차만 있으면 되었습니다. 하둡 + 스파크 솔루션을 위해 라즈베리로 클러스터를 조립하는 방법에 대한 글을 읽었는데, PI 3로 성공했습니다.

 

그 후 라즈베리파이 3대로 직접 클러스터를 조립하기로 결정했습니다.

 

그 결과에 만족하고 있으며, 그 성능 덕분에 실험을 수행할 수 있었습니다. 학생들에게 이 방법을 추천하고 싶습니다. 

 

2. 클러스터 조립하기

 

이 첫 번째 파트에서는 물리적 클러스터를 조립하고, Ubuntu 서버 20.04를 설치하고, 클러스터 환경을 설정하는 방법을 안내합니다. 

 

2.1 필요한 것

 

  • 3개 이상의 라즈베리파이 4 4GB
  • 1 스위치 기가비트(10/100/1000)
  • 라즈베리파이용 마이크로 SD 카드
  • 전원 공급을 위한 USB-C 케이블
  • 네트워킹용 이더넷 케이블
  • 전원 공급 장치(저는 USB 3A 포트 3개가 있는 충전기를 사용하고 있습니다)
  • 클러스터용 아크릴 거치대 

 

Cluster mount 1

 

2.1.1 자료에 대한 설명:

 

라즈베리파이 4에는 와이파이와 기가비트 이더넷이 있습니다. 저는 기가비트 스위치를 사용하여 클러스터 통신을 위해 유선 네트워크를 선택했습니다. 또한 원격 액세스를 위해 Wi-Fi를 사용하고 있습니다. 따라서 케이블 cat 6을 사용해야 합니다.

 

데이터로 플레이하고 싶어서 128GB SD 카드를 구입했습니다. 하지만 카드 중 하나가 배송되지 않아서 두 번째 라즈베리(노드 파이2)에 16GB 카드를 넣었는데 작동했습니다. 클러스터 성능을 위해서는 읽기/쓰기 속도가 빠른 좋은 품질의 SD 카드를 구입하는 것이 필수적입니다. Raspberry에는 2.5 HD, SSD SATA 또는 NVME를 사용할 수 있는 확장 보드가 있습니다. 저는 설치하지 않았지만 NAS 또는 데이터 저장 영역을 쉽게 마운트 할 수 있습니다.

 

클러스터를 구성하는 데 많은 시간을 보냈고 문제를 발견하고 0으로 돌아가는 데 거의 3 주가 걸렸습니다. 나는 다른 사람들도 같은 고통을 겪기를 바라는 가학적인 사람이 아니기 때문에이 가이드를 게시하기로 결정했으며 여러분이 즐기시기 바랍니다.

 

나는 이 훌륭한 가이드를 참조로 사용했으며 첫 번째 [2, 3, 4]에 중점을 두었습니다: 

 

하지만 튜토리얼을 따라해도 많은 문제와 함정을 발견했습니다. 일부 문제는 다른 소프트웨어 버전과 관련이 있을 수 있습니다. 

 

이 글을 읽을 때 여러분과 제가 다시 설치해야 하는 경우를 돕기 위해 모든 구성 파일을 라즈베리에 있는 것과 유사한 폴더 구조에 저장했습니다(IP, 서버 이름 등은 사용자에 따라 다를 수 있으므로 주의해서 사용하세요). 모든 파일은 최종 버전이며, Hadoop, Hive, Zookeeper 및 Kafka의 분산 버전이 있습니다(Spark 및 Postgres는 단일 노드에 설치됨). 

 

2.2 운영 체제 설치 

 

우선, SD 카드가 아닌 클러스터 지지대에 실제 부품을 조립해야 합니다. 책상 위에 부품을 올려놓고 시작하려 하지 마세요. 단락이 발생하기 쉽고 자료를 잃어버릴 수 있습니다.

 

제 노트북은 Windows 10을 실행하며 어두운 면(Linux)도 잊지 않았기 때문에 Linux 가상 머신을 선택하여 사용할 준비가 되어 있습니다. 하지만 튜토리얼을 설명할 때는 Windows 지원 소프트웨어를 참조하겠습니다. Linux 전용 괴짜라면 도구를 사용하여 작업을 완료하는 방법을 알고 있을 것입니다(일반적으로 Linux에서 더 쉽습니다). 

 

2.2.1 라즈베리파이 이미저 다운로드 및 설치하기 

 

우분투 서버로 마이크로 SD 카드를 만드는 데 가장 적합한 도구는 라즈베리 파이 이미저[5]입니다. 이 도구는 Windows, Ubuntu 및 Mac에서 사용할 수 있으며 다음에서 다운로드할 수 있습니다: 

 

이 유틸리티는 초기 OS 시스템을 깨끗한 버전으로 구울 수 있습니다.

 

조언: 저는 보통 노트북 SD 슬롯에 마이크로 SD 카드와 함께 제공되는 저렴한 microSD-SD 어댑터를 사용하려고 했습니다. 속도가 매우 느려서 마이크로 SD-USB 어댑터로 바꾸고 USB 3.0 포트에서 사용했습니다. 훨씬 나아졌습니다.

 

라즈베리 파이 4는 AMR64 아키텍처를 사용하며 이전 버전은 AMR32였습니다. 따라서 모든 Linux 32/64가 정상적으로 설치됩니다. 첫 번째 시도에서는 Raspbian(32비트 버전만 사용 가능)을 사용했지만 Hadoop 설치에 문제가 있었습니다. 그 후 Ubuntu 64비트 버전(Pi 4용 Ubuntu 권장)을 사용하기로 결정했습니다.

 

SD를 삽입하고 Raspberry Pi Imager를 시작하고 포맷합니다(저는 항상 OS 설치 전에 포맷합니다).

 

우분투 서버 20.04 64비트를 설치합니다. 모든 PI 마이크로 SD 카드에 대해 동일한 작업을 수행합니다.

 

Ubuntu 20.04 서버는 DHCP로 이더넷 네트워크를 연결하도록 설정된 최소 버전으로 제공됩니다.

 

참고 - Raspberry에 설치하기 전에 노트북 카드 리더에 마이크로 SD 카드를 다시 삽입하면 설치 구성 파일에 액세스할 수 있게 됩니다. 이론적으로는 초기 사용자 및 네트워크 구성을 설정할 수 있습니다. 네트워크 구성 파일은 yaml 파일에 대한 netplan 표준을 따릅니다. 하지만 몇 번 시도했지만 제대로 작동하지 않아서 평소처럼 ssh 연결이나 키보드와 모니터를 사용하기로 했습니다. 참고 - 우분투에는 vim 및 나노 편집기가 설치되어 있습니다. 저는 vim에 익숙하지만 색상의 하이라이트 스키마 때문에 안경을 쓰고도 읽기 어렵습니다! 저는 나노를 사용했습니다. 바로 가기는 나노 인터페이스 하단에 표시됩니다. 

 

2.2.2 네트워크에 연결하기 

 

클러스터는 네트워킹이 가장 중요합니다. 이 튜토리얼에서는 라우터/게이트웨이가 있는 홈 네트워크가 있다고 가정합니다.

 

네트워크를 구성하려면 OS에 액세스할 수 있어야 합니다. 두 가지 방법으로 구성할 수 있는데, 가장 간단한 방법은 마이크로-HDMI에서 HDMI, 유선 키보드로 연결되는 어댑터를 구입한 후 라즈베리를 하나씩 연결하는 것입니다.

 

초기 사용자 이름/비밀번호로 직접 액세스할 수 있습니다. 기본 사용자/비밀번호는 ubuntu/ubuntu이며, 처음 로그인할 때 비밀번호를 변경하라는 메시지가 표시됩니다. 저는 비밀번호를 '라즈베리'로 변경했습니다. 이것은 실험실이므로 클러스터에서 실제 비밀번호를 사용하지 마세요.

 

Raspberries를 처음 연결하는 두 번째 방법은 DHCP에 의존하고 유선 네트워크(이더넷)에서 Pi를 하나씩 다시 연결하는 것입니다.

 

라우터 관리 페이지에 액세스하면 연결된 장치에 액세스할 수 있으며 Raspberry는 "ubuntu"로 나타납니다.

 

원격 연결을 위한 IP 주소를 기록해 두세요. 저는 유선 키보드가 제 시간에 도착하지 않아서 ssh로 연결했습니다. 한 번에 하나의 라즈베리만 전원을 켜고 네트워크, 호스트 이름, 호스트 및 사용자를 구성한 다음 전원을 끕니다.

 

이렇게 하면 ssh를 통한 초기 연결을 위해 동적 IP를 쉽게 식별할 수 있습니다.

 

Pi 4의 전원을 켜면 마이크로 SD 근처에서 빨간색과 녹색 LED가 깜박이는 것을 볼 수 있습니다. 빨간색은 전원, 녹색은 보조 메모리(마이크로 SD)에 액세스 중임을 나타냅니다. 모든 Pi는 사용자/비밀번호와 파일 위치에 대해 동일한 구성을 가지고 있습니다. 따라서 클러스터를 더 쉽게 관리할 수 있습니다. 

 

2.2.3 첫 번째 작업은 네트워크를 설정하는 것입니다. 

 

이전에 쓴 것처럼 이더넷과 와이파이를 설정하기로 결정했습니다. 클러스터가 라우터에 직접 연결되어 있지 않기 때문에 이런 방식으로 설정했습니다. 하나의 이더넷 포트 10/100을 제공하지만 무선으로 2.4GHz + 5.0GHz를 제공하는 Wi-Fi 네트워크 확장기인 TP-Link RE200이 있습니다. 따라서 제 솔루션은 스위치 기가비트를 클러스터 내 통신에만 사용하고 원격 액세스에는 Wi-Fi를 사용하는 것입니다. 어쨌든, 만일을 대비하여 클러스터에 대한 두 번째 경로를 보장하기 위해 익스텐더(RE200)의 이더넷을 스위치에 연결했습니다.

 

우분투 서버 20.04는 네트워크 구성에 netplan을 사용합니다. 이력서로 형식이 잘 지정된 텍스트 파일을 생성하고 시스템에 /etc/netplan 폴더에 있는 yaml 접미사가 있는 파일을 구문 분석하고 처리하도록 요청합니다. 그러면 Netplan이 그에 따라 네트워크 설정을 변경합니다.

 

중요 - 들여쓰기에는 반드시 4개의 공백이 있어야 합니다. 이 사실을 깨닫기 전에 편집할 때 어려움을 겪었습니다.

 

편집할 파일은 다음과 같습니다: /etc/netplan/50-cloud-init.yaml

 

저는 게을러서 이 파일만 편집했지만 접미사를 변경하여 netplan이 읽지 못하도록 하고 새 파일을 만들 수도 있습니다.

 

참고 - 일부 설치에서 Pi와의 연결이 끊겨서 시스템을 다시 설치해야 했던 후(USB 키보드가 없었습니다), 먼저 와이파이를 구성하고 다시 시작하도록 선택했습니다. Wi-Fi가 정상인지 확인한 후 이더넷을 DHCP에서 고정 IP로 변경했습니다.

 

제 파일을 복사하고 그에 따라 편집할 수 있습니다:

/etc/netplan 50-cloud-init.yaml 

 

#Cluster configuration

network:
    version: 2
    ethernets:
        eth0:
            dhcp4: false
            addresses: [192.168.1.11/24]
            gateway4: 192.168.1.254
            nameservers:
                addresses: [192.168.1.254,8.8.8.8]

    wifis:
        wlan0:
            dhcp4: false
            addresses: [192.168.1.21/24]
            gateway4: 192.168.1.254
            nameservers:
                addresses: [192.168.1.254,8.8.8.8]
            access-points:
                MYWIFISSDI-5G:
                    password: "0123456789"
                MYWIFISSDI:
                    password: "0123456789"

 

파일을 편집한 후에는 변경 사항을 확인해야 합니다: 

 

ubuntu@ubuntu:/etc/netplan$ sudo netplan apply  

 

파일을 사용자 환경에 맞게 조정해야 합니다. 일반적으로 클러스터의 IP를 결정하고 라우터 IP(게이트웨이)를 변경하고 Wi-Fi(이름 및 비밀번호)를 구성하기만 하면 됩니다. 저는 2개의 와이파이 네트워크(2.4G + 5G)를 사용하고 있습니다.

 

제 삶을 더 쉽게 만들기 위해 간단하게 설정했습니다: 

 

Hostname   IP (Ethernet)     IP(wifi)  
pi1        192.168.1.11      192.162.1.21
pi2        192.168.1.12      192.162.1.22
pi3        192.168.1.13      192.162.1.23

 

참고 - 라우터에서 DHCP 연결에 사용할 수 있는 범위에서 선택한 범위를 제거해야 합니다. 

 

네트워크 연결이 안정적으로 이루어지면 실제 구성을 시작할 수 있습니다. 클러스터는 네트워크 연결을 사용하므로 Raspberry 간에 액세스 권한이 모두 정상이어야 하며, 그렇지 않으면 분산 서비스가 실패하게 됩니다. 

 

제 클러스터 아키텍처는 이미지에 표시된 것과 같습니다: 

 

 

2.3 사용자 만들기 

 

모든 노드에서 sudo 액세스 권한으로 동일한 사용자를 생성합니다:

 

참고 - 낮은 수준의 useradd 명령은 사용하지 마세요! 

 

sudo adduser pi  
sudo passwd pi
New password:
Retype new password:
passwd: password updated successfully
sudo usermod -aG sudo pi 
sudo usermod -aG admin pi

 

usermod 명령은 sudo 액세스를 보장합니다.

 

파이로 로그인하고 시스템을 업데이트하세요! 

 

sudo apt update
sudo apt upgrade

 

net-tools 패키지를 설치하면 유용합니다! netstat와 함께 제공되며, 노드에서 활성 서비스(포트)를 확인하는 데 사용할 수 있습니다: 

 

2.4 원격 데스크톱 액세스 

 

웹 브라우저(크롬)와 원격 데스크톱 액세스(xrdp)가 있는 가벼운 그래픽 인터페이스(xfce4)를 설치했습니다. 그러나 이것은 실제로 필요하지 않으며 제거를 고려하고 있습니다.

 

원격 데스크톱 액세스를 사용하려면 다음을 수행해야 합니다:

 

xfce4 및 xrdp를 설치하세요: 

 

Sudo apt-get install xfce4
sudo apt-get install xrdp

 

파일을 생성하고

/home/pi/.xsession 파일을 만듭니다. 

 

echo xfce4-session > /home/pi/.xsession

 

파일을 편집합니다. 

 

/etc/xrdp/startwm.sh 

 

sudo nano /etc/xrdp/startwm.sh 

 

마지막 줄 뒤에 다음을 추가합니다: 

 

startxfce4 

 

서비스를 다시 시작합니다: 

 

sudo service xrdp restart

 

xcfe4 웹 브라우저가 고장났습니다. 크롬을 설치했습니다: 

 

sudo apt-get install chromium-browser

 

만약을 대비하여 extFat 지원을 설치하세요(펜 드라이버에 도움이 될 수 있습니다): 

 

sudo apt install exfat-fuse

 

다시 시작한 후에는 원격 데스크톱을 사용하여 모든 Windows 컴퓨터에서 원격으로 연결할 수 있어야 합니다. 

 

2.5 호스트 이름 및 호스트 구성하기 

 

호스트 이름과 /etc의 호스트 파일도 업데이트해야 합니다.

 

참고 - 호스트 파일에서 localhost 127.0.01에 대한 참조를 제거합니다.

 

/etc/hosts 

 

# The following lines are desirable for IPv6 capable hosts
#::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

192.168.1.11 pi1
192.168.1.12 pi2
192.168.1.13 pi3

 

호스트 이름에서는 pi1, pi2, pi3, ... piX를 그대로 사용하는 것이 좋습니다. 모든 구성 파일이 이러한 호스트명을 고려하기 때문입니다. 그렇지 않으면 편집에 많은 주의가 필요합니다.

 

/etc/hostname 

 

#hostname
pi1

 

2.6 Java 설치 

 

이것은 아킬레스건이었습니다.

 

Hadoop은 Java8에서 컴파일되고 잘 실행됩니다. 제가 찾아봤지만 AMR64 아키텍처용 Java Hotspot 8 또는 Oracle Java 8에서 빌드를 찾을 수 없었습니다. 몇 가지 실험 끝에 이미 Ubuntu 리포지토리에서 사용할 수 있고 유지 관리가 잘 되어 있는 OpenJDK8을 사용하기로 결정했습니다(그러길 바랍니다).

 

Hadoop 및 Java 지원에 대한 정보는 [6]에서 확인할 수 있습니다: 

 

Java를 설치하려면: 

 

sudo apt-get install openjdk-8-jdk 

 

이것이 제 버전입니다: 

 

pi@p2:~$ java -version
openjdk version "1.8.0_252"
OpenJDK Runtime Environment (build 1.8.0_252-8u252-b09-1ubuntu1-b09)
OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)

 

2.7 SSH 구성하기 

 

파일을 편집합니다(GitHub 참조): 

 

/home/pi/.ssh/config 

 

ssh에 대한 바로가기를 만들려면 

 

Host pi1
User pi
Hostname 192.168.1.11

Host pi2
User pi
Hostname 192.168.1.12

Host pi3
User pi
Hostname 192.168.1.13

 

모든 클러스터 노드에서 사용자 파이에 대한 공개/개인 키 쌍 생성:

 

명령 및 출력, 예상해야 합니다: 

 

pi@pi1:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/pi/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/pi/.ssh/id_rsa
Your public key has been saved in /home/pi/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:mKDvp5u/AsK5CxUUYdkFNSM+rSI4S4aQJR7Wd1AcPZU pi@pi1
The key's randomart image is:
+---[RSA 3072]----+
|.oB=o=Ooo ...    |
|o*oo.+ = o E     |
|o.. = o   .      |
|+  o + o         |
|*o= . o S        |
|+B.o             |
|o....            |
|.. ....          |
| .. =*o.         |

 

공개 키를 인증된 키 목록에 복사합니다: 

 

cat .ssh/id_rsa.pub  >> .ssh/authorized_keys

 

그리고 모든 노드에 복사합니다: 

 

cat ~/.ssh/id_rsa.pub | ssh pi2 'cat >> .ssh/authorized_keys'
cat ~/.ssh/id_rsa.pub | ssh pi3 'cat >> .ssh/authorized_keys'

 

참고 - 각 클러스터 노드에서 이 프로세스를 수행해야 합니다. 결국 모든 노드가 모든 공개키를 목록에 갖게 됩니다. 키가 없으면 이후 머신 간 통신이 불가능하기 때문입니다.

 

참고 - GitHub에 제 ssh/authorized_key를 예시로 포함시켰습니다. 물론 작동하지 않으므로 사용할 수 없습니다. 열쇠고리를 만들어야 합니다. 

 

2.7.1 비밀번호 기반 인증

 

참조된 튜토리얼에서는 주로 보안 문제 때문에 비밀번호 기반 인증을 비활성화할 것을 권장합니다. 저는 기존의 비밀번호 기반 액세스를 사용하여 노드에 쉽게 액세스하고 싶기 때문에 이러한 조언을 따르지 않기로 결정했습니다.

 

이 옵션을 살펴보고 싶다면 이 글의 시작 부분에 참조된 두 개의 첫 번째 자습서를 확인하세요. 이 옵션을 살펴보고 싶다면 이 글의 시작 부분에 참조된 두 개의 첫 번째 자습서를 확인하세요.

 

2.8 클러스터 관리를 위한 스크립트

 

다음 파일에 다음을 추가하여 클러스터 관리에 도움이 되는 함수를 만듭니다: 

 

/home/pi/.bashrc

 

####### functions  for the cluster management

function otherpis {
  grep "pi" /etc/hosts | awk '{print $2}' | grep -v $(hostname)
}

function clustercmd {
  for pi in $(otherpis); do ssh $pi "$@"; done
  $@
}

function clustercmd-sudo {
  for pi in $(otherpis); do ssh $pi "echo pi| sudo -S  $@"; done
  echo pi| sudo -S $@
}

function clusterreboot {
  clustercmd-sudo shutdown -r now
}

function clustershutdown {
  clustercmd-sudo shutdown now
}

function clusterscp {
  for pi in $(otherpis); do
    cat $1 | ssh $pi "sudo tee $1" > /dev/null 2>&1
  done
}

 

명령을 실행합니다: 

 

source /home/pi/.bashrc

 

모든 노드에서 이 작업을 수행해야 합니다. 원하는 경우 scp를 사용하여 노드 간에 복사할 수 있습니다. WinSCP 원격 액세스를 사용하는 경우 복사하여 붙여넣을 수 있지만 명령줄에서 scp를 사용하는 것이 더 빠르므로 이 방법을 배워야 합니다.

 

참고 - 원래 튜토리얼에는 clustercmd-sudo가 없습니다. 수퍼유저 액세스가 필요한 명령어에서 문제가 발생했기 때문에 포함시켰습니다.

 

참고 - 이 함수는 노드의 호스트 이름이 pi1, pi2, pi3 pi4...이고 모든 노드에 사용자/암호 pi/pi가 있다는 가정을 전제로 합니다. 이러한 가정은 Hadoop/Spark/Zookeeper/Kafka/Postgres 구성에서도 마찬가지입니다. 다른 이름을 선택한 경우에는 모든 줄을 주의 깊게 확인해야 합니다. 

 

2.9 시간 동기화 

 

일반적으로 저는 모든 머신을 UTC 시간 서버와 동기화합니다. 클러스터에서는 이것이 훨씬 더 중요합니다. 

 

pi@p2:~$ clustercmd date
Fri May 29 21:09:59 UTC 2020
Fri May 29 21:09:57 UTC 2020
Fri May 29 21:10:02 UTC 2020

 

제가 속임수를 썼네요. 클러스터가 이미 동기화되어 있고 시차 편집을 삽입했습니다. 하지만 클러스터에 차이가 있을 수 있습니다.

 

다음 명령을 실행하세요: 

 

clustercmd-sudo apt install htpdate -y
clustercmd-sudo htpdate -a -l www.pool.ntp.org

 

이후 명령은 htpdate를 사용하여 노드의 시계를 www.pool.ntp.org 로 동기화합니다. 

 

 

[1] P. G. Taranti. https://github.com/ptaranti/RaspberryPiCluster

[2] A. W. Watson. Building a Raspberry Pi Hadoop / Spark Cluster (2019)

[3] W. H. Liang. Build Raspberry Pi Hadoop/Spark Cluster from scratch (2019)

[4] A. Verdugo. Building a Hadoop cluster with Raspberry Pi: Installing, configuring and testing a distributed storage and processing cluster with single-board computers (2017)

[5] G. Hollingworth. Introducing Raspberry Pi Imager, our new imaging utility (2020)

[6] A. Ajisaka. Hadoop Java Versions (2020)

 

 

 

 

반응형

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