繁体   English   中英

Apache Ignite 插入非常慢

[英]Apache Ignite inserts extremely slow

我正在尝试将一个大矩阵加载到在 AWS 中运行的 Apache Ignite 主节点中。 EC2 实例具有 128GB 内存和 512GB 磁盘空间。

该矩阵是具有 50,000 列和 15,000 行的 CSV。

加载速度非常慢 - 前 150 个插入批次一起工作需要 30 多分钟。 我正在使用 Python 瘦客户端

import pandas as pd
import pyignite
from pyignite import Client

client = Client()

client.connect('127.0.0.1', 10800)
print('deleting records...')
client.sql('DELETE FROM full_test_table')
df = pd.read_csv('exon.csv')

col = list(df)
col = col[1:]

names = ', '.join('"' + item + '"' for item in col)
names = 'name, ' + names
#print(names)

for index, row in df.iterrows():
    print('inserting for {0}'.format(str(row[0])))
    row[0] = '\"{0}\"'.format(row[0])

    row[0] = str(index)

    values = ', '.join(str(item) for item in row)
    sql = 'INSERT INTO full_test_table ({0}) VALUES({1})'.format(names, values)
    client.sql(sql)

我想使用 Python 来加载数据,因为我比 Java 更熟悉它。 这对我来说似乎太慢了——即使是 PostgreSQL 也可以在几秒钟内完成这些插入。 有什么问题?

我也尝试过来自 CSV 的 COPY 命令 - 这似乎并没有更快地工作。

从 Ignite 2.7 开始,Python 瘦客户端以及其他瘦客户端使用服务器节点之一作为代理 - 通常是您在连接字符串中设置的那个。 代理接收来自客户端的所有请求,并在需要时将它们定向到其余的服务器。 此外,代理将结果集发送回客户端。 因此,代理可能是您的情况以及整体网络吞吐量的瓶颈。 检查代理服务器没有过度使用 CPU 并且没有任何与垃圾收集或内存使用相关的问题 Ignite 2.8 中不再需要代理。

无论如何,在 Ignite 中预加载数据的最快方法是使用 IgniteStreaming API。 这些还不适用于 Python,但 Java 应用程序非常简单。 您可以将此示例用作参考,方法是将您的记录放入带有键值 API 的流送器中。

如果您想继续使用 SQL INSERTS,那么将 JDBC 或 ODBC 驱动程序与SET STREAMING命令一起使用。

我刚刚从 Java 中尝试过,我可以看到每秒大约 25 次插入来自 JDBC。 这不是一个非常高的数字,但比你展示的 30 分钟要好得多。 也许它是 Python 客户端的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM