Чрезвычайно низкая скорость записи при вставке строк в таблицу Hive с помощью импыла
При попытке вставить строки в многораздельную таблицу Hive с помощью impyla
,
Это пример кода, который я написал на python:
from impala.dbapi import connect
targets = ... # targets is a dictionary of objects of a specific class
yesterday = datetime.date.today() - datetime.timedelta(days=1)
log_datetime = datetime.datetime.now()
query = """
INSERT INTO my_database.mytable
PARTITION (year={year}, month={month}, day={day})
VALUES ('{yesterday}', '{log_ts}', %s, %s, %s, 1, 1)
""".format(yesterday=yesterday, log_ts=log_datetime,
year=yesterday.year, month=yesterday.month,
day=yesterday.day)
print(query)
rows = tuple([tuple([i.campaign, i.adgroup, i.adwordsid])
for i in targets.values()])
connection = connect(host=os.environ["HADOOP_IP"],
port=10000,
user=os.environ["HADOOP_USER"],
password=os.environ["HADOOP_PASSWD"],
auth_mechanism="PLAIN")
cursor = connection.cursor()
cursor.execute("SET hive.exec.dynamic.partition.mode=nonstrict")
cursor.executemany(query, rows)
Интересно, что хотя я запускаю executemany
команда impyla
по-прежнему разрешать его в несколько заданий MapReduce. Фактически я вижу столько запущенных заданий MapReduce, сколько кортежей включено в объект кортежа кортежей, который я передаю impyla.executemany
метод.
Вы видите что-то не так? Чтобы дать вам представление после более чем часа, он написал всего 350 строк.