Sparkling water on Hortonworks Sandbox

소개



Azure에서 제공하는 Hortonworks Sandbox에서 Sparkling Water을 설정하고 H2O Flow에서 Deep Learning으로 MNIST 모델을 구축해 봅니다.

덧붙여 수중의 환경은 MacBook Air(Mac OS X El Capitan)입니다.

Azure에서 Hortonworks Sandbox 설정



먼저 kkitase 님의 기사을 참조하여 Azure에서 Hortonwork Sandbox를 설정합니다.
가상 컴퓨터의 크기가 너무 작으면 응용 프로그램을 실행할 수 없습니다. 이번에는 DS3_V2로 프로비저닝했습니다.



가상 머신 부팅이 완료되면 먼저 http://<sandbox-public-ip>:8888/ 에 액세스하고, 필요 사항을 기입해 Terms of Use 에의 동의를 체크해 Submit 합니다.

그런 다음 ssh를 사용하여 서버에 액세스하여 Ambari의 관리자 암호를 설정합니다. 다음은 .ssh/config 설정 예입니다.

.ssh/config
Host *.azure
    User hssh
    UserKnownHostsFile /dev/null
    StrictHostKeyChecking no
    PasswordAuthentication no
    IdentitiesOnly yes
    LogLevel ERROR
    IdentityFile ~/.ssh/id_rsa
    ProxyCommand nohup ssh localhost -W $(echo %h | sed s/\\.azure//):%p

Azure sandbox 환경에 로그인하고 ambari-admin-password-reset 명령을 실행하여 Ambari 관리자의 암호를 설정합니다.
local$ ssh <sandbox-public-ip>.azure
sandbox$ sudo ambari-admin-password-reset
Please set the password for admin:
Please retype the password for admin:

中略

Waiting for server start....................
Ambari Server 'start' completed successfully.

암호를 설정할 수 있으면 http://52.185.151.244:8080/로 이동하여 admin 이전에 사용자로 설정한 암호로 로그인합니다. 왼쪽 메뉴에서 YARN를 선택하고 Configs 탭에서 노드에 할당 할 메모리 (yarn.nodemanager.resource.memory-mb)를 8GB로 설정하고 저장 버튼을 클릭하여 반영합니다. 반영시 의존하는 설정 항목의 권장 값이 제시되므로 그대로 확인을 클릭합니다.





반영 후 다시 시작해야 할 서비스 메뉴 옆에 아이콘이 표시되므로 각 서비스를 다시 시작합니다.



Sparkling Water 설치



Sandbox 환경에 ssh로 로그인하고 wget에서 Sparkling Water의 zip 아카이브를 다운로드하고 확장합니다.
local$ ssh <sandbox-public-ip>.azure
sandbox$ wget http://h2o-release.s3.amazonaws.com/sparkling-water/rel-1.6/8/sparkling-water-1.6.8.zip
sandbox$ unzip sparkling-water-1.6.8.zip
HADOOP_CONF를 설정하고 spark-submit에서 Sparkling Water를 배포합니다.
sandbox$ export HADOOP_CONF_DIR=/etc/hadoop/conf
sandbox$ spark-submit --class water.SparklingWaterDriver --master yarn-client --num-executors 3 --driver-memory 1g --executor-memory 1g --executor-cores 1 sparkling-water-1.6.8/assembly/build/libs/*.jar
16/12/18 18:51:10 INFO REPLClassServer: Directory to save .class files to = /tmp/spark-c4c1570e-c560-411a-97b5-bb762a880d5b
16/12/18 18:51:11 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

中略

Sparkling Water Context:
 * H2O name: sparkling-water-hssh_-1726962807
 * cluster size: 3
 * list of used nodes:
  (executorId, host, port)
  ------------------------
  (2,sandbox.hortonworks.com,54323)
  (3,sandbox.hortonworks.com,54321)
  (1,sandbox.hortonworks.com,54325)
  ------------------------

  Open H2O Flow in browser: http://<sandbox-local-ip>:<port> (CMD + click in Mac OSX)

이제 Sparklink Water가 시작되고 http://<sandbox-local-ip>:<port>에 액세스하여 브라우저에서 웹 UI를 사용할 수 있습니다. 또한, 기동중에 아래와 같은 에러가 표시되었을 경우는, 전술한 YARN에서의 Node에의 할당 메모리 설정이 잘못되어 있을 가능성이 있습니다.
Initial has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient memory

Sparkling Water의 로그에 출력된 URL은 로컬 IP로 되어 있으므로, ssh의 PortForwarding등을 이용하거나, 또는 sshuttle 라고 하는 ssh proxy등을 이용해 액세스 할 필요가 있습니다. sshuttle을 이용하는 경우는 아래와 같이 실행합니다.
local$ sshuttle --dns -r <sandbox-public-ip>.azure <sandbox-local-ip>

이제 이전의 spark-submit 로그에 표시된 URLhttp://<sandbox-local-ip>:<port>/에 액세스하면 H2O Flow 화면이 표시됩니다.



H2O Flow로 MNIST



시작된 H2O Flow를 사용하여 MNIST 샘플을 실행해 봅니다. 웹 UI의 오른쪽 열에서 view example Flows를 클릭하고 DeepLearning_MNIST.flow를 선택하여 노트북을로드합니다.







메뉴의 Run All 버튼을 클릭하면 Notebook의 내용이 한번에 실행됩니다. 이 근처의 조작은 Sandbox에 포함된 Zeppelin과 거의 같습니다.



실행이 완료되면, Results 섹션 이하에 실행 결과의 그래프 및 메트릭스를 정리한 표가 출력되어 학습한 모델의 상세에 대해 확인할 수 있습니다.




요약



Hortonworks Sandbox에 Sparkling Water를 설정하고 웹 UI에서 MNIST 샘플을 실행할 수 있는 곳까지 확인했습니다. Spark에서 이용할 수 있는 Deep Learning Framework로는, 그 밖에도 Caffe on Spark나 Tensorflow on Spark, DeepLearning4J등이 있습니다만, 가장 셋업의 문턱이 낮고, 개발도 계속적으로 진행되고 있는 것이 이 Sparkling Water라는 인상 이었다.

좋은 웹페이지 즐겨찾기