More background on why I brought up the issue.
Since we cannot cache hbaseadmin, we call the following code in a dedicated
thread:
          try {
            HBaseConfiguration _conf = new HBaseConfiguration();
            HBaseAdmin _admin = new HBaseAdmin(_conf);
            isConnected = true;
            return _admin;
          } catch (ConcurrentModificationException _e) {
            _ex = _e;
          }

After some time, I saw:

Exception in thread "HBase-Connector" java.lang.OutOfMemoryError: Java heap
space
        at
com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl.createChunk(DeferredDocumentImpl.java:1921)
        at
com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl.ensureCapacity(DeferredDocumentImpl.java:1826)
        at
com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl.createNode(DeferredDocumentImpl.java:1840)
        at
com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl.createDeferredTextNode(DeferredDocumentImpl.java:534)
        at
com.sun.org.apache.xerces.internal.parsers.AbstractDOMParser.characters(AbstractDOMParser.java:1189)
        at
com.sun.org.apache.xerces.internal.xinclude.XIncludeHandler.characters(XIncludeHandler.java:1082)
        at
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:463)
        at
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
        at
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
        at
com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
        at
com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:225)
        at
com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:283)
        at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:180)
        at
org.apache.hadoop.conf.Configuration.loadResource(Configuration.java:1078)
        at
org.apache.hadoop.conf.Configuration.loadResources(Configuration.java:1029)
        at
org.apache.hadoop.conf.Configuration.getProps(Configuration.java:979)
        at
org.apache.hadoop.conf.Configuration.iterator(Configuration.java:1015)
        at
org.apache.hadoop.hbase.HBaseConfiguration.hashCode(HBaseConfiguration.java:63)
        at java.util.WeakHashMap.put(WeakHashMap.java:401)
        at
org.apache.hadoop.conf.Configuration.<init>(Configuration.java:213)
        at
org.apache.hadoop.conf.Configuration.<init>(Configuration.java:197)
        at
org.apache.hadoop.hbase.HBaseConfiguration.<init>(HBaseConfiguration.java:33)
        at
net.ks.datastore.HBaseDataStore.getHBaseAdmin(HBaseDataStore.java:159)
        at
net.ks.datastore.HBaseDataStore.isConnected(HBaseDataStore.java:476)
        at
net.ks.datastore.HBaseDataStore.access$100(HBaseDataStore.java:39)
        at net.ks.datastore.HBaseDataStore$1.run(HBaseDataStore.java:71)

On Mon, Mar 29, 2010 at 2:35 PM, Ted Yu <yuzhih...@gmail.com> wrote:

> https://issues.apache.org/jira/browse/HBASE-2391 has been filed.
>
> We call HBaseAdmin.isMasterRunning() to see if client has connection with
> HBase. If there is a working alternative, we'd love to use it.
>
> Thanks J-D.
>
>
> On Mon, Mar 29, 2010 at 2:25 PM, Jean-Daniel Cryans 
> <jdcry...@apache.org>wrote:
>
>> I think this method wasn't updated when we moved to Zookeeper (since
>> in pre-0.20, dead master = dead cluster), also looking at when this is
>> called, I only see it from HMerge and HBaseAdmin.isMasterRunning()...
>> which in turn isn't called anywhere in the java code (I think we call
>> it in the shell tho).
>>
>> So we should first consider if this method is useful at all, and if so
>> then what would be the best fix. For example, if you run a HMerge
>> while the master is down but the region servers are up, you're going
>> to end up with something wrong since it expects hbase to be completely
>> down.
>>
>> Can you open a jira to continue discussions there?
>>
>> Thx!
>>
>> J-D
>>
>> On Mon, Mar 29, 2010 at 2:01 PM, Ted Yu <yuzhih...@gmail.com> wrote:
>> > Hi,
>> > While going over TableServers.isMasterRunning() in HConnectionManager, I
>> see
>> > this:
>> >    public boolean isMasterRunning() {
>> >      if (this.master == null) {
>> >        try {
>> >          getMaster();
>> >
>> >        } catch (MasterNotRunningException e) {
>> >          return false;
>> >        }
>> >      }
>> >      return true;
>> >    }
>> > When isMasterRunning() is called the first time, if master is obtained
>> > successfully, master field would contain reference to HMasterInterface.
>> > Subsequent calls to isMasterRunning() wouldn't throw
>> > MasterNotRunningException even if master server stops responding to
>> clients.
>> >
>> > I think master.isMasterRunning() should be called if master isn't null.
>> >
>> > Regards
>> >
>>
>
>

Reply via email to