我目前正在编写一个小型 Java 小程序来使用 REST API 访问 HBase 数据。使用Java访问数据并不是特别困难,我已经成功地做到了。当在我的 HDP 集群中的机器上运行时,结果非常完美。但是,当作为小程序运行时,我根本没有得到任何结果。 (我选择了小程序,因为分发可执行 JAR 是我老板想要避免的事情)
终于找到了我认为的根本问题,我发现了以下运行时异常:hbase-default.xml file seems to be for an older version of HBase (null), this version is 1.1.2.2.4.0.0-169
。我的假设是,这是由于我的本地计算机根本没有 HBase 造成的。目的是用户将能够从本地计算机查看自己的数据,因此我不能期望所有用户都拥有 HBase(或浏览器以外的任何东西)
我的问题实际上有两个部分:
有没有办法让这样的小程序工作?
对于此类工作,是否有比小程序更好的替代方案?
发布我的代码,以防我犯了一些重大错误:
public class HBaseConnector extends JApplet
{
private Cluster cluster;
public void init()
{
System.out.println("Applet initialising");
cluster = new Cluster();
cluster.add("hbase_server", 9080);
}
public void start()
{
System.out.println("Applet starting");
Client client = new Client(cluster);
RemoteHTable table = new RemoteHTable(client, "table_name");
Get get = new Get(Bytes.toBytes("key"));
get.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("Record"));
try
{
Result result1 = table.get(get);
JOptionPane.showMessageDialog(null, Bytes.toString(result1.getValue(Bytes.toBytes("f1"), Bytes.toBytes("Record"))), "Result", JOptionPane.INFORMATION_MESSAGE);
}
catch (Exception ex)
{
System.err.println("Exception occurred");
}
}
public void stop()
{
System.out.println("Applet stopping");
}
public void destroy()
{
System.out.println("Applet destroyed");
}
}
最佳答案
虽然我无法解决小程序本身的这个问题,但我设法通过移动 JNLP 应用程序 ( JNLP ) 来使应用程序正常工作。鉴于此,我怀疑根本问题是由于小程序在沙箱中运行而导致的权限问题。这很好,因为我知道大多数浏览器正在放弃 Java 插件。
我发现的另一个可能的原因:hbase-default.xml 必须位于 jar 的根文件夹中。
关于java - 通过Java Applet访问HBase REST API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37568933/