使用java api连接hbase时遇到问题

6jygbczu  于 2021-06-03  发布在  Hadoop
关注(0)|答案(4)|浏览(351)

我的当地环境:
os x 10.9.2、hbase-0.94.17、java 1.6
我的hbase模式:独立
我可以在shell中进行操作,但当我使用javaapi时,它不起作用。
我的java代码:

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();
    }
  }
}

这是我的一些文件:

########################################### 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>

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

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

然后控制台就停在这里,什么也没有了
另外,我还将my/users/apple/documents/tools/hbase-0.94.17/logs/hbase apple…local.log附于此处:

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

感谢您的耐心,您的回答将对我有很大帮助:)

uttx8gqw

uttx8gqw1#

你不需要

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

如果将此添加到hbase-site.xml中。
并将其添加到hbase-site.xml: <property> <name>hbase.zookeeper.property.clientPort</name> <value>2181</value> </property>

t0ybt7op

t0ybt7op2#

在您的conf文件“hbase env.sh”中:而不是您正在使用的行: export HBASE_OPTS="-XX:+UseConcMarkSweepGC" 添加: -Djava.security.krb5.realm= -Djava.security.krb5.kdc= 所以这条线是 export HBASE_OPTS="-XX:+UseConcMarkSweepGC -Djava.security.krb5.realm= -Djava.security.krb5.kdc=" 在这里查找上下文:osx上的hadoop“无法从scdynamicstore加载领域信息”

fzsnzjdm

fzsnzjdm3#

我也遇到了这个问题。我的配置服务器名是hbase-site.xml,而不是ip,我的java客户机也陷入了这种情况。
因此,我将客户机系统主机设置为服务器名称,解决了这个问题。

rkue9o1l

rkue9o1l4#

首先,检查hbase-site.xml文件中的clientport:

<property>
  <name>hbase.zookeeper.property.clientPort</name>
  <value>2222</value>
</property>

在java程序中:必须将clientport设置为与hbase-site.xml文件中的相同:

Configuration config = HBaseConfiguration.create();
config.set("hbase.zookeeper.property.clientPort", "2222");

相关问题