hbase—从java客户端连接到mapr db(m3)

6tqwzwtp  于 2021-06-09  发布在  Hbase
关注(0)|答案(2)|浏览(388)

我正在尝试与一个简单的java应用程序中的maprdb表进行交互,该应用程序在一个m3mapr集群的节点中运行。似乎我可以连接到集群,但显然我不能正确连接到表。以下是代码片段:

Configuration configuration = new Configuration();
configuration.set("hbase.zookeeper.quorum", "192.168.2.1,192.168.2.2,192.168.2.3");
configuration.set("hbase.zookeeper.property.clientPort", "5181");
configuration.set("mapr.htable.impl", "com.mapr.fs.MapRHTable");
configuration.set("hbase.table.namespace.mappings", "*:/user/mapr/");

configuration = HBaseConfiguration.create(configuration);

HConnection connection = HConnectionManager.createConnection(configuration);

System.out.println("Is Master running? " + connection.isMasterRunning());

String tableName = args[0];

HTable table = (HTable) connection.getTable(tableName.getBytes());

for (HColumnDescriptor columnFamily : table.getTableDescriptor().getColumnFamilies()) {
    System.out.println("Column family: " + columnFamily.getNameAsString());
}

我有一个名为“/user/mapr/test\u table”的表(我在mapr web控制台中看到它,可以通过 hbase shell ). 使用表名的任何合理参数运行代码只会返回以下异常:

org.apache.hadoop.hbase.TableNotFoundException: /user/mapr/test_table
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getHTableDescriptor(HConnectionManager.java:2750)
    at org.apache.hadoop.hbase.client.HTable.getTableDescriptor(HTable.java:701)
    at it.noovle.bigdata.hadoop.MaprDBLocalTest.main(MaprDBLocalTest.java:49)

在一些地方,我读到了maprdb没有必要通过zookeeper连接。一般来说是真的还是只适用于m7?我现在正在跑步。
有没有从JavaHBaseAPI中寻址MAPRDB表的特定方法?在 hbase shell 我只使用'/user/mapr/test\u table'。
有人可以分享一个m3集群运行示例的好例子吗?

roejwanj

roejwanj1#

mapr允许您根据安装使用:
数据库
mapr数据库
表的“名称”定义这是“mapr db”还是“hbase”表:
完整路径(带/)是mapr db表 /apps/my_tables/users 简单字符串是hbase表 users 然后,根据表的名称,客户机到达集群的方式会有所不同:
mapr db:将使用cldb(默认值为server:7222)
hbase:将使用zookeeper(默认值为server:5181)
客户端代码在mapr db或hbase之间没有变化,只有表名和“configuration”发生了变化,我对配置的意思是:
您必须安装和配置mapr客户端
必须确保将所有依赖项都放在类路径中(hadoop客户机、hbase mapr客户机)
我这里有一个小项目

mv1qrgav

mv1qrgav2#

要连接到mapr db,您不需要连接到zookeeper。要打开表,必须提供绝对路径。例如/user/mapr/test\u表。下面附上一个简单的例子:

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.*;
import org.apache.hadoop.hbase.KeyValue;
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 HBaseExample {
    public static void main(String[] args) throws IOException {
        Configuration config = HBaseConfiguration.create();
        HTable table = new HTable(config, "/user/mapr/test_table");
        Put p = new Put(Bytes.toBytes("row1"));
        p.add(Bytes.toBytes("cf1"), Bytes.toBytes("col2"),
                Bytes.toBytes("ABC"));

        table.put(p);
        Get g = new Get(Bytes.toBytes("row1"));
        Result r = table.get(g);
        byte[] value = r.getValue(Bytes.toBytes("cf1"),
                Bytes.toBytes("col2"));

        String valueStr = Bytes.toString(value);
        System.out.println("GET: " + valueStr);
        Scan s = new Scan();
        s.addColumn(Bytes.toBytes("cf1"), Bytes.toBytes("col2"));
        ResultScanner scanner = table.getScanner(s);
        try {
            for (Result rr = scanner.next(); rr != null; rr = scanner.next()) {
                System.out.println("Found row: " + rr);
            }

        } finally {
            scanner.close();
        }
    }
}

这是hbase-site.xml,它来自mapr沙盒。

-bash-4.1$ cat ./hbase/hbase-0.98.7/conf/hbase-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>

  <property>
    <name>hbase.rootdir</name>
    <value>maprfs:///hbase</value>
  </property>

  <property>
<name>hbase.cluster.distributed</name>
<value>true</value>
  </property>

  <property>
<name>hbase.zookeeper.quorum</name>
<value>maprdemo</value>
  </property>

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

  <property>
    <name>dfs.support.append</name>
    <value>true</value>
  </property>

  <property>
    <name>hbase.fsutil.maprfs.impl</name>
    <value>org.apache.hadoop.hbase.util.FSMapRUtils</value>
  </property>

  <property>
    <name>hbase.regionserver.handler.count</name>
    <value>30</value>
    <!-- default is 25 -->
  </property>

  <!-- uncomment this to enable fileclient logging
  <property>
    <name>fs.mapr.trace</name>
    <value>debug</value>
  </property>
  -->

  <!-- Allows file/db client to use 64 threads -->
  <property>
    <name>fs.mapr.threads</name>
    <value>64</value>
  </property>

</configuration>
-bash-4.1$

相关问题