소프트웨어 개발/Scala - Functional

라즈베리파이와 똥컴으로 하둡 구성 (작업중)

늘근이 2017. 1. 5. 22:44

그동안 이짓을 해보려고 사놨던 라즈베리파이2, 라즈베리파이3, 그리고 집에 놀고있던 대학교 초년생때 산 넷북과 심폐소생술로 살려낸 맥북 2009년형이 있다.

1) 구조짜기

가지고 있는 뭔가 계산할수 있는 계산기들은 다음과 같다. 클러스터를 구성하기 위해 아래와같이 온갖 잡다한 돌덩이 컴퓨터들을 연결해놓았다. 허브나 공유기를 통해 하나의 네트워크로 연결해줄수 있다. 공유기로 192.168.0.X로 모두 설정했다.

클러스터라고 하기에는 뭔가 이상하긴 하지만, 어쨌든 집에서 놀고있는 기계들을 하나로 뭉쳐서 뭔가 쓸모있게 한다는 점에서는 만족스럽다. 


모양새가 좀 그렇지만 어쨌든 돌아가기만 하면 되지 않능가


2) 라즈베리파이 OS설치

나머지 컴에 우분투와 맥이 있으니 이건 놔두고, 라즈베리파이 OS를 설치한다.

https://www.raspberrypi.org/

뭔가 있어보이는 라즈베리파이 라즈비안-PIXEL을 설치한다. 다만, 파일하나를 덩그러니 주기때문에 이를 USB부팅이 가능하도록 꾸워야 한다.

Win32 Disk Imager를 통해, ISO이미지를 씌워줄수있다.

중간에 SD카드를 용량오류로 SDFormatter를 써야할 필요가 있을수 있다. 60메가로 인식하던 놈이 다시 7기가로 되돌아왔다.

참고 http://prolite.tistory.com/537



3) 라즈베리파이 설정

설치가 끝난 후에는, 이제 죄다 틀어본다. 

다만, 초기 세팅에는 몇가지 설정이 들어간다.

조그마한 라즈베리파이를 통제하기 위해서 HDMI케이블로 연결해줄수도 있고, 7인치짜리 디스플레이로 제어할수도 있다.

$ sudo raspi-config

메뉴 -> advanced option

메뉴 -> SSH

로 들어가서 SSH접속을 허해준다. 

이때부터는 user : pi passwd : raspberry 기본 관리자 계정으로 원격으로 접속이 가능하다.

또한 접속용 아이디를 하나 만든다

$ sudo useradd john

$ sudo passwd john

이 계정에 관리자 계정은 아래와 같다.

$ sudo usermod -aG sudo john

여기까지 하면, 터널링이 가능하다.


4) 하둡 초기 세팅 - java 설치

뭔가 새삥이 좋으니, 자바는 일단 최신버전을 깔고본다. 일단은 네임노드로 사용할 맥쪽에 세팅한다.

전체적인 설치는 이곳을 참조했다. (https://dwbi.org/etl/bigdata/183-setup-hadoop-cluster)


$ apt-get update
$ add-apt-repository ppa:webupd8team/java
$ apt-get update
$ apt-get install oracle-java8-installer
$ java -version

(라즈베리파이)

라즈베리이에는 기본적으로 8버전이 설치되어있다.


root@NameNode:~# vi /etc/hosts
/etc/hosts
10.0.0.1 NameNode


5) hadoop 다운로드 및 설치

sudo wget http://www-us.apache.org/dist/hadoop/common/stable2/hadoop-2.7.3.tar.gz

으로 각각의 머신에 파일을 다운로드 받는다.

iterm의 broadcast input기능을 이용하면 편하게 동시작업이 가능하다.


6) 환경변수 설정

참고로 bashrc, profile등에 대해 설명해 놓은글을 첨부한다

 http://stefaanlippens.net/bashrc_and_others/

다만, 우분투와 라즈베리파이는 통상적인 경로가 좀 달라보인다. which java로 보려고 해도 심볼릭 링크가 걸려있어서 잘 보이지 않는다. JAVA_HOME 은 보통 여기로..

맥 : /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre

라즈베리파이 : /usr/lib/jvm/jdk-7-oracle-arm32-vfp-hflt/jre

우분투 : /usr/lib/jvm/java-7-oracle/jre/

이걸 참조해서 아래와 같이 설정

export JAVA_HOME=/usr/lib/jvm/java-7-oracle/jre
export PATH=$PATH:$JAVA_HOME/bin
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
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 HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
export CLASSPATH=$CLASSPATH:/usr/local/hadoop/lib/*:.

그리고 

$ source .bashrc

를 이용해 적용한다.

맥에서는

$ source ~/.bash_profile

로 적용한다.


-------------------------------일단 여기까지 정리------------------------------


7) 각종 하둡 설정 XML다루기 

일단, 하둡을 하기위해 하는 설정은 다음과 같다.

root@NameNode:/usr/local/hadoop/etc/hadoop# vi core-site.xml
core-site.xml
<?xml version="1.0"?>
<!-- core-site.xml -->
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://NameNode:8020/</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
</configuration>
root@NameNode:/usr/local/hadoop/etc/hadoop# vi hdfs-site.xml
hdfs-site.xml
<?xml version="1.0"?>
<!-- hdfs-site.xml -->
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop_work/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop_work/hdfs/datanode</value>
</property>
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file:/usr/local/hadoop_work/hdfs/namesecondary</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.block.size</name>
<value>134217728</value>
</property>
</configuration>
root@NameNode:/usr/local/hadoop/etc/hadoop# cp mapred-site.xml.template mapred-site.xml
root@NameNode:/usr/local/hadoop/etc/hadoop# vi mapred-site.xml

Then add the following properties

mapred-site.xml
<?xml version="1.0"?>
<!-- mapred-site.xml -->
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>NameNode:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>NameNode:19888</value>
</property>
<property>
<name>yarn.app.mapreduce.am.staging-dir</name>
<value>/user/app</value>
</property>
<property>
<name>mapred.child.java.opts</name>
<value>-Djava.security.egd=file:/dev/../dev/urandom</value>
</property>
</configuration>
root@NameNode:/usr/local/hadoop/etc/hadoop# vi yarn-site.xml

Then put the following properties under configuration:

yarn-site.xml
<?xml version="1.0"?>
<!-- yarn-site.xml -->
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>NameNode</value>
</property>
<property>
<name>yarn.resourcemanager.bind-host</name>
<value>0.0.0.0</value>
</property>
<property>
<name>yarn.nodemanager.bind-host</name>
<value>0.0.0.0</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>file:/usr/local/hadoop_work/yarn/local</value>
</property>
<property>
<name>yarn.nodemanager.log-dirs</name>
<value>file:/usr/local/hadoop_work/yarn/log</value>
</property>
<property>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>hdfs://NameNode:8020/var/log/hadoop-yarn/apps</value>
</property>
</configuration>
root@NameNode:/usr/local/hadoop/etc/hadoop# vi masters
root@NameNode:/usr/local/hadoop/etc/hadoop# /usr/local/hadoop/bin/hadoop namenode -format



데이터 노드 추가하기

/usr/local/hadoop/etc/hadoop

따라가는데 정신이 없어서, 일단은 그냥 이렇게 놔둔다.


일단 오늘은 여기까지