- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们大量使用 Dataflow 和 Bigtable,最近遇到了一个奇怪的问题。
使用 Dataflow SDK 1.9.1 和 bigtable-hbase-dataflow 1.0.0,我们读取 Bigtable 的 Java 代码运行得非常好(即数据流管道正常成功),但 JVM 似乎在退出时挂起。我们在多台本地计算机 (OS X) 和 GCP VM 上进行了尝试,它总是在退出时挂起。如果我们在 main 方法的末尾添加 System.exit(0)
,幸运的是它会正常终止,因此我们可以通过这种方式解决这个问题,但我们无法完全弄清楚为什么会发生这种情况.
当我们尝试将 Dataflow SDK 1.9.1 与其他 hbase 版本(特别是 0.9.7.1、1.0.0-pre1 和 1.0.0-pre4)结合使用时,此问题消失了。
对于 Java 代码(用于数据流管道),如下所示(我们简化了一些操作以多次重现此错误,并且无论扫描作业是否返回空 PCollection 都会发生这种情况)。
// ... some Dataflow pipeline options are set prior to this step.
Pipeline pipeline = Pipeline.create(options);
Scan scan = new Scan();
scan.setCacheBlocks(false).setMaxVersions(1); // Disable caching and read only the latest cell.
scan.addFamily(Bytes.toBytes("x")); // Read only 'x' column family.
scan.setStartRow(Bytes.toBytes("prefix1")).setStopRow(Bytes.toBytes("prefix2"));
try {
long tsBegin = DateTime.parse("2018-03-01T00:00:00Z").getMillis();
long tsEnd = DateTime.parse("2018-03-01T01:00:00Z").getMillis();
scan.setTimeRange(tsBegin, tsEnd);
} catch (IOException e) {
// If unable to set time range, do not run this job as it may read the entire UPT and affect production.
LOG.error("Unable to set Time Range for Bt Scan object.", e);
return;
}
CloudBigtableScanConfiguration btConfig = new
CloudBigtableScanConfiguration.Builder()
.withProjectId("projectId")
.withInstanceId("instanceId")
.withTableId("tableId")
.withScan(scan)
.build();
pipeline.apply(Read.from(CloudBigtableIO.read(btConfig)));
System.out.println("before run");
PipelineResult pipelineResult = pipeline.run();
System.out.println("after run");
// This hangs on exit.
// System.exit(0); would work fine and exit.
// throw new RuntimeException("test re"); this will throw an exception, but will hang (provided that System.exit() above is not present).
```
这是我们在 gradle 依赖项中使用的内容。同样,对于以前(但已弃用)版本的 bigtable-hbase-dafatflow 库,我们没有看到此问题。
编译 'com.google.cloud.dataflow:google-cloud-dataflow-java-sdk-all:1.9.1'
编译 'com.google.cloud.bigtable:bigtable-hbase-dataflow:1.0.0'
我想知道 Bigtable 或 Dataflow 团队是否可以在他们的末端重现此错误(无论扫描结果如何,只要读取任何 Bigtable 实例/表都会给我们带来此错误),因为看起来 hbase 1.0.0 中的某些内容(以前的版本中没有)可能是导致问题的原因。我们使用 Java 1.8.0 (0_151) 和 Gradle 版本 3.1 和 4.3.1 来重现错误。
针对有类似问题的人进行了更新:
正如下面所指出的,在进行线程转储之后,我们发现了以下内容(grep lmax
):
"pool-4-thread-1" #23 prio=5 os_prio=31 tid=0x00007fd8d4d88000 nid=0x150f runnable [0x000070000b016000]
java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:338)
at com.google.bigtable.repackaged.com.lmax.disruptor.SleepingWaitStrategy.applyWaitMethod(SleepingWaitStrategy.java:82)
at com.google.bigtable.repackaged.com.lmax.disruptor.SleepingWaitStrategy.waitFor(SleepingWaitStrategy.java:55)
at com.google.bigtable.repackaged.com.lmax.disruptor.ProcessingSequenceBarrier.waitFor(ProcessingSequenceBarrier.java:56)
at com.google.bigtable.repackaged.com.lmax.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:124)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
最佳答案
这是由于 Cloud Bigtable 客户端在 v 1.0.0 中对 opencensus stackdriver 的依赖而引入的问题。如果您想确认这一点,可以进行线程转储;如果确实如此,您将看到带有 lmax Disruptor 的条目。
我建议您升级到1.2.0并使用Beam/Dataflow v2。如果您无法做到这一点,请降级到 1.0.0-pre4。
关于java - 使用 java dataflow-sdk 1.9.1 和 hbase 1.0.0 时,JVM 在退出时挂起(但对于以前的 hbase 库则不会),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49244327/
发出时Delete对于 hbase,我知道它不会立即删除数据。但是什么时候删除数据,我的意思是,物理上? 最佳答案 当您向 HBase 写入内容时,它会存储在内存存储 (RAM) 中,然后再写入磁盘。
同一行的列族属于同一个 RegionServer。 那么,这里的问题是一个 RegionServer 会在不同的机器上存储不同的列族吗? 最佳答案 不一定,但在某些时候它会。这是基本 HBase 架构
如果我想插入表格: row | fam:qualifier | timestamp | value 1 | foo:bar | 12345 | 2 1 | foo:bar | 12346 | 3 1
有时我想退出我在 HBase shell 中运行的命令,例如扫描操作通常需要太多时间。 所以我想停止运行这个命令,但我不想退出 HBase shell。 我常用的停止运行命令的方式,我使用了Ctrl+
有没有办法设置 Hbase 以便我们可以在同一个集群中创建多个数据库? 最佳答案 只是为了刷新主题:http://hbase.apache.org/book.html#namespace 5.3.1.
怎么看version的 hbase我在用? 你能下命令吗? 最佳答案 hbase version命令行界面中的命令给出了 version的 hbase正在使用中。 以下是来自 Cloudera 的两个
高级问题: HBase 是否对所有分布(因此不是实现的工件)通用的每行施加了最大大小,无论是在 方面吗?字节存储 或在 方面细胞数 ? 如果是这样: 限制是什么? 极限存在的原因是什么? 限制在哪里记
假设,假设我在数据仓库设置中有一个星型模式。 有一个非常非常长的事实表(想想几十亿到几万亿行)和几个低基数维度表(想想 100 个维度表)。每个事实表外键 指向一个维度表的主键是位图索引的。每个维度表
版本:Hadoop: 2.0.0-cdh4.3.1 HBase: 0.94.6-cdh4.3.1 我正在运行 cloudera quick start vm,这是我的小型远程 HBase Java 客
我正在尝试以完全分布式模式配置 HBase。 (使用 Ubuntu 12.04,Apache Hadoop 2.2(以伪模式运行,HBase 版本 0.98) 以下是我的 bashrc 设置: exp
我想知道如何正确配置 hbase.zookeeper.quorum 以将 zookeeper 实例指向集群模式。 最佳答案 hbase.zookeeper.quorum 属性是运行 ZooKeeper
我想知道如何正确配置 hbase.zookeeper.quorum 以将 zookeeper 实例指向集群模式。 最佳答案 hbase.zookeeper.quorum 属性是运行 ZooKeeper
我正在尝试对位于 Hbase 中的两个表进行映射连接。我的目的是在hashmap中保留小表的记录并与大表进行比较,一旦匹配,再次将记录写入hbase中的表中。我使用 Mapper 和 Reducer
我正在尝试编写一个程序来连接到 HBase。但是当我执行以下命令时HBaseConfiguration.create();我收到以下错误:. "hbase-default.xml 文件似乎是旧版本的
基于HBase documentation ,再次遵循 Google BigTable 论文的引用,据说这些行是按行键的字典顺序存储的。 很明显,当我们在 rowkey 中有一个字符串或者如果我们将一
我有一个 hbase 表,其中的行键如 row1、row2、row3 .... 和 rowN,我想要的是获取行键从 row100 到 row200 的行,如何编写查询子句或将 hbase 表设计为让查
我正在尝试创建命名空间,但出现类似下面给出的错误 hbase(main):031:0> create namespace 'Aniruddha'
我发现为以下要求建模 HBase 表有困难。 我有一个表“商店”,它存储了商店的详细信息(必胜客)。 我有一个表格“订单”,其中包含交易摘要(总交易金额等...)。 我有另一个表“Order_Item
谁能告诉我如果在不首先禁用表的情况下使用“alter”命令可能影响表结构的可能影响? 据我所知,禁用表意味着关闭与表的所有连接。如果我在不禁用表的情况下使用 alter,可能会发生什么异常情况? 我正
我无法将表从 HBase 导出到 HDFS。下面是错误跟踪。它是相当大的尺寸。还有其他方法可以导出吗? 我使用以下命令导出。我增加了 rpc 超时,但工作仍然失败。 sudo -u hdfs hbas
我是一名优秀的程序员,十分优秀!