hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Wei-Chiu Chuang (JIRA)" <j...@apache.org>
Subject [jira] [Comment Edited] (HBASE-20145) HMaster start fails with IllegalStateException when HADOOP_HOME is set
Date Fri, 13 Apr 2018 16:54:00 GMT

    [ https://issues.apache.org/jira/browse/HBASE-20145?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16437475#comment-16437475
] 

Wei-Chiu Chuang edited comment on HBASE-20145 at 4/13/18 4:53 PM:
------------------------------------------------------------------

Thanks [~rohithsharma] now I understand why:

Turns out that if you point env HADOOP_HOME to a Hadoop3 path with hbase2.0 convenience binary,
the classpath will contain both Hadoop 2.7.4 and Hadoop 3 jar files. Effectively causing class
conflicts.

Since Hadoop 3 jars are available, HBase is able to query StreamCapabilities of the output
stream. However, because Hadoop 2.7.4 jars is loaded before Hadoop 3 jars in classpath, it
loaded the HdfsDataOutputStream class implemented in Hadoop 2.7.4, which does not inherit
from StreamCapabilities.
{code:java}
if (StreamCapabilities.CLASS.isAssignableFrom(stream.getClass())) {
        try {
          result = ((Boolean)StreamCapabilities.METHOD.invoke(stream, capability)).booleanValue();
        } catch (IllegalAccessException|IllegalArgumentException|InvocationTargetException
            exception) {
          LOG.warn("Your Hadoop installation's StreamCapabilities implementation doesn't match
" +
              "our understanding of how it's supposed to work. Please file a JIRA and include
" +
              "the following stack trace. In the mean time we're interpreting this behavior
" +
              "difference as a lack of capability support, which will probably cause a failure.",
              exception);
        }
      }
{code}

This is not a problem in the code itself. But the code can be improved to log a warning message
when output stream class does not inherit from StreamCapabilities.


was (Author: jojochuang):
Thanks [~rohithsharma] now I understand why:

Turns out that if you point env HADOOP_HOME to a Hadoop3 path with hbase2.0 convenience binary,
the classpath will contain both Hadoop 2.7.4 and Hadoop 3 jar files. Effectively causing class
conflicts.

Since Hadoop 3 jars are available, HBase is able to query StreamCapabilities of the output
stream. However, because Hadoop 2.7.4 jars is loaded before Hadoop 3 jars in classpath, it
loaded the HdfsDataOutputStream class implemented in Hadoop 2.7.4, which does not inherit
from StreamCapabilities.
{code:java}
if (StreamCapabilities.CLASS.isAssignableFrom(stream.getClass())) {
        try {
          LOG.warn("stream type = " + stream.getWrappedStream().getClass().getCanonicalName());
          result = ((Boolean)StreamCapabilities.METHOD.invoke(stream, capability)).booleanValue();
        } catch (IllegalAccessException|IllegalArgumentException|InvocationTargetException
            exception) {
          LOG.warn("Your Hadoop installation's StreamCapabilities implementation doesn't match
" +
              "our understanding of how it's supposed to work. Please file a JIRA and include
" +
              "the following stack trace. In the mean time we're interpreting this behavior
" +
              "difference as a lack of capability support, which will probably cause a failure.",
              exception);
        }
      }
{code}

This is not a problem in the code itself. But the code can be improved to log warning message
when output stream class does not inherit from StreamCapabilities.

> HMaster start fails with IllegalStateException when HADOOP_HOME is set
> ----------------------------------------------------------------------
>
>                 Key: HBASE-20145
>                 URL: https://issues.apache.org/jira/browse/HBASE-20145
>             Project: HBase
>          Issue Type: Bug
>         Environment: HBase-2.0-beta1.
> Hadoop trunk version.
> java version "1.8.0_144"
>            Reporter: Rohith Sharma K S
>            Assignee: Wei-Chiu Chuang
>            Priority: Critical
>
> It is observed that HMaster start is failed when HADOOP_HOME is set as env while starting
HMaster. HADOOP_HOME is pointing to Hadoop trunk version.
> {noformat}
> 2018-03-07 16:59:52,654 ERROR [master//10.200.4.200:16000] master.HMaster: Failed to
become active master
> java.lang.IllegalStateException: The procedure WAL relies on the ability to hsync for
proper operation during component failures, but the underlying filesystem does not support
doing so. Please check the config value of 'hbase.procedure.store.wal.use.hsync' to set the
desired level of robustness and ensure the config value of 'hbase.wal.dir' points to a FileSystem
mount that can provide it.
>     at org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.rollWriter(WALProcedureStore.java:1036)
>     at org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.recoverLease(WALProcedureStore.java:374)
>     at org.apache.hadoop.hbase.procedure2.ProcedureExecutor.start(ProcedureExecutor.java:532)
>     at org.apache.hadoop.hbase.master.HMaster.startProcedureExecutor(HMaster.java:1232)
>     at org.apache.hadoop.hbase.master.HMaster.startServiceThreads(HMaster.java:1145)
>     at org.apache.hadoop.hbase.master.HMaster.finishActiveMasterInitialization(HMaster.java:837)
>     at org.apache.hadoop.hbase.master.HMaster.startActiveMasterManager(HMaster.java:2026)
>     at org.apache.hadoop.hbase.master.HMaster.run(HMaster.java:547)
>     at java.lang.Thread.run(Thread.java:748)
> {noformat}
> The same configs is working in HBase-1.2.6 build properly. 



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Mime
View raw message