当 运行 处于异步模式时,PyHive 无法从 HiveServer2 获取日志
PyHive unable to fetch logs from HiveServer2 when running in async mode
我 运行 遇到了 PyHive 的一个奇怪问题 运行 异步模式下的 Hive 查询。在内部,PyHive 使用 Thrift 客户端执行查询并获取日志(以及执行状态)。我无法获取 Hive 查询的日志(map/reduce 任务等)。 cursor.fetch_logs()
returns 一个空数据结构
这是代码片段
rom pyhive import hive # or import hive or import trino
from TCLIService.ttypes import TOperationState
def run():
cursor = hive.connect(host="10.x.y.z", port='10003', username='xyz', password='xyz', auth='LDAP').cursor()
cursor.execute("select count(*) from schema1.table1 where date = '2021-03-13' ", async_=True)
status = cursor.poll(True).operationState
print(status)
while status in (TOperationState.INITIALIZED_STATE, TOperationState.RUNNING_STATE):
logs = cursor.fetch_logs()
for message in logs:
print("running ")
print(message)
# If needed, an asynchronous query can be cancelled at any time with:
# cursor.cancel()
print("running ")
status = cursor.poll().operationState
print
cursor.fetchall()
光标能够正确获取操作状态,但无法获取日志。 HiveServer2端有什么需要配置的吗?
提前致谢
如果其他人对 hive 有相同或相似的问题,请在此处关闭循环。
在我的例子中,问题是 hiveserver 配置。如果未启用日志记录操作,Hive Server 将不会流式传输日志。以下是我配置的列表
hive.server2.logging.operation.enabled
- true
hive.server2.logging.operation.level
EXECUTION
(基本日志记录 - 还有其他值可以提高日志记录级别)
hive.async.log.enabled
false
hive.server2.logging.operation.log.location
我 运行 遇到了 PyHive 的一个奇怪问题 运行 异步模式下的 Hive 查询。在内部,PyHive 使用 Thrift 客户端执行查询并获取日志(以及执行状态)。我无法获取 Hive 查询的日志(map/reduce 任务等)。 cursor.fetch_logs()
returns 一个空数据结构
这是代码片段
rom pyhive import hive # or import hive or import trino
from TCLIService.ttypes import TOperationState
def run():
cursor = hive.connect(host="10.x.y.z", port='10003', username='xyz', password='xyz', auth='LDAP').cursor()
cursor.execute("select count(*) from schema1.table1 where date = '2021-03-13' ", async_=True)
status = cursor.poll(True).operationState
print(status)
while status in (TOperationState.INITIALIZED_STATE, TOperationState.RUNNING_STATE):
logs = cursor.fetch_logs()
for message in logs:
print("running ")
print(message)
# If needed, an asynchronous query can be cancelled at any time with:
# cursor.cancel()
print("running ")
status = cursor.poll().operationState
print
cursor.fetchall()
光标能够正确获取操作状态,但无法获取日志。 HiveServer2端有什么需要配置的吗?
提前致谢
如果其他人对 hive 有相同或相似的问题,请在此处关闭循环。
在我的例子中,问题是 hiveserver 配置。如果未启用日志记录操作,Hive Server 将不会流式传输日志。以下是我配置的列表
hive.server2.logging.operation.enabled
- true
hive.server2.logging.operation.level
EXECUTION
(基本日志记录 - 还有其他值可以提高日志记录级别)
hive.async.log.enabled
false
hive.server2.logging.operation.log.location