zookeeper client 'zk' 이용하기 (zkcli 한계 극복)
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
간단히 사용할 것이라 다음과 같이 적용했다.
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!