Configurando el intérprete de zeppelin para hbase en hdp 2.4
Dentro de un proyecto de bigdata que estamos haciendo hemos usado
como notebook del proyecto, zeppelin de apache. El
ecosistema completo incluye ambari 2.2 y el HDP-2.4.
La cuestión es que justo este intérprete parece que tiene un bug para
esta versión y que no funciona correctamente. Para hacelo funcionar
hemos tenido que modificar dos cosas
- Cambiar las librerías de hbase que incluye el interprete por las
de la versión de HDP-2.4 - Añadir la siguiente variable de entorno al scritp de arranque de
zeppelin HBASE_CONF_DIR apuntando a /usr/hdp/current/etc/hbase/conf
Con estos dos cambios hemos conseguido que funcione el interprete de
hbase desde zeppelin. Los errores que nos pueden dar la pista de que
esto es lo que está pasando en nuestro entorno son
org.apache.zeppelin.interpreter.InterpreterException: org.jruby.embed.EvalFailedException: (NameError) cannot load Java class org.apache.hadoop.hbase.quotas.ThrottleType at org.apache.zeppelin.interpreter.ClassloaderInterpreter.open(ClassloaderInterpreter.java:76) at org.apache.zeppelin.interpreter.LazyOpenInterpreter.open(LazyOpenInterpreter.java:68) at org.apache.zeppelin.interpreter.LazyOpenInterpreter.getProgress(LazyOpenInterpreter.java:109) Y el siguiente ERROR [2017-02-02 13:52:43,126] ({pool-2-thread-2} ZooKeeperWatcher.java[keeperException]:648) - hconnection-0x3f389c0f0x0, quorum=localhost:2181, baseZNode=/hbase Received unexpected KeeperException, re-throwing exception org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hbase at org.apache.zookeeper.KeeperException.create(KeeperException.java:99) at org.apache.zookeeper.KeeperException.create(KeeperException.java:51) at org.apache.zookeeper.ZooKeeper.exists(ZooKeeper.java:1045) at org.apache.hadoop.hbase.zookeeper.RecoverableZooKeeper.exists(RecoverableZooKeeper.java:221) at org.apache.hadoop.hbase.zookeeper.ZKUtil.checkExists(ZKUtil.java:541) at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.checkIfBaseNodeAvailable(ConnectionManager.java:895) at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.access$400(ConnectionManager.java:545) at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation$StubMaker.makeStubNoRetries(ConnectionManager.java:1483) at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation$StubMaker.makeStub(ConnectionManager.java:1524) at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation$MasterServiceStubMaker.makeStub(ConnectionManager.java:1553) at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.getKeepAliveMasterService(ConnectionManager.java:1704) at org.apache.hadoop.hbase.client.MasterCallable.prepare(MasterCallable.java:38)
que nos indica que la versión de hbase no es la correcta , y
ERROR [2017-02-02 13:52:43,125] ({pool-2-thread-2} RecoverableZooKeeper.java[retryOrThrow]:277) - ZooKeeper exists failed after 4 attempts ERROR [2017-02-02 13:52:43,126] ({pool-2-thread-2} ZooKeeperWatcher.java[keeperException]:648) - hconnection-0x3f389c0f0x0, quorum=localhost:2181, baseZNode=/hbase Received unexpected KeeperException, re-throwing exception org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hbase at org.apache.zookeeper.KeeperException.create(KeeperException.java:99) at org.apache.zookeeper.KeeperException.create(KeeperException.java:51) at org.apache.zookeeper.ZooKeeper.exists(ZooKeeper.java:1045) at org.apache.hadoop.hbase.zookeeper.RecoverableZooKeeper.exists(RecoverableZooKeeper.java:221) at org.apache.hadoop.hbase.zookeeper.ZKUtil.checkExists(ZKUtil.java:541) at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.checkIfBaseNodeAvailable(ConnectionManager.java:895) at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.access$400(ConnectionManager.java:545) at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation$StubMaker.makeStubNoRetries(ConnectionManager.java:1483) at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation$StubMaker.makeStub(ConnectionManager.java:1524) at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation$MasterServiceStubMaker.makeStub(ConnectionManager.java:1553) at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.getKeepAliveMasterService(ConnectionManager.java:1704) at org.apache.hadoop.hbase.client.MasterCallable.prepare(MasterCallable.java:38) at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.java:124) at org.apache.hadoop.hbase.client.HBaseAdmin.executeCallable(HBaseAdmin.java:3917) at org.apache.hadoop.hbase.client.HBaseAdmin.listTableNames(HBaseAdmin.java:413) at org.apache.hadoop.hbase.client.HBaseAdmin.listTableNames(HBaseAdmin.java:407) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43
para detectar que la configuración no es la correcta porque no está
apuntando a /hbase-unsecure en el zookeeper.
Con estos dos cambios y reiniciando zeppelin desde ambiar ya podemos
usar %hbase desde el notebook
Espero que si a alguien le sucede lo mismo esto le pueda sevir. No he
hecho más que un list desde hbase así que igual puede que más cosas
estén mal configuradas.