我正在通过sparklyr V0.6.2运行Spark V2.2.1并通过JDBC从SQL Server提取数据。我似乎遇到了一些网络问题,因为我的执行程序多次(不是每次)对SQL Server执行写操作失败,并出现错误:
Prelogin error: host <my server> port 1433 Error reading prelogin response: Connection timed out (Read failed) ClientConnectionId:...
我正在使用以下配置运行sparklyr会话:
spark_conf = spark_config()
spark_conf$spark.executor.cores <- 8
spark_conf$`sparklyr.shell.driver-memory` <- "8G"
spark_conf$`sparklyr.shell.executor-memory` <- "12G"
spark_conf$spark.serializer <- "org.apache.spark.serializer.KryoSerializer"
spark_conf$spark.network.timeout <- 400
18/06/11 17:53:44 INFO BlockManager: Found block rdd_9_16 locally
18/06/11 17:53:45 WARN SQLServerConnection: ConnectionID:3 ClientConnectionId: d3568a9f-049f-4772-83d4-ed65b907fc8b Prelogin error: host nciensql14.nciwin.local port 1433 Error reading prelogin response: Connection timed out (Read failed) ClientConnectionId:d3568a9f-049f-4772-83d4-ed65b907fc8b
18/06/11 17:53:45 WARN SQLServerConnection: ConnectionID:2 ClientConnectionId: ecb084e6-99a8-49d1-9215-491324e8d133 Prelogin error: host nciensql14.nciwin.local port 1433 Error reading prelogin response: Connection timed out (Read failed) ClientConnectionId:ecb084e6-99a8-49d1-9215-491324e8d133
18/06/11 17:53:45 ERROR Executor: Exception in task 10.0 in stage 26.0 (TID 77)
function (df, tbl, db, server = NULL, user, pass, mode = "error",
options = list(), ...)
{
sparklyr::spark_write_jdbc(
df,
tbl,
options = c(
list(url = paste0("jdbc:sqlserver://", server, ".nciwin.local;",
"databaseName=", db, ";",
"user=", user, ";",
"password=", pass, ";"),
driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"),
options),
mode = mode, ...)
}
function (sc, tbl, db, server = NULL, user, pass, repartition = 0, options = list(), ...)
{
sparklyr::spark_read_jdbc(
sc,
tbl,
options = c(
list(url = paste0("jdbc:sqlserver://", server, ".nciwin.local;"),
user = user,
password = pass,
databaseName = db,
dbtable = tbl,
driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"),
options),
repartition = repartition, ...)
}
我在运行时将repartition
设置为24。因此,我看不出与建议的帖子有什么联系。
编辑2
我可以通过摆脱重新分区来解决我的问题。有人能解释为什么在这种情况下使用sparklyr重新分区是无效的吗?
正如在另一个问题中解释的那样,以及其他一些帖子(partitionColumn、lowerBound、upperBound、numPartitions参数的含义是什么?),与从csv文件转换mysql表到spark dataset相比,在spark中通过JDBC读取RDBMS时进行分区,在spark中并行读取mysql数据)和场外资源(并行读取),默认情况下spark JDBC源按顺序将所有数据读取到单个节点中。
有两种并行读取的方式:
>
基于数值列的范围拆分,该列需要lowerbound
、upperbound
、PartitionColumn
和NumPartitions
选项
,其中PartitionColumn
是稳定的数值列(伪olumns可能不是好的选择)
spark_read_jdbc(
...,
options = list(
...
lowerBound = "0", # Adjust to fit your data
upperBound = "5000", # Adjust to fit your data
numPartitions = "42", # Adjust to fit your data and resources
partitionColumn = "some_numeric_column"
)
)
谓词
列表-sparklyr
目前不支持。
重新分区(sparklyr::sdf_repartition
)不能解决这个问题,因为它发生在数据加载之后。由于shuffle(repartition
)属于Spark中开销最大的操作,它很容易使节点崩溃。
因此使用:
也就是说,如果数据已经由单个节点处理,那么就会产生一个问题,即使用Apache Spark是否有意义。答案将取决于您的管道的其余部分,但仅考虑到有问题的组件,它可能是否定的。
我使用Sqoop将数据从SQL server导入到本地HDF。我使用一个简单的自由形式查询从表中提取大约10行。下面是我从终端执行的sqoop命令: 当我从本地计算机执行此操作时,会出现以下异常: 原因:com。微软sqlserver。jdbc。SQLServerException:索引2超出范围。在com。微软sqlserver。jdbc。SQLServerException。在com上生成fr
我的Spring Hibernate Web应用程序在MySQL上运行,这给我带来了麻烦。 我四处寻找并尝试了不同的配置,在这个网站上阅读了相当多的帖子,但它仍然会弹出微笑的头像。 错误消息是:由:com.mysql.jdbc.exceptions.jdbc4.通信异常:从服务器成功接收到的最后一个数据包是63,313,144毫秒前。最后一个成功发送到服务器的数据包是63,313,144毫秒前。比
问题内容: 我正在尝试使用Java设置网络超时我的Oracle数据库连接。但是,我遇到了错误。以下是示例代码及其各自的例外。 我得到的异常是: 我相信这与抽象方法有关(请参见AbstractMethodError)。可能导致此错误的原因是我只实现了我认为已经在Java中定义的方法,因此不拒绝编译。 注意:如果有抽象方法,Java不允许编译具体的类。 问题答案: 是JDBC 4.1中引入的,而JDB
代码片段如下所示: 如果有人有决议,请帮忙?