是否可以在 Spark 写入数据库时使用 SQL 数据库?
Is it possible to use an SQL database while Spark is writing to it?
首先,我在 Amazon EMR 上使用 Spark 1.5.2,并将 Amazon RDS 用于我的 postgres 数据库。
我目前正在努力让 Spark 将其结果写入 postgres 数据库,这是我使用 Spark 的 jdbc API 所做的。虽然它工作正常,但我担心的是,如果我在 Spark 运行ning 时尝试使用 psql 连接到数据库,然后尝试从 table Spark 正在写入的内容中读取,它会告诉我还没有写行。这一直持续到 Spark 完成,然后突然所有行都出现在数据库中。
这让我很担心,因为最终设置应该定期 运行 Spark 脚本,并将更多数据写入数据库,而网站应该使用该数据库。这是否意味着当 Spark 运行ning 时我将无法查询数据库?
您猜这里的问题是什么?我认为这可能是为 db 使用更大的实例的问题(我最初使用最小和最便宜的 - db.t2.micro),但我在 db.m4.xlarge class 实例(尽管完成该步骤的时间减半)。
首先,其他发贴者是正确的。 Spark 使用事务写入数据库,因此在提交事务之前您看不到任何数据。
其次,如果您确实需要以较小的批次或单独写入的方式插入数据,您始终可以编写自己的 JDBC 代码并使用 map() 操作,尽管这可能不是一个好主意(但我不知道你的用例是什么,所以也许有一个很好的理由让你想要这个)。
首先,我在 Amazon EMR 上使用 Spark 1.5.2,并将 Amazon RDS 用于我的 postgres 数据库。
我目前正在努力让 Spark 将其结果写入 postgres 数据库,这是我使用 Spark 的 jdbc API 所做的。虽然它工作正常,但我担心的是,如果我在 Spark 运行ning 时尝试使用 psql 连接到数据库,然后尝试从 table Spark 正在写入的内容中读取,它会告诉我还没有写行。这一直持续到 Spark 完成,然后突然所有行都出现在数据库中。
这让我很担心,因为最终设置应该定期 运行 Spark 脚本,并将更多数据写入数据库,而网站应该使用该数据库。这是否意味着当 Spark 运行ning 时我将无法查询数据库?
您猜这里的问题是什么?我认为这可能是为 db 使用更大的实例的问题(我最初使用最小和最便宜的 - db.t2.micro),但我在 db.m4.xlarge class 实例(尽管完成该步骤的时间减半)。
首先,其他发贴者是正确的。 Spark 使用事务写入数据库,因此在提交事务之前您看不到任何数据。
其次,如果您确实需要以较小的批次或单独写入的方式插入数据,您始终可以编写自己的 JDBC 代码并使用 map() 操作,尽管这可能不是一个好主意(但我不知道你的用例是什么,所以也许有一个很好的理由让你想要这个)。