맥(mac)에서 하둡(hadoop) 설치하기

2018. 12. 20. 06:30

하둡을 집에서도 사용하고 싶어졌다. DB마다 SQL문법이 달라 매번 바뀌는 것도 귀찮기도 하고, 테스트를 해보기도 좋을 것 같다는 얄팍(?)한 생각에서 시작됐다. 하지만 설치를 시작하고 얼마 안 돼 후회하기 시작했다. 설치가 일사천리로 다 잘 되면 문제가 없지만, 언제나 예외와 문제가 발생한다.

오늘은 맥(mac)에서 하둡(hadoop) 설치하는 방법에 대해서 알아보도록 하겠다.


아파치_하둡


인터넷을 검색해보면 하둡 설치와 관련된 문서들을 금방 찾을 수 있다. 하지만 설치하면서 발생하는 에러에 대한 대처는 찾기 어렵다. 그래서 필자의 맥에 하둡을 설치하면서 발생한 에러와 대처법들을 공유하고자 한다.


1. 하둡 설치

하둡을 설치하는 방법은 여러가지가 있지만, 맥의 경우 brew를 이용하여 좀 더 쉽게 설치할 수 있다. 브류는 오픈 소스 소프트웨어 패키지 관리 시스템으로 설치를 쉽게 도와 준다. brew install hadoop을 실행하면, 하둡을 설치할 수 있다.

> brew install hadoop

hadoop을 설치중에 아래와 같은 에러가 발생하였다.

" Error: The `brew link` step did not complete successfully. The formula built, but is not symlinked into /usr/local. Could not symlink sbin/FederationStateStore. /usr/local/sbin is not writable."

뜻을 보니 /usr/local/sbin 폴더를 쓸 수 없다는 애기인 듯 하다. Finder를 이용해서 /usr/local 폴더에 가니 sbin폴더가 없다. 그냥 Finder에서 sbin 폴더를 만들어주면 해결된다.


2. 하둡 설정

하둡 설정을 위해서 관련된 파일들을 수정해줘야 한다. 왜 이렇게 수정하는지 알면 좋으나, 정확한 이유는 잘 모르겠다. 일단 수정해보자. 수정해야 하는 파일은 총 4개이다. 각각은 hadoop-env.sh, Core-site.xml, mapred-site.xml, hdfs-site.xml이다.

해당 파일의 위치는 "/usr⁩/⁨local⁩/Cellar⁩/hadoop⁩/3.1.1⁩/libexec⁩/etc⁩"이다.

먼저, hadoop-env.sh부터 살펴보자.

-기존: export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true"
-변경: export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true -Djava.security.krb5.realm= -Djava.security.krb5.kdc="

하지만, 해당 파일의 위의 내용이 없었던 듯 하다. 그냥 변경에 해당하는 내용을 추가로 기재했다.


다음은, Core-site.xml이다.

[ 아래 부분을 추가로 기재해야 한다 ]

<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>


다음 mapred-site.xml이다.

[ 아래 부분을 추가 기재한다 ]

<configuration>

<property>

<name>mapred.job.tracker</name>

<value>localhost:9010</value>

</property>

</configuration>


마지막으로 hdfs-site.xml이다.

[ 아래 부분을 추가한다 ]

<configuration>

<property>

<name>dfs.replication</name>

<value>1</value>

</property>

</configuration>


이제 설정이 모두 끝났다. 하둡을 실행해 보도록 하자.


3. 하둡실행

하둡을 실행하기 전에, 하둡 파일 시스템으로 포맷을 해야 한다. 아래와 같이 입력하여 하둡 파일 시스템으로 포맷한다.

> hdfs namenode -format


위의 명령어로 하둡 파일 시스템으로 포맷을 해 주고, 아래와 ssh key를 생성하고 사용한다.

> ssh-keygen -t rsa

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


이제 하둡을 실행해보자. 아래와 같이 실행하면 하둡을 띄울 수 있다.

> /usr/local/Cellar/hadoop/3.1.1/sbin/start-dfs.sh


"localhost: ssh: connect to host localhost port 22: Connection refused" 라는 에러가 발생한다. 원격 로그인을 허용하지 않았을 경우, 위와 같은 에러가 발생한다. 환경설정의 [공유]에 들어가면, 중간에 원격 로그인이라고 있다. 클릭하여 원격 로그인을 허용하도록 하자.

원격로그인

( 원격로그인 허용 )


다시 start-dfs.sh로 실행하니, warning이 뜬다.

"2018-12-16 09:22:37,400 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable" 

이는 64비트 운영체제에서 32비트 하둡을 실행하기 때문에 발생하는 에러라고 한다. 인터넷을 검색해보니 해결방법이 없지는 않으나, 크게 중요한 문제는 아니라고 한다. 실제로 이런 warning이 떠도 실행은 잘 된다.


하둡을 실행하고 종료하는 명령어는 아래와 같다. 귀찮으면 start-all로 실행해도 된다.

1. 실행
> /usr/local/Cellar/hadoop/3.1.1/sbin/start-dfs.sh
> /usr/local/Cellar/hadoop/3.1.1/sbin/start-yarn.sh

2. 종료
> /usr/local/Cellar/hadoop/3.1.1/sbin/stop-dfs.sh
> /usr/local/Cellar/hadoop/3.1.1/sbin/stop-yarn.sh


정상적으로 실행된 것인지 궁금하다면, jps를 입력하면 된다. jps를 입력하면, 현재 실행되고 있는 서비스를 확인할 수 있다.

jps실행화면

( Jps 실행화면 )

localhost로 하둡을 띄운 것이기 때문에, localhost로 접속해서 하둡의 상태를 체크할 수 있다. hadoop의 상태를 체크할 수 있는 주소는 아래와 같다.

- Cluster status: http://localhost:8088
- HDFS status: http://localhost:9870 ( 3.x는 9870, 2.x는 50070이다. )
- Secondary NameNode status: http://localhost:9868 ( 3.x는 9868, 2.x는 50090이다. )


각각의 실행화면은 아래와 같다.

클러스트_상태

( Cluster status)


파일시스템_상태

( hdfs status )


두번째_상태

( Secondary status )



오늘은 이렇게 맥에서 하둡을 설치하는 방법에 대해서 알아보았다. 처음에 생각한 가벼운 마음과는 달리 중간에 애를 많이 먹었다. 하지마 잘 실행되는 모습을 보니 나름 뿌듯하다. 이후에 hive와 hue도 설치해야 하는데, 앞길이 조금 막막하다. 하지만, 여기서 끝내면 죽도 밥도 안 되기 때문에, hive와 hue도 계속해서 설치해보도록 하겠다.


오픈API를 사용하면 다양한 재미있는 일들을 해 볼 수 있다. 파이썬을 활용한 오픈API 사용이 궁금하다면 아래 글을 참조해보자.
(참조: 오픈API를 활용한 사례는 어떤 것들이 있을까?)


이 글 공유하기


태그 :

댓글()