JavaをリモートサーバのHBaseに接続しようとしています。ここでJavaをHBaseにリモート接続する
はケースです:
Javaクラスは私のローカルコンピュータ(192.168.111.165)
でHadoopのファイルシステムで、HBaseのは、別のサーバー(192.168.11.7)である
ここ(192.168.11.7で)私のHadoopのコア-site.xmlのです:
ここ<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.11.7:9000</value>
</property>
</configuration>
(192.168.11.7で)私のHadoopのHDFS-site.xmlのです:
は、ここでは<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>file:///home/hadoop/hadoopinfra/hdfs/namenode</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>file:///home/hadoop/hadoopinfra/hdfs/datanode</value>
</property>
</configuration>
(192.168.11.7で)私のHBaseのHBaseの-site.xmlのです:
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://192.168.11.7:9000/hbase</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/hadoop/zookeeper</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
</configuration>
私はHBaseのシェルで "リスト" コマンドを実行することができて、私は実績のある(成功したHDFSとHBaseのをオンにしています)。私はローカルコンピュータから192.168.11.7にsshを使ってHBase Shellで "list"コマンドを実行することに注意してください。 、
今(http://192.168.11.7:16010/:、HBaseのURLを押すことでhttp://192.168.11.7:8088/:URLを押すことでhttp://192.168.11.7:50070/、HadoopクラスタURLを押すことでHadoopの)私のローカルコンピュータ(192.168.111.165)から は、私はHadoopのファイルシステムとブラウザを使用してのHBaseにアクセスすることができます次のように
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://192.168.11.7:9000/hbase</value>
</property>
</configuration>
と私のメインコード::私は、HBaseの-site.xmlのを持っている私のローカルコンピュータ(192.168.111.165)、でJavaコードを開発
private static Configuration conf = null;
public static void main(String[] args) throws Exception {
try {
conf = HBaseConfiguration.create();
String tablename = "scores";
String[] familys = { "grade", "course" };
creatTable(tablename, familys);
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
public void creatTable(String tableName, String[] familys)
throws Exception {
HBaseAdmin admin = new HBaseAdmin(conf);
if (admin.tableExists(tableName)) {
System.out.println("table already exists!");
} else {
HTableDescriptor tableDesc = new HTableDescriptor(tableName);
for (int i = 0; i < familys.length; i++) {
tableDesc.addFamily(new HColumnDescriptor(familys[i]));
}
admin.createTable(tableDesc);
System.out.println("create table " + tableName + " ok.");
}
}
私は、コードを実行すると、 、ある例外で
org.apache.hadoop.hbase.client.RetriesExhaustedException: Can't get the locations
at org.apache.hadoop.hbase.client.RpcRetryingCallerWithReadReplicas.getRegionLocations(RpcRetryingCallerWithReadReplicas.java:319)
at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:156)
at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:60)
at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.java:210)
at org.apache.hadoop.hbase.client.ClientScanner.call(ClientScanner.java:326)
at org.apache.hadoop.hbase.client.ClientScanner.nextScanner(ClientScanner.java:301)
at org.apache.hadoop.hbase.client.ClientScanner.initializeScannerInConstruction(ClientScanner.java:166)
at org.apache.hadoop.hbase.client.ClientScanner.<init>(ClientScanner.java:161)
at org.apache.hadoop.hbase.client.HTable.getScanner(HTable.java:797)
at org.apache.hadoop.hbase.MetaTableAccessor.fullScan(MetaTableAccessor.java:602)
at org.apache.hadoop.hbase.MetaTableAccessor.tableExists(MetaTableAccessor.java:366)
at org.apache.hadoop.hbase.client.HBaseAdmin.tableExists(HBaseAdmin.java:406)
at org.apache.hadoop.hbase.client.HBaseAdmin.tableExists(HBaseAdmin.java:416)
at com.volt.kismistest.handler.TestHBaseHandler.creatTable(TestHBaseHandler.java:82)
at com.volt.kismistest.handler.TestHBaseHandler.doAction(TestHBaseHandler.java:47)
at com.volt.kismistest.handler.TestHBaseHandler.doAction(TestHBaseHandler.java:1)
注:場合(管理者:
TestHBaseHandlerは私のJavaクラスの名前
TestHBaseHandler.java:82がある私は、スタックトレースを持つ例外を得ました。 tableExists(tableName)){ creatTableメソッドの
TestHBaseHandler.java:47 is:creatTable(tablename、familys);メインメソッド
誰でもこの問題を解決できますか?
はあなたがlist
を実行することができると言いましたが、あなたは、特定のテーブルの上にcreate
とscan
を実行できますか?非常に多くの
(マスター・シェルから起動することができます)、私は「jsonlog」、「requestdata」を作成すなわち 、3列の家族に「jsonlog」テーブルを作成し、 '応答データ'、 'ユーザデータ' 'jsonlog'、 '1'、 'requestdata:requestmessage'、 'test'を入力してください。 'jsonlog'、 '1'、 'requestdata:requestdate'を入力してください。 'test' 'jsonlog'、 '1'、 'responsedata:responsemessage'、 'test'を入力してください 'jsonlog'、 '1'を入力してください 'jsonlog'、 '1'、 'responsedata:responsedate' 、 'userdata:user、' test ' 0 0.0310秒 –