이건, 버전 3용, 근데 비슷하니까 참조하면 되여
ubuntu 이미지 빌드(모든 노드)
https://ubuntu.com/download/raspberry-pi
이 예제는 20.04LTS 서버 (64-bit)를 받은 상황을 가정합니다
sd카드를 넣으면 오른쪽 화면처럼 자동으로 인식합니다
[선택]을 눌러 위에서 받은 이미지를 고르고 [시작]을 눌러 부팅 이미지를 빌드합니다
ubuntu 이미지 수정(모든 노드)
https://cloudinit.readthedocs.io/en/latest/index.html
부트이미지가 완성되면 내 PC에서 sd카드를 더블클릭하여 부트 펌웨어를 확인합니다. 여기에는 운영체제가 부팅되는 동안 시스템 세팅을 해줄 수 있는 cloud-init 시스템이 존재합니다. 이 시스템은 몇가지 파일들로 이뤄지며 이를 이용하여 부팅 이후 네트워크를 활성화시켜 줄 수 있습니다
❗어떤 파일들은 부팅시 마다 적용됩니다. 아래의 값 변경 시 수정해야 합니다
❗해당 파일들은 /boot/firmware에 위치합니다
네트워크 설정
network-config의 version: 2라인을 찾아 이후 내용을 다음으로 덮어씁니다
version: 2 # 기존의 version: 2를 덮어씁니다
ethernets:
eth0:
dhcp4: no
optional: no
addresses:
- 192.168.7.40/24 # ubuntu4
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
wifis:
wlan0:
dhcp4: true
optional: true
access-points:
AP6bb4: # ssid
password: "R2020hjp" # password
❗이 파일에 오류가 있을 경우, /etc/netplan/50-cloud-init.yaml이 생성되지 않습니다
라즈베리파이의 무선주파수 대역을 한국 기준으로 맞춥니다
user-data에 가장 밑에 다음 라인들을 추가합니다
runcmd:
- sed -i 's/REGDOMAIN=.*/REGDOMAIN=KR/' /etc/default/crda
이제 라즈베리파이에 sd카드를 넣고 전원을 연결합니다
초기 구성(모든 노드)
라즈베리파이의 아이디, 비밀번호는 ubuntu, ubuntu입니다
ip addr 명령: 인터넷이 연결되는 지 확인합니다
안되는 경우:
sudo init 6
netplan apply
호스트 수정
네트워크에서 각 노드가 구분되도록 호스트네임을 변경합니다
SSH 연결을 위한 네트워크 구성
sudo apt install ssh
유저 생성 (필요한 경우 유저를 생성합니다.)
# 유저 생성
sudo adduser ubuntu#
# sudoers 그룹에 추가 (sudo명령 사용을 위해)
sudo adduser ubuntu# sudo
SSH연결(네임노드에서 데이터노드로)
vscode로 연결하는 것을 추천합니다
if [ "$EUID" -ne 0 ]; then
echo usage: \\" sudo ./install_hadoop.sh \\"
exit
fi
VERSION=3.2.1
echo \\>\\>\\>\\> INSTALLING JDK ...
apt install openjdk-8-jdk -y
sudo sed -i '$a JAVA_HOME="\\/usr\\/lib\\/jvm\\/java-8-openjdk-arm64\\/"' /etc/environment
wait $!
echo \\>\\>\\>\\> DONE !
echo \\>\\>\\>\\> DOWNLOADING HADOOP "$VERSION" ...
HADOOP_VERSION="hadoop-"$VERSION
HADOOP_VERSION_TAR=$HADOOP_VERSION".tar.gz"
if [ ! -f "$HADOOP_VERSION_TAR" ]; then
wget "<https://archive.apache.org/dist/hadoop/common/$HADOOP_VERSION/$HADOOP_VERSION_TAR>"
wait $!
fi
echo \\>\\>\\>\\> DONE !
echo \\>\\>\\>\\> INSTALLING HADOOP ...
rm -rf "$HADOOP_VERSION"
rm -rf hadoop
sudo rm -rf /usr/local/hadoop
tar xzvf "$HADOOP_VERSION_TAR"
wait $!
mv $HADOOP_VERSION hadoop
sudo mv hadoop /usr/local/hadoop
echo \\>\\>\\>\\> DONE !
echo \\>\\>\\>\\> CHANGING PATH ...
sudo sed -i 's/^\\# export JAVA_HOME=.*/export JAVA_HOME=\\/usr\\/lib\\/jvm\\/java-1.8.0-openjdk-arm64/' hadoop/etc/hadoop/hadoop-env.sh
# ❗ hadoop 2.x에서는 HADOOP_HOME=$HADOOP_COMMON_HOME을 추가해야 합니다
# ❗ hadoop 3.x HADOOP_HOME=$HADOOP_COMMON_HOME를 사용하면 에러납니다
if ! grep -q "HADOOP_COMMON_HOME" /etc/environment; then
sudo sed -i '/^PATH=/ s/"$/\\:\\/usr\\/local\\/hadoop\\/bin\\:\\/usr\\/local\\/hadoop\\/sbin"/' /etc/environment
sudo sed -i '$a\\
HADOOP_COMMON_HOME="/usr/local/hadoop"\\
HADOOP_CONF_DIR=$HADOOP_COMMON_HOME/etc/hadoop\\
HADOOP_HDFS_HOME=$HADOOP_COMMON_HOME\\
HADOOP_MAPRED_HOME=$HADOOP_COMMON_HOME\\
HADOOP_YARN_HOME=$HADOOP_COMMON_HOME\\
HADOOP_STREAMING="$HADOOP_COMMON_HOME/share/hadoop/tools/lib/hadoop-streaming-$VERSION.jar"\\
HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_COMMON_HOME/lib/native\\
HADOOP_OPTS="-Djava.library.path=$HADOOP_COMMON_HOME/lib/native"
' /etc/environment
fi
wait $!
echo \\>\\>\\>\\> DONE !
echo \\>\\>\\>\\> CREATING MASTER ...
adduser --disabled-login --gecos "" master
echo master:R2020hjp | chpasswd
wait $!
echo \\>\\>\\>\\> DONE !
echo \\>\\>\\>\\> GRANTING SUPER USER TO MASTER ...
sudo usermod -aG master master
sudo chown master:root -R /usr/local/hadoop
sudo chmod g+rwx -R /usr/local/hadoop
sudo adduser master sudo
wait $!
echo \\>\\>\\>\\> DONE !
echo \\>\\>\\>\\> UPDATE NETWORK CONFIGURATION
sudo sed -i '3a\\
192.168.7.10 ubuntu1\\
192.168.7.20 ubuntu2\\
192.168.7.30 ubuntu3\\
192.168.7.40 ubuntu4\\
192.168.7.50 ubuntu5' /etc/hosts
echo \\>\\>\\>\\> DONE !
echo \\>\\>\\>\\> PLESASE RESTART \\<\\<\\<\\<
if [ $USER != "master" ]; then
echo current user is $USER
echo Script must be run as user:su - master
echo run \\'su - master\\' first
echo then \\" ./hdfs_setup.sh \\"
exit -1
fi
cd /home/master
sudo apt install sshpass
echo \\>\\>\\>\\> CREATING SSH KEY ...
sudo rm -rf .ssh
cat /dev/zero | ssh-keygen -N ''
wait $!
ssh-keyscan -H ubuntu1 >> .ssh/known_hosts
sshpass -p "R2020hjp" ssh master@ubuntu1 -y 'exit'
sshpass -p "R2020hjp" ssh-copy-id master@ubuntu1
wait $!
ssh-keyscan -H ubuntu2 >> .ssh/known_hosts
sshpass -p "R2020hjp" ssh master@ubuntu2 -y 'exit'
sshpass -p "R2020hjp" ssh-copy-id master@ubuntu2
#wait $!
ssh-keyscan -H ubuntu3 >> .ssh/known_hosts
sshpass -p "R2020hjp" ssh master@ubuntu3 -y 'exit'
sshpass -p "R2020hjp" ssh-copy-id master@ubuntu3
#wait $!
ssh-keyscan -H ubuntu4 >> .ssh/known_hosts
sshpass -p "R2020hjp" ssh master@ubuntu4 -y 'exit'
sshpass -p "R2020hjp" ssh-copy-id master@ubuntu4
wait $!
ssh-keyscan -H ubuntu5 >> .ssh/known_hosts
sshpass -p "R2020hjp" ssh master@ubuntu5 -y 'exit'
sshpass -p "R2020hjp" ssh-copy-id master@ubuntu5
wait $!
echo \\>\\>\\>\\> DONE !
cd /usr/local/hadoop/etc/hadoop
echo \\>\\>\\>\\> EDITING core-site.xml
if [ ! -f core-site.xml.original ]; then
cp core-site.xml core-site.xml.original
else
cp core-site.xml.original core-site.xml
fi
sed -i '19a\\
<property>\\
<name>fs.defaultFS</name>\\
<value>hdfs://ubuntu1:9000</value>\\
</property>' core-site.xml
echo \\>\\>\\>\\> DONE !
echo \\>\\>\\>\\> EDITING hdfs-site.xml
if [ ! -f hdfs-site.xml.original ]; then
cp hdfs-site.xml hdfs-site.xml.original
else
cp hdfs-site.xml.original hdfs-site.xml
fi
sed -i '19a\\
<property>\\
<name>dfs.namenode.name.dir</name>\\
<value>/usr/local/hadoop/data/nameNode</value>\\
</property>\\
<property>\\
<name>dfs.datanode.data.dir</name>\\
<value>/usr/local/hadoop/data/dataNode</value>\\
</property>\\
<property>\\
<name>dfs.replication</name>\\
<value>2</value>\\
</property>' /usr/local/hadoop/etc/hadoop/hdfs-site.xml
echo \\>\\>\\>\\> DONE !
echo \\>\\>\\>\\> EDITING workers
echo "
ubuntu4
ubuntu5" > /usr/local/hadoop/etc/hadoop/workers
echo \\>\\>\\>\\> DONE !
echo \\>\\>\\>\\> COPYING CONFIGURATION
# scp /usr/local/hadoop/etc/hadoop/* ubuntu2:/usr/local/hadoop/etc/hadoop/
# scp /usr/local/hadoop/etc/hadoop/* ubuntu3:/usr/local/hadoop/etc/hadoop/
scp /usr/local/hadoop/etc/hadoop/* ubuntu4:/usr/local/hadoop/etc/hadoop/
scp /usr/local/hadoop/etc/hadoop/* ubuntu5:/usr/local/hadoop/etc/hadoop/
echo \\>\\>\\>\\> DONE !