HBase의 Zookeeper의 역할은 주로 replication이나 failover에 중요한 역할로 알려져 있다.


Zookeeper plays a key role in HBase Replication, where it manages/coordinates almost all the major replication activity, such as registering a slave cluster, starting/stopping replication, enqueuing new WALs, handling regionserver failover, etc. 


출처 : http://blog.cloudera.com/blog/2012/07/hbase-replication-overview-2/



최근 hbase 에 zookeeper에 read/write locks을 할 수 있도록 0.95.0에 반영되었다. 0.95.0이후 버전을 사용하는 경우 lock기능이 작동된다. 


HBASE-7305. ZK based Read/Write locks for table operations  


zookeeper를 이용해 table operation시 locking하는데 사용한다. master가 table schema 변경시 동기(sync)를 지원한다. 


Hbase설정에 따르면, 기본적으로 zookeeper를 lock용으로 쓰고 있음을 확인할 수 있다. 


hbase.table.lock.enable

Set to true to enable locking the table in zookeeper for schema change operations. Table locking from master prevents concurrent schema modifications to corrupt table state.

Default: true




참고로 Row locks 을 쓴다고 해서 Zookeeper를 사용하지 않는다. 왜냐하면 구현상 하나의 row는 하나의 Region서버에 저장하기 때문이다. 이는 분산락(distributed lock)이 필요없다는 것이다. 따라서 대신 빠른 성능을 줄 수 있다.  또한, Region 서버가 새롭게 만들어지거나 재시작할때 row lock은 동작되지 않는다. 개런티를 전혀 할 수 없다.  


그래서, Client코드에서 API(ClientProts, HTable 등등)를 통해서 lockRow, unlockRow하는 코드는 사라졌다. 


출처 : https://issues.apache.org/jira/browse/HBASE-7315





Posted by '김용환'
,