使用java api连接Hbase时会卡住 [英] Get stuck when using java api to connect Hbase

查看:443
本文介绍了使用java api连接Hbase时会卡住的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的本​​地环境:

OS X 10.9.2,Hbase-0.94.17,Java 1.6

我的Hbase模式:standalone

我可以在shell中执行操作,但是当我使用java api时,它不起作用。



我的java代码:

  import java.io.IOException; 

导入org.apache.hadoop.conf.Configuration;
导入org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
导入org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
导入org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.util.Bytes;


public class MyLittleHBaseClient {
public static void main(String [] args)throws IOException {

Configuration config = HBaseConfiguration.create();
config.addResource(/ Users / apple / Documents / tools / hbase-0.94.17 / conf / hbase-site.xml);

HTable table = new HTable(config,myLittleHBaseTable);

把p = new Put(Bytes.toBytes(myLittleRow));

p.add(Bytes.toBytes(myLittleFamily),Bytes.toBytes(someQualifier),
Bytes.toBytes(Some Value));

table.put(p);

Get g = new Get(Bytes.toBytes(myLittleRow));
结果r = table.get(g);
byte [] value = r.getValue(Bytes.toBytes(myLittleFamily),
Bytes.toBytes(someQualifier));

String valueStr = Bytes.toString(value);
System.out.println(GET:+ valueStr);

扫描s =新扫描();
s.addColumn(Bytes.toBytes(myLittleFamily),Bytes.toBytes(someQualifier));
ResultScanner scanner = table.getScanner(s);
尝试{

for(Result rr = scanner.next(); rr!= null; rr = scanner.next()){
//打印出行找到和我们正在寻找的列
System.out.println(Found row:+ rr);
}

} finally {

scanner.close();



$ / code $ / pre
$ b $ p这里是我的一些conf doc:


#################################### ####### hbase-env.sh:

  export JAVA_HOME =`/ usr / libexec / java_home -v'1.6 *'` 
export HBASE_OPTS = - XX:+ UseConcMarkSweepGC



########## ################################# hbase-site.sh:

 <结构> 
<属性>
<名称> hbase.rootdir< /名称>
< value> file:///Users/apple/Documents/tools/hbase-0.94.17/hbase-rootdir/hbase< / value>
< / property>
<属性>
<名称> hbase.zookeeper.property.dataDir< / name>
<值> /Users/apple/Documents/tools/hbase-0.94.17/hbase-zookeeper/zookeeper< /值>
< / property>
< / configuration>

当我运行上面的java代码时,我得到以下信息:

  log4j:WARN记录器没有找到appender(org.apache.hadoop.metrics2.lib.MutableMetricsFactory)。 
log4j:WARN请正确初始化log4j系统。
log4j:WARN请参阅http://logging.apache.org/log4j/1.2/faq.html#noconfig了解更多信息。
2014-03-31 13:20:15.037 java [873:1003]无法从SCDynamicStore加载领域信息


$
$ b

然后控制台刚刚在这里停下来,什么都没有了(没有更多的回应)

另外我附加了我的/ Users / apple / Documents / tools /hbase-0.94.17/logs/hbase-apple...local.log here:

  https:// docs。 google.com/file/d/0BxtBre5A8J61Y2k3SXNtNGs1WXM/编辑

感谢您的耐心等待,您的答案将是对我有很大帮助:)

解决方案

在您的conf文件hbase-env.sh中:
而不是你有:

export HBASE_OPTS = - XX:+ UseConcMarkSweepGC

Add:

-Djava.security.krb5.realm = -Djava.security.krb5.kdc =
所以这行会是
export HBASE_OPTS = - XX:+ UseConcMarkSweepGC -Djava.security.krb5.realm = -Djava.security.krb5.kdc =

在这里寻找上下文:


My local environment:

OS X 10.9.2, Hbase-0.94.17, Java 1.6

My Hbase mode: standalone

I was able to do operation in shell, but when I used java api, it did not work.

My java code:

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.util.Bytes;


public class MyLittleHBaseClient {
  public static void main(String[] args) throws IOException {

    Configuration config = HBaseConfiguration.create();
    config.addResource("/Users/apple/Documents/tools/hbase-0.94.17/conf/hbase-site.xml");

    HTable table = new HTable(config, "myLittleHBaseTable");

    Put p = new Put(Bytes.toBytes("myLittleRow"));

    p.add(Bytes.toBytes("myLittleFamily"), Bytes.toBytes("someQualifier"),
      Bytes.toBytes("Some Value"));

    table.put(p);

    Get g = new Get(Bytes.toBytes("myLittleRow"));
    Result r = table.get(g);
    byte [] value = r.getValue(Bytes.toBytes("myLittleFamily"),
      Bytes.toBytes("someQualifier"));

    String valueStr = Bytes.toString(value);
    System.out.println("GET: " + valueStr);

    Scan s = new Scan();
    s.addColumn(Bytes.toBytes("myLittleFamily"), Bytes.toBytes("someQualifier"));
    ResultScanner scanner = table.getScanner(s);
    try {

      for (Result rr = scanner.next(); rr != null; rr = scanner.next()) {
        // print out the row we found and the columns we were looking for
        System.out.println("Found row: " + rr);
      }

    } finally {

      scanner.close();
    }
  }
}

Here is some of my conf doc:

###########################################hbase-env.sh:

export JAVA_HOME=`/usr/libexec/java_home -v '1.6*'`
export HBASE_OPTS="-XX:+UseConcMarkSweepGC"

###########################################hbase-site.sh:

<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>file:///Users/apple/Documents/tools/hbase-0.94.17/hbase-rootdir/hbase</value>
  </property>
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/Users/apple/Documents/tools/hbase-0.94.17/hbase-zookeeper/zookeeper</value>
  </property>
</configuration>

When I ran the java code above, I got the following information:

log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
2014-03-31 13:20:15.037 java[873:1003] Unable to load realm info from SCDynamicStore

and then the console just stopped here and gave nothing more.(no more response)

Also I attach my /Users/apple/Documents/tools/hbase-0.94.17/logs/hbase-apple...local.log here:

https://docs.google.com/file/d/0BxtBre5A8J61Y2k3SXNtNGs1WXM/edit

Thanks for your patient, your answer will be a great help to me :)

解决方案

In your conf file "hbase-env.sh": Instead of the lines that you are having :
export HBASE_OPTS="-XX:+UseConcMarkSweepGC"
Add :
-Djava.security.krb5.realm= -Djava.security.krb5.kdc=
So the line will be export HBASE_OPTS="-XX:+UseConcMarkSweepGC -Djava.security.krb5.realm= -Djava.security.krb5.kdc=" Look here for the context :
Hadoop on OSX "Unable to load realm info from SCDynamicStore"

这篇关于使用java api连接Hbase时会卡住的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆