그동안 이짓을 해보려고 사놨던 라즈베리파이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
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
<?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
<?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
<?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
:
<?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
따라가는데 정신이 없어서, 일단은 그냥 이렇게 놔둔다.
일단 오늘은 여기까지
'소프트웨어 개발 > Scala - Functional' 카테고리의 다른 글
Spark 의 애플리케이션 실행할때의 프로세스 (0) | 2017.01.10 |
---|---|
Spark 멀티노드 슬레이브 활성화 및 에러노트 (0) | 2017.01.08 |
Spark를 이용한 데이터분석 (1) - 준비하기 (0) | 2016.12.25 |
순회 출력 (0) | 2016.09.16 |
스칼라 loop break (0) | 2016.09.14 |