标签: hbase

HBase 对 RowKey 中通配符的支持

我想知道 HBase 是否支持 RowKey 扫描的通配符。类似于:

select * from TABLE where KEY like '%SEARCH_KEY%';
Run Code Online (Sandbox Code Playgroud)

据我所知,如果我们对行键的前缀有一定的了解,我们可以使用部分键扫描(并且 HBase 在该扫描方面非常有效)。但是,如果我们没有信息前缀(意味着搜索键可能位于 RowKey 中的任何位置),那么 Hbase 必须运行全表扫描,对吗?

另外,如何在 HBase 中形成这样的查询(代码或通过 shell)?

hbase

5
推荐指数
1
解决办法
6628
查看次数

在 scan.setCaching(cacheRow) 中设置较高值时,Hbase 扫描不返回所有行

    Scan s = new Scan();
    s.addFamily(Bytes.toBytes("cf1"));
    s.setCaching(cacheRows);
    s.setCacheBlocks(false);
    s.setStartRow("30.0.2.2\01441756800\0");
    s.setStopRow("30.0.2.3\01441756800\0");

    ResultScanner scanner = table.getScanner(s);

    long rows = 0;
    try {
        for (Result rr = scanner.next(); rr != null; rr = scanner.next()) {
            rows++;
        }
    } finally {
        scanner.close();
    }

    System.out.println("Total no of rows = " + rows);
Run Code Online (Sandbox Code Playgroud)

当我使用 cacheRows = 100 或 10000 运行上面的代码时,它会打印 Total no of rows = 480000

当我使用 cacheRows = 100000 运行上面的代码时,它会打印 Total no of rows = 10090

cacheRows = 10083 打印 480000

cacheRows = 10084 打印 …

hbase

5
推荐指数
1
解决办法
1245
查看次数

如何在 Hbase shell 中组合过滤器?

我想从 hbase 表中选择一些行,如何设置多重过滤器?看来这AND不起作用。我尝试过两种方法。

scan 'hbase_table', { FILTER => "(RowFilter(=, 'regexstring:39$') AND SingleColumnValueFilter ('binary:family','binary:qualifier', '=', 'value')" }
Run Code Online (Sandbox Code Playgroud)

或者

scan 'hbase_table', {LIMIT => 10, FILTER => "(RowFilter.new(CompareFilter::CompareOp.valueOf('EQUAL'), RegexStringComparator.new("39$")) AND SingleColumnValueFilter.new(Bytes.toBytes('family'), Bytes.toBytes('qualifier'), CompareFilter::CompareOp.valueOf('EQUAL'), Bytes.toBytes('value')))", COLUMNS => 'family:qualifier'}
Run Code Online (Sandbox Code Playgroud)

非常感谢

shell command hbase filter

5
推荐指数
1
解决办法
8909
查看次数

Hbase从单元格中提取值和时间戳

在 hbase 中,我有列数:名称、城市……
并非所有列都有值(例如,某些行只能有“名称”)

我想提取行中的所有列+列的时间戳(按特定顺序),如果值为空,我想返回空字符串。

我面临的问题是,我必须Result通过“family”和“qualifier”访问列(我无法通过索引访问,result.listCells().get(i)因为会跳过空值)

scan.addColumn(Bytes.toBytes("personal data"), Bytes.toBytes("name"));
scan.addColumn(Bytes.toBytes("personal data"), Bytes.toBytes("city"));

ResultScanner scanner = table.getScanner(scan);

for (Result result = scanner.next(); result != null; result = scanner.next()){

    byte [] valCity = result.getValue("personal data", "city"); //can't get timestamp using this
  //check if valCity null write ("") else write the value
  //next column... 
}
Run Code Online (Sandbox Code Playgroud)

java hbase

5
推荐指数
1
解决办法
4720
查看次数

如何在 HbaseTestingUtility 中更改 HBase 基本目录

我在 IntelliJ IDE 中运行 HbaseTestingUtility 时遇到问题,我可以看到以下错误可能是由于文件名太长造成的:

16/03/14 22:45:13 WARN datanode.DataNode: IOException in BlockReceiver.run(): 
java.io.IOException: Failed to move meta file for ReplicaBeingWritten, blk_1073741825_1001, RBW
getNumBytes()     = 7
getBytesOnDisk()  = 7
getVisibleLength()= 7
getVolume()       = C:\Users\user1\Documents\work\Repos\hadoop-analys\reporting\mrkts-surveillance\target\test-data\9654a646-e923-488a-9e20-46396fd15292\dfscluster_6b264e6b-0218-4f30-ad5b-72e838940b1e\dfs\data\data1\current
getBlockFile()    = C:\Users\user1\Documents\work\Repos\hadoop-analys\reporting\mrkts-surveillance\target\test-data\9654a646-e923-488a-9e20-46396fd15292\dfscluster_6b264e6b-0218-4f30-ad5b-72e838940b1e\dfs\data\data1\current\BP-429386217-192.168.1.110-1457991908038\current\rbw\blk_1073741825
bytesAcked=7
bytesOnDisk=7 from C:\Users\user1\Documents\work\Repos\hadoop-analys\reporting\mrkts-surveillance\target\test-data\9654a646-e923-488a-9e20-46396fd15292\dfscluster_6b264e6b-0218-4f30-ad5b-72e838940b1e\dfs\data\data1\current\BP-429386217-192.168.1.110-1457991908038\current\rbw\blk_1073741825_1001.meta to    C:\Users\user1\Documents\work\Repos\hadoop-analys\reporting\mrkts-surveillance\target\test-data\9654a646-e923-488a-9e20-46396fd15292\dfscluster_6b264e6b-0218-4f30-ad5b-72e838940b1e\dfs\data\data1\current\BP-429386217-192.168.1.110-1457991908038\current\finalized\subdir0\subdir0\blk_1073741825_1001.meta
   at     org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl.moveBlockFiles(FsDatasetImpl.java:615)
at org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.BlockPoolSlice.addBlock(BlockPoolSlice.java:250)
at org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsVolumeImpl.addBlock(FsVolumeImpl.java:229)
at org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl.finalizeReplica(FsDatasetImpl.java:1119)
at org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl.finalizeBlock(FsDatasetImpl.java:1100)
at org.apache.hadoop.hdfs.server.datanode.BlockReceiver$PacketResponder.finalizeBlock(BlockReceiver.java:1293)
at org.apache.hadoop.hdfs.server.datanode.BlockReceiver$PacketResponder.run(BlockReceiver.java:1233)
at java.lang.Thread.run(Thread.java:745)
Caused by: 3: The system cannot find the path specified.
Run Code Online (Sandbox Code Playgroud)

知道吗,我如何指定 Hbasetestingutility 的基目录而不使用这个庞大的起始目录?

谢谢,

windows hbase scala intellij-idea hbasetestingutility

5
推荐指数
1
解决办法
1296
查看次数

hbase客户端API卡在table.get(行),

我正在使用hbase的本机API编写Hbase Java客户端.

我可以使用我创建的Hbase客户端连接到hbase并运行各种查询.我使用"hbase classpath"命令运行我的hbase客户端.这解决了所有依赖项.

现在我们希望这个hbase客户端成为项目的一部分,并将其作为其组件之一.因此,在集成之后,我们需要将其作为项目的War文件的一部分运行(我们需要将其作为rest API的一部分运行).我添加了hbase-site.xml.hdfs-site.xml和core-site.xml作为资源,并设置为Resource to configuration object.

Configuration conf = HBaseConfiguration.create()

URL hbaseUrl=HbaseManagerServiceImpl.class.getClassLoader().getResource("hbase-site.xml");
conf.addResource(hbaseUrl.toString());
URL hdfsUrl=HbaseManagerServiceImpl.class.getClassLoader().getResource("hdfs-site.xml");
conf.addResource(hdfsUrl.toString());
URL coreUrl=HbaseManagerServiceImpl.class.getClassLoader().getResource("core-site.xml");
conf.addResource(coreUrl.toString());
Run Code Online (Sandbox Code Playgroud)

当我试图只添加core-site.xml时,我收到错误说"包含失败"哪个文件存在于该主机上,因此在资源较旧时添加了该文件,这解决了我的问题.

HTable table = new HTable(conf , "tableName");
Run Code Online (Sandbox Code Playgroud)

我可以成功扫描并获取行操作并获取结果.

Scan scanTable = new Scan();
Get row = new Get(key);
Run Code Online (Sandbox Code Playgroud)

但是当我尝试做"Result rowData = table.get(row); "

我的代码卡住了,没有显示任何错误.

我可以使用""hbase classpath"命令运行相同的代码.我是否需要设置$ HADOOP_CLASSPATH和$ HBASE_CLASSPATH变量,我通过jetty webserver运行我的代码.

以下是错误跟踪:

java.io.InterruptedIOException: Giving up trying to location region in meta: thread is interrupted.
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegionInMeta(HConnectionManager.java:1391)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:1169)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:1123)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getRegionLocation(HConnectionManager.java:964)
at org.apache.hadoop.hbase.client.RegionServerCallable.prepare(RegionServerCallable.java:72)
at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.java:113)
at org.apache.hadoop.hbase.client.HTable.get(HTable.java:780)
at …
Run Code Online (Sandbox Code Playgroud)

java hadoop hbase hadoop2

5
推荐指数
1
解决办法
1174
查看次数

CDH Hue和Hbase身份验证

我是CDH的新手(我使用的当前版本是5.7.1)

我已经添加了HBase thrift角色并在Hue中设置,但我仍然遇到以下问题.

错误图片

HBase Browser   Failed to authenticate to HBase Thrift Server, check authentication configurations. 
Run Code Online (Sandbox Code Playgroud)

有人可以帮我吗?

hbase thrift hue

5
推荐指数
1
解决办法
2138
查看次数

存储传入流数据的最佳方式是什么?

对于通过 Spark Streaming 处理的数据的长期存储(多次写入,少量读取),哪个更好的选择:Parquet、HBase 还是 Cassandra?或者是其他东西?有哪些权衡?

hbase cassandra apache-spark parquet spark-streaming

5
推荐指数
1
解决办法
2727
查看次数

运行命令“hbase classpath”时出错

我想将 hbase 类路径添加到我的 spark 中,但是在运行hbase classpath命令时出现错误。

我在 env 中使用 java 1.8 在本地设置了 hadoop 3.2.0。

$ hbase 类路径

/usr/lib/hadoop/libexec/hadoop-functions.sh:第 2364 行:HADOOP_ORG.APACHE.HADOOP.HBASE.UTIL.GETJAVAPROPERTY_USER:无效的变量名称 /usr/lib/hadoop/libexec/hadoop-functions.sh:第 2459 行:HADOOP_ORG.APACHE.HADOOP.HBASE.UTIL.GETJAVAPROPERTY_OPTS:无效的变量名错误:无法找到或加载主类org.apache.hadoop.hbase.util.GetJavaProperty

hadoop hbase

5
推荐指数
1
解决办法
680
查看次数

当我能够从 Kafka 恢复数据时的 HBase ASYNC WAL

我想优化我对 HBase 的使用以加快写入速度。我有一个任务从 Kafka 主题中读取,然后基于该主题写入 HBase。由于 Kafka 将记录所有要写入的内容,因此很容易从中恢复。我正在阅读“HBase High Perormance Cookbook”,并有以下说明:

请注意,这带来了关于何时使用 WAL 以及何时不使用的有趣想法。默认情况下,WAL 写入处于开启状态,并且数据始终写入 WAL。但是,如果您确定可以重写数据或少量丢失不会影响处理的整体结果,则可以禁用对 WAL 的写入。WAL 提供了简单而明确的恢复。这是默认情况下始终启用它的根本原因。在无法预料数据丢失的情况下,您应该将其保留为默认设置;否则,将其更改为使用 memstore。或者,您可以计划 DR(灾难恢复)

如何将此恢复配置为自动?我看到两个选项:

  1. 我在没有 WAL 的情况下写入 HBase(仅写入 memstore),并以某种方式通知写入丢失且未提交到磁盘。然后我回到 Kafka 日志并重播。或者
  2. 我在没有 WAL 的情况下写入 HBase(仅写入 memstore),并且经常从 HBase 收到通知,可以提交什么 Kafka 偏移量。

我该怎么做?

java hbase disaster-recovery apache-kafka

5
推荐指数
0
解决办法
189
查看次数