如何从 java 连接到正在运行的 bigtable 模拟器

Posted

技术标签:

【中文标题】如何从 java 连接到正在运行的 bigtable 模拟器【英文标题】:How to connect to a running bigtable emulator from java 【发布时间】:2016-11-29 08:25:39 【问题描述】:

我正在尝试使用 gcloud beta 模拟器中的 bigtable 模拟器。 我启动模拟器,获取主机名(localhost)和端口(在本例中为 8885)

gcloud beta 模拟器 bigtable start

执行:/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/platform/bigtable-emulator/cbtemulator --host=localhost --port=8885

我正在尝试从 java 测试客户端连接到模拟器, 这是我提供的:

Configuration conf = BigtableConfiguration.configure(projectId, instanceId);

if(!Strings.isNullOrEmpty(host))
    conf.set(BigtableOptionsFactory.BIGTABLE_HOST_KEY, host);
    conf.set(BigtableOptionsFactory.BIGTABLE_PORT_KEY, Integer.toString(port));

connection = BigtableConfiguration.connect(configuration);
try (Table table = connection.getTable("tName"))
    table.put(<Put instance>);
 

当我执行测试代码时,我得到:

16:36:37.369 [bigtable-batch-pool-1] INFO com.google.cloud.bigtable.grpc.async.AbstractRetryingRpcListener - Retrying failed call. Failure #1, got: Statuscode=UNAVAILABLE, description=null, cause=java.net.ConnectException: Connection refused: localhost/0:0:0:0:0:0:0:1:8885
java.net.ConnectException: Connection refused: localhost/0:0:0:0:0:0:0:1:8885

我正在使用库:com.google.cloud.bigtable:bigtable-hbase-1.2:0.9.1

知道我做错了什么吗?

谢谢!

【问题讨论】:

你显示的方式是not the way this page says to start the emulator。 我不想从 java 启动它,我想从 java 连接到已经启动的模拟器 @JonnyHenly 这是运行gcloud beta emulators bigtable start时的日志输出@ 这可能是一个微不足道的问题,但是......你是在同一台机器上运行模拟器和客户端代码吗? @JonnyHenly 是的,我是:D 【参考方案1】:

您需要设置一个额外的配置属性:

conf.set(BigtableOptionsFactory.BIGTABLE_USE_PLAINTEXT_NEGOTIATION, true);

此外,从日志消息来看,它似乎正在尝试连接到 IPv6 地址,我认为这不会起作用。仔细检查 host 是一个有效的 IPv4 地址。

java 客户端将在不久的将来让这变得更容易。

【讨论】:

谢谢!明文协商成功了! IP 是 IPv4,我猜记录器会记录 v4 和 v6 地址 这变得更容易了! Java 客户端现在直接支持具有正确环境变量集的模拟器:cloud.google.com/bigtable/docs/emulator【参考方案2】:

现在您可以设置configuration.set(BigtableOptionsFactory.BIGTABLE_EMULATOR_HOST_KEY,&lt;HOST:PORT&gt;); 连接到模拟器。

还可以使用“https://github.com/googleapis/java-bigtable/tree/master/google-cloud-bigtable-emulator”以编程方式启动模拟器以进行测试等。

【讨论】:

以上是关于如何从 java 连接到正在运行的 bigtable 模拟器的主要内容,如果未能解决你的问题,请参考以下文章

无法从 Spring Boot 应用程序连接到 Bigtable

从 Spark 连接到 BigTable 时出现 Jetty ALPN/NPN 异常,scala 代码

如何将 Kafka (Java) 应用程序从 Windows 连接到 Linux 中的 Confluent

连接到从 jdbc 创建的当前正在运行的 hsqldb

我可以从 Java EE webapp 使用 Windows 身份验证连接到 SQL Server 吗?

从 Java 1.4 连接到 SQL 2008