我的当地环境:
OS X 10.9.2,Hbase-0.94.17,Java 1.6
我的Hbase模式:独立
我能够在shell中进行操作,但是当我使用java api时,它无效。
我的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();
}
}
}
以下是我的一些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>
当我运行上面的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
然后控制台刚刚停在这里并且没有提供任何其他内容。(没有更多回复)
另外,我在这里附上我的/Users/apple/Documents/tools/hbase-0.94.17/logs/hbase-apple...local.log:
https://docs.google.com/file/d/0BxtBre5A8J61Y2k3SXNtNGs1WXM/edit
感谢您的患者,您的回答对我很有帮助:)
答案 0 :(得分:0)
在你的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="
在此处查看上下文:Hadoop on OSX "Unable to load realm info from SCDynamicStore"
答案 1 :(得分:0)
您不需要
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>
答案 2 :(得分:0)
我也遇到了这个问题。 我在hbase-site.xml而不是IP中有配置服务器名称, 我的java客户端也陷入了这种情况。
所以我将我的客户端系统主机设置为服务器名称,我解决了这种情况。
答案 3 :(得分:0)
首先,检查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");