hbase에서 zookeeper의 znode 생성시 path의 의 단계가 많을 수록 고달파진다.  


atomic operation이라 'mkdir -p 디렉토리명'처럼 한번에 node 설정이 안되어서 일일히 아래와 같이 넣어야 하는데.. 이 방식은 jvm이 총 5번 뜨고 매번 connection을 맺는 구조라 그리 좋지 않다. 


  ${HBASE_HOME}/bin/hbase zkcli create '/apache' null >> "${ZK_LOG_FILE}" 2>&1
  ${HBASE_HOME}/bin/hbase zkcli create '/apache/phase' null >> "${ZK_LOG_FILE}" 2>&1
  ${HBASE_HOME}/bin/hbase zkcli create '/apache/phase/local' null >> "${ZK_LOG_FILE}" 2>&1
  ${HBASE_HOME}/bin/hbase zkcli create '/apache/phase/local/config' null >> "${ZK_LOG_FILE}" 2>&1
  ${HBASE_HOME}/bin/hbase zkcli create '/apache/phase/local/config/zoo' 'true' >> "${ZK_LOG_FILE}" 2>&1


이럴 때에는 ruby의 'zk'모듈(https://github.com/zk-ruby/zk)을 사용하면 된다.

자세한 예제는 아래에 있다. 예제는 single thread와 event queue 방식이 있다. 

https://github.com/zk-ruby/zk/wiki



간단히 사용할 것이라  다음과 같이 적용했다.  


zk.rb

# encoding: utf-8
require 'zk'

zk = ZK.new('localhost:2181')

zk.register('/apache/phase/local/config/zoo') {}
begin
  zk.create('/apache', '')
rescue ZK::Exceptions::NodeExists => msg
  puts msg
end

begin
  zk.create('/apache/phase', '')
rescue ZK::Exceptions::NodeExists =>msg
  puts msg
end

...


zk.close!



Posted by '김용환'
,