gpt4 book ai didi

java - HBase PrivilegedExceptionAction runAs 线程?

转载 作者:搜寻专家 更新时间:2023-10-31 20:31:56 26 4
gpt4 key购买 nike

我有用于获取的 HBase 代码(虽然我没有启用 Kerberos,但我计划稍后使用它,所以我想确保在连接和执行 Put 或 Get 时正确处理用户凭据)。

final ByteArrayOutputStream bos = new ByteArrayOutputStream();
MyHBaseService.getUserHBase().runAs(new PrivilegedExceptionAction<Object>() {
@Override
public Object run() throws Exception {
Connection connection = null;
Table StorageTable = null;
List<hFile> HbaseDownload = new ArrayList<>();
try {
// Open an HBase Connection
connection = ConnectionFactory.createConnection(MyHBaseService.getHBaseConfiguration());
Get get = new Get(Bytes.toBytes("filenameCell"));
Result result = table.get(get);
byte[] data = result.getValue(Bytes.toBytes(MyHBaseService.getDataStoreFamily()), Bytes.toBytes(MyHBaseService.getDataStoreQualifier()));
bos.write(data, 0, data.length);
bos.flush();
...
}
});
// now get the outputstream.
// I am assuming byteArrayStream is synchronized and thread-safe.
return bos.toByteArray();

但是,我不确定这是在运行异步线程还是同步线程。

问题:

我使用:

Get get = new Get(Bytes.toBytes("filenameCell"));
Result result = table.get(get);

在这个 run() 函数中。但是为了从 run() 线程中获取信息,我在 run() 之外使用了一个 new ByteOutputArrayStreamByteOutputArrayStream.write & ByteOutputArrayStream.flushrun() 中。然后 toByteArray() 从函数中获取 HBase 内容的二进制字节。这会导致返回空字节,所以我可能没有做对。

但是,我很难找到很好的 HBase Java API 示例来执行这些操作,而且似乎没有人像我一样使用 runAs。太奇怪了。

我在 Web 应用程序中运行 HBase 1.2.5 客户端(基于请求的函数调用)。

最佳答案

在此代码中,线程在“MyHBaseService.getUserHBase().runAs”中运行。但如果它异步运行,那么在正确执行之前,程序将返回 "bos.toByteArray();",因为它在 runAs() 之外。所以在执行完整的函数之前,它会返回输出。

我认为这就是空值的原因。

关于java - HBase PrivilegedExceptionAction runAs 线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49945333/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com