- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习 Accumulo,似乎无法让 Range 中指定的结束键包含在内。我的代码如下。我尝试在 Range
中将 endKeyInclusive
显式设置为 true
,但这没有帮助。
BatchWriter writer = conn.createBatchWriter("table", config);
List<String> deterTimes = new ArrayList<>();
String rowId = "3015551212<ll>";
String columnFamily = "deter";
for (int i = 0; i < 10; i++) {
String deterTime = "20181112:21:46:33" + i;
deterTimes.add(deterTime);
writer.addMutation(makeRecord(rowId, columnFamily, deterTime, "DETER" + i));
}
writer.flush();
writer.close();
Scanner scan = conn.createScanner("table", auths);
Key startKey = new Key(rowId.getBytes(), columnFamily.getBytes(), deterTimes.get(1).getBytes());
Key endKey = new Key(rowId.getBytes(), columnFamily.getBytes(), deterTimes.get(4).getBytes());
Range range = new Range(startKey, endKey);
if (range.isEndKeyInclusive()) System.out.println("true");
scan.setRange(range);
for (Entry<Key,Value> entry : scan) {
Text row = entry.getKey().getRow();
Text cq = entry.getKey().getColumnQualifier();
Value value = entry.getValue();
System.out.println("Fetched row " + row + " with value: " + value + ", cq=" + cq);
}
输出:
true
Fetched row 3015551212<ll> with value: DETER1, cq='20181112:21:46:331'
Fetched row 3015551212<ll> with value: DETER2, cq='20181112:21:46:332'
Fetched row 3015551212<ll> with value: DETER3, cq='20181112:21:46:333'
最佳答案
您正在使用(行、列族、列限定符)
作为字节数组以及该键的其余维度(列可见性、时间戳)
构建结束键设置为默认值(具体来说,分别是空字节数组和 Long.MAX_VALUE
)。
扫描仪将停在该确切的键处(包括该键)。但是,您的实际数据输入几乎肯定不是那个准确 key (您没有提供 makeRecord
的实现来验证)。即使您的数据实际上具有空列可见性,时间戳几乎肯定不是 Long.MAX_VALUE
,而是您在 makeRecord
实现中设置的内容,或者是基于tserver 的时间或某个表逻辑计数器。由于 key 的时间戳维度按降序排列,因此您的扫描器将在到达您的条目之前停止在 Long.MAX_LONG
处查找数据。
这有点像在字典中搜索analogy
,但是当您到达analog
时停止:您将错过以analog<开头的其余单词
.
这是基于精确键构建范围时的常见陷阱。通常,基于行构建范围(包含行将包含整行)而不是键(有一个 Range
constructor for that )会更好。或者,指定结束键以使其独占运行。您可以通过将空字节附加到列的最后一个有意义的元素的末尾来完成此操作。例如,您可以执行以下操作:
Key endKey = new Key(rowId.getBytes(),
columnFamily.getBytes(),
(deterTimes.get(4) + "\0").getBytes());
Range range = new Range(startKey, true, endKey, false);
您应该注意的另一个陷阱是使用 String.getBytes()
来获取字节数组,而不指定编码。最好使用一致的东西,例如 "abc".getBytes(StandardCharsets.UTF_8)
(不过,我通常会进行静态导入,因此我只能指定 UTF_8
)。
关于java - Accumulo 范围 - 不包含结束键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53272215/
我的虚拟机详细信息: Cloudera 快速入门 VM 5.5.0 VM = VM 工作站 12 播放器 Windows = Windows 10/64 位 Java = Java 1.8 当我运行“
我想为我的本地机器清除 accumulo 中的所有记录,并想删除在测试时创建的未使用的表。我发现可以从 accumulo shell 使用 delete table 命令,但是这将需要大量手动工作来删
我正在使用 Accumulo 1.6,并且希望通过 Nodejs 中的 Accumulo 代理客户端给定的 rowkey 来删除一些记录。 但是当我尝试将相同的行键放入deleteRows API 时
我在初始化 accumulo 时创建了一个实例,方法是调用 累积初始化 但现在我想删除该实例,并且我想创建一个新实例。 任何人都可以帮助做到这一点吗? 最佳答案 从 HDFS 中删除 $ACCUMUL
在我的系统中,Hadoop和Zookeeper正常工作。现在我刚刚配置了Accumulo。但是当我要通过以下方式初始化Accumulo时 累积初始 它显示以下错误。 [root@hydDev32 bi
我一直在尝试安装 Accumulo 并试用了几天,但它甚至在开始之前就已经备货了。我最终使用了安装了 Hadoop 和 Zookeeper 的 HortonWorks Sandbox。我按照 Accm
我想将流数据写入accumulo!。有任何用于累积写入数据的API。可以用python代替java吗? 最佳答案 通过BatchWriter实例化查看Connector。 Accumulo Thrif
有没有办法对扫描仪获得的条目进行排序?我遇到的问题是,我有后缀索引来减少重复的行 ID,并且当我扫描时,我没有得到完美的升序有序列表。例如,我得到如下所示的内容: RowId: 2013-08-05
我已将一些行插入到 Accumulo 的表格中。有些行是新创建的,有些行是更新的。 如何找到插入或更新到Java 中的累加表? def obj= jsonObject["obj"] for(entry
我正在努力学习 Accumulo。但我有几个问题无法直接找到: 首先,我们能否在不停机的情况下向现有的 Accumulo 系统添加新服务器?如果是,则新节点将由 master 安排其共享(DB 数据)
Accumulo 无法加载、删除或创建新表。我的默认用户是 root。 Master 和 tablet server 和 zookeeper 还活着。 早些时候我试图通过使用 accululo ini
我的 Accumulo 实例已损坏。当我启动我的实例时,它抛出了一个错误,指出我的元数据表已损坏。然后我从 hdfs 的 Accumulo 目录备份了我的数据,并在我的实例上做了一个初始化。我没有意识
./bin/accumulo shell -u root Password: ****** 2015-02-14 15:18:28,503 [impl.ServerClient] WARN : The
简而言之,我有一个客户想要将一堆 ASCII 文本文件(又名“输入文件”)中包含的数据摄取到 Accumulo 中。 这些文件是从不同的数据馈送设备输出的,并将在非 Hadoop/非 Accumulo
我一直在运行一个单节点 Accumulo 应用程序,只要客户端应用程序在同一台机器上运行,它就一直运行良好。现在我需要将客户端迁移到另一台机器,但运行应用程序会给出以下警告,不允许程序继续: WARN
我正在学习 Accumulo,似乎无法让 Range 中指定的结束键包含在内。我的代码如下。我尝试在 Range 中将 endKeyInclusive 显式设置为 true,但这没有帮助。 Batch
请问有没有办法让accumlo限制用户的扫描量?例如,每天只允许其他用户进行 10 次扫描。 最佳答案 Accumulo 有一个可插拔接口(interface) authentication和 tab
我想使用 GeoMesa(Accumulo 的 GIS 扩展)并使用 Docker 对其进行虚拟化,就像 this repo 一样。现在我想使用 Java 连接到 Accumulo 实例: Inst
我无法让批处理扫描仪只扫描特定行,当设置启动和停止键到相同的东西时我没有返回任何条目,当使用扫描仪时我得到这个异常: "java.lang.IllegalArgumentException: Star
当您向总大小超过设置缓冲区的 BatchWriter 添加 Mutations 集合时会发生什么? BatchWriter 是否只是说好的,我将处理我设置的内容,然后再处理其余的? 最佳答案 Accu
我是一名优秀的程序员,十分优秀!