brew info [설치한 소프트웨어] 를 이용
brew info hadoop
현재 /usr/local/cellar/hadoop/3.3.4/libexec/sbin 위치에서
./start-all.sh
명령어로 Hadoop을 실행시키면 아래와 같은 에러 메세지가 나온다.

그래서 namenode 포멧을 시도해보면 아래와 같은 에러메세지를 마주하게되는데 루트 권한이 없어서 실행이 안된다고 하는 것 같다. 근데 여기서 구글링을 해도 자세한 내용이 나오지 않아서 Hadoop을 지우고 재설치하기로한다.
hedoop-env.sh 위치
/usr/local/Cellar/hadoop/3.3.4/libexec/etc/hadoop
OS : macOS Monterey v12.5
Hadoop : 3.3.4
java : openjdk version "1.8.0_292"
brew install hadoop
만약 brew가 설치되어 있지 않다면 Homebrew 홈페이지에 접속하여 설치한다.
# 내가 받은 하둡 버전이 3.3.4 이다. 본인이 설치한 버전으로 수정해서 사용하길 바란다.
cd /usr/local/cellar/hadoop/3.3.4/libexec/etc/hadoop
💡 CLI가 아닌 방법으로 경로를 확인해보고 싶다면 finder 에서 'CMD + SHIFT + . '를 통해 숨김 폴더를 보이게하면 된다.
open hadoop-env.sh
파일을 열어서 HADOOP_OPTS 부분을 변경한다.
주석이 달린 부분은 hadoop-env.sh 파일 내에 존재 할 것이고 그 부분을 찾아 밑에 아래 주석이 달리지 않은 한 줄을 적어주면 된다.
# Extra Java runtime options for all Hadoop commands. We don't support
# IPv6 yet/still, so by default the preference is set to IPv4.
# export HADOOP_OPTS="-Djava.net.preferIPv4Stack=true"
# For Kerberos debugging, an extended option set logs more information
# export HADOOP_OPTS="-Djava.net.preferIPv4Stack=true -Dsun.security.krb5.debug=true -Dsun.security.spnego.debug"
export HADOOP_OPTS=”-Djava.net.preferIPv4Stack=true -Djava.security.krb5.realm= -Djava.security.krb5.kdc=”
그리고 한 줄 더 추가해줘야 하는 게 있는데 java Home의 디렉토리를 지정해주어야한다.
따라서 최종적으로 아래와 같은 결과가 나온다.
# Extra Java runtime options for all Hadoop commands. We don't support
# IPv6 yet/still, so by default the preference is set to IPv4.
# export HADOOP_OPTS="-Djava.net.preferIPv4Stack=true"
# For Kerberos debugging, an extended option set logs more information
# export HADOOP_OPTS="-Djava.net.preferIPv4Stack=true -Dsun.security.krb5.debug=true -Dsun.security.spnego.debug"
export HADOOP_OPTS=”-Djava.net.preferIPv4Stack=true -Djava.security.krb5.realm= -Djava.security.krb5.kdc=”
export JAVA_HOME="/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home"
본인이 java를 어디에 설치한지 모르겠다면 터미널에 아래와 같이 입력하면 알 수 있다.
/usr/libexec/java_home
위치를 export JAVA_HOME = 뒤에 따옴표와 함께 복사 붙여넣기 해주면된다. 사람마다 경로가 다를 확률이 매우 높다.
open core-site.xml
이때 나의 경우에는 위의 명령어를 실행시키면 뜬금없이 어도비 일러스트나 마이크로소프트 워드가 실행되었는데 비슷한 상황이라면 아래 팁을 참고하면 좋다.
💡 xml 파일 CLI로 열기
open core-site.xml -a TextEdit
아래 태그를 복사하여 붙여넣기 후 저장하고 종료한다.
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/Cellar/hadoop/hdfs/tmp</value>
<description>A base for other temporary directories.</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
open hdfs-site.xml -a TextEdit
아래 태그를 복사하여 붙여넣기 후 저장하고 종료한다.
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
open mapred-site.xml -a TextEdit
아래 태그를 복사하여 붙여넣기 후 저장하고 종료한다.
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
</configuration>
open yarn-site.xml -a TextEdit
아래 태그를 복사하여 붙여넣기 후 저장하고 종료한다.
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
</configuration>
ssh localhost
위의 명령어를 터미널에 입력했을 때 마지막 접속시간이 안뜨고 Connection refused 가 뜨면 아래 명령어를 입력한다.
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
HDFS 포맷
cd /usr/local/cellar/hadoop/3.3.4/libexec/bin
hdfs namenode -format
❗️❗️ 나의 경우 여기서 문제가 발생했는데 로그를 확인해보면 다음과 같았다.
/usr/local/Cellar/hadoop/3.3.4/libexec/etc/hadoop/hadoop-env.sh: line 93: export: `-Djava.net.preferIPv4Stack=true': not a valid identifier
따라서 로그를 따라서 hadoop-env.sh 쉘을 다시 열었고 해당 부분을 여러번 수정해보면서 다시 포맷을 시도하고 다시 수정하고 다시 시도하면서 최종 해답을 얻었다.
아래와 같이 수정했고, 가끔씩 따옴표가 문제인 경우가 있다.
따옴표를 잘 확인하면서 진행하자.

사용하기 쉽도록 아래 코드를 첨부한다.
# Extra Java runtime options for all Hadoop commands. We don't support
# IPv6 yet/still, so by default the preference is set to IPv4.
# export HADOOP_OPTS="-Djava.net.preferIPv4Stack=true"
# For Kerberos debugging, an extended option set logs more information
# export HADOOP_OPTS="-Djava.net.preferIPv4Stack=true -Dsun.security.krb5.debug=true -Dsun.security.spnego.debug"
export HADOOP_OPTS="${HADOOP_OPTS} -Djava.security.krb5.realm= "
export HADOOP_OPTS="${HADOOP_OPTS} -Djava.security.krb5.kdc= "
export HADOOP_OPTS="${HADOOP_OPTS} -Djava.security.krb5.conf= "
export JAVA_HOME="/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home"
이후 다시 포맷을 진행하면 매끄럽게 진행된다.
cd /usr/local/cellar/hadoop/3.3.4/libexec/bin
hdfs namenode -format
cd /usr/local/cellar/hadoop/3.3.4/libexec/sbin
./start-all.sh
# 또는
./start-dfs.sh
# 또는
./start-yarn.sh
터미널에 jps를 입력하면, 하둡이 정상적으로 실행됨을 확인할 수 있다.
jps

이제 localhost로 접속해서 확인해보자.
Cluster status : http://localhost:8088
HDFS status : http://localhost:9870
Secondary NameNode status : http://localhost:9868
# 현재 경로가 아래의 경로와 다르다면 아래와 같은 경로로 이동한다.
# cd /usr/local/cellar/hadoop/3.3.4/libexec/sbin
# 해당 경로에서 ./start-all.sh 로 실행 해준 것 처럼 ./stop-all.sh 를 실행해주면 된다.
./stop-all.sh
# 또는
./stop-dfs.sh
# 또는
./stop-yarn.sh
cf) vim 종료
Vim에 파일을 저장하고 편집기를 종료하는 명령은 :wq