小编Gid*_*eon的帖子

接收TimeoutException的可能原因是:使用Spark时,[n秒]之后的期货超时

我正在研究Spark SQL程序,我收到以下异常:

16/11/07 15:58:25 ERROR yarn.ApplicationMaster: User class threw exception: java.util.concurrent.TimeoutException: Futures timed out after [3000 seconds]
java.util.concurrent.TimeoutException: Futures timed out after [3000 seconds]
    at scala.concurrent.impl.Promise$DefaultPromise.ready(Promise.scala:219)
    at scala.concurrent.impl.Promise$DefaultPromise.result(Promise.scala:223)
    at scala.concurrent.Await$$anonfun$result$1.apply(package.scala:190)
    at scala.concurrent.BlockContext$DefaultBlockContext$.blockOn(BlockContext.scala:53)
    at scala.concurrent.Await$.result(package.scala:190)
    at org.apache.spark.sql.execution.joins.BroadcastHashJoin.doExecute(BroadcastHashJoin.scala:107)
    at org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$5.apply(SparkPlan.scala:132)
    at org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$5.apply(SparkPlan.scala:130)
    at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:150)
    at org.apache.spark.sql.execution.SparkPlan.execute(SparkPlan.scala:130)
    at org.apache.spark.sql.execution.Project.doExecute(basicOperators.scala:46)
    at org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$5.apply(SparkPlan.scala:132)
    at org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$5.apply(SparkPlan.scala:130)
    at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:150)
    at org.apache.spark.sql.execution.SparkPlan.execute(SparkPlan.scala:130)
    at org.apache.spark.sql.execution.Union$$anonfun$doExecute$1.apply(basicOperators.scala:144)
    at org.apache.spark.sql.execution.Union$$anonfun$doExecute$1.apply(basicOperators.scala:144)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:245)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:245)
    at scala.collection.immutable.List.foreach(List.scala:381)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:245)
    at scala.collection.immutable.List.map(List.scala:285)
    at org.apache.spark.sql.execution.Union.doExecute(basicOperators.scala:144)
    at org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$5.apply(SparkPlan.scala:132)
    at org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$5.apply(SparkPlan.scala:130)
    at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:150)
    at org.apache.spark.sql.execution.SparkPlan.execute(SparkPlan.scala:130)
    at org.apache.spark.sql.execution.columnar.InMemoryRelation.buildBuffers(InMemoryColumnarTableScan.scala:129) …
Run Code Online (Sandbox Code Playgroud)

scala apache-spark apache-spark-sql spark-dataframe

16
推荐指数
1
解决办法
2万
查看次数

Web UI的Spark Jobs中的ThreadPoolExecutors作业是什么?

我正在使用Spark SQL 1.6.1并且正在执行一些连接.

看看火花UI我看到有一些工作描述"在ThreadPoolExecutor.java:1142运行"

其中一些工作的例子

我想知道为什么一些Spark工作会得到这种描述?

apache-spark apache-spark-sql

16
推荐指数
1
解决办法
4270
查看次数

Spark流式自定义指标

我正在开发一个Spark Streaming程序,它检索Kafka流,对流进行非常基本的转换,然后将数据插入到DB(如果相关则为voltdb).我正在尝试测量向DB插入行的速率.我认为指标很有用(使用JMX).但是我找不到如何向Spark添加自定义指标.我查看了Spark的源代码并找到了这个帖子,但它对我不起作用.我还在conf.metrics文件中启用了JMX接收器.什么不起作用我没有看到我的自定义指标与JConsole.

有人可以解释如何添加自定义指标(最好通过JMX)来激发流媒体?或者如何测量我的数据库(特别是VoltDB)的插入速率?我在Java 8中使用spark.

java jmx apache-spark codahale-metrics spark-streaming

10
推荐指数
2
解决办法
8990
查看次数

使用tomcat和spring处理异步http请求

这是我的第一个问题所以请耐心等待我:)

我正在尝试创建一个服务:

  1. 接收包含要查询的URL的HTTP GET请求
  2. 对于单个GET请求,服务将提取URL
  3. 查询有关URL的本地数据库
  4. 如果在DB中找到了结果,它会将其返回给客户端,如果没有,则需要查询一些外部服务(可能需要相对较长的时间才能响应)
  5. 将URL的结果返回给客户端

我在虚拟机和Tomcat7上使用spring运行它.我会事先道歉并提到我对Tomcat很新

无论如何,我期待很多并发GET请求到这个服务(成千上万的同时请求)我基本上想要实现的是尽可能地使这个服务可扩展(如果这是不可能的那么至少一个可以处理数十万个并发请求的服务)

我一直在阅读A LOT关于服务中的异步请求处理,特别是在Tomcat中,但我有些事情对我来说仍然不清楚:

  1. 从官方tomcat网站看来,Tomcat似乎包含许多接受者线程和工作线程数.如果是这样,我为什么要使用AsyncContext?什么是释放Tomcat的工作线程并在我的应用程序中占用不同的线程以执行完全相同的操作的好处?(系统中仍有1个活动线程)
  2. 有点类似于第一个问题,但创建AsyncContext并将其与不同的线程一起使用有什么好处?(来自我的应用程序中创建的线程池的线程)
  3. 关于同样的问题,我在这里看到我也可以返回一个Callable或DeferredResult,并用Tomcat的一个线程或我自己的一个线程处理它.返回Callable或使用DeferredResult而不仅仅是处理来自请求的AsyncContext有什么好处吗?
  4. 另外,如果我决定返回一个可调用的,Tomcat从哪个线程池获取线程来处理我的callable?这里使用的线程是否与我之前提到的Tomcat相同的工作线程?如果是这样,我发布一个Tomcat工作线程并使用另一个工作线程可以获得哪些好处?
  5. 我从Oracle的文档中看到,我可以向AsyncContext传递一个将同时处理的Runnable对象,用于执行此Runnable的线程来自何处?我有控制权吗?另外,将AsyncContext传递给Runnable而不仅仅是将AsyncContext传递给我的一个线程有什么好处?

我为同样的问题提出了很多问题而道歉,但是我和我的同事们争论这些事情一个多星期没有任何具体的答案.

我还有一个更普遍的问题:您认为使我描述的服务具有可扩展性的最佳方法是什么?(暂时不要添加更多机器),您是否可以针对目标解决方案发布任何示例或参考?

我发布了更多我一直在关注的链接链接,但我目前的声誉不允许.我将非常感谢任何可以理解的参考文献或具体的例子,我很乐意澄清任何相关问题

干杯!

java multithreading tomcat spring-mvc asynccontroller

8
推荐指数
1
解决办法
1598
查看次数

AsyncHttpClient是否知道要为所有HTTP请求分配多少线程

我正在为大负载(~1M HTTP请求)评估AsyncHttpClient.对于每个请求,我想使用AsyncCompletionHandler调用一个回调,它只会将结果插入阻塞队列

我的问题是:如果我在紧密循环中发送异步请求,AsyncHttpClient将使用多少个线程?(我知道你可以设置最大值,但显然你冒了丢失请求的风险,我在这里看到)

我目前正在使用这些版本的Netty实现:

  • async-http-client v1.9.33
  • netty v3.10.5.Final

如果在以后的版本中有任何优化,我不介意使用其他版本

编辑:

我读到Netty使用reactor模式来响应HTTP响应,这意味着它分配了很少的线程来充当选择器.这也意味着分配的线程数不会随着请求量的增加而增加.但是,这与设置最大连接数的需要相矛盾.

谁能解释我错过的东西?

提前致谢

java multithreading http netty asynchttpclient

8
推荐指数
2
解决办法
4623
查看次数

尝试下载文件时,无头chrome与python挂起

我在Mac上使用Python,Jupyter,Selenium webdriver和无头镀铬(带Canary).

我写了一个脚本来刮擦一个非常古老的网站,为了从该网站下载文件,我需要点击几个按钮,最终将我带到一个按钮,一旦点击它就下载一个CSV文件

问题是当无头镀铬尝试下载目标文件时,它会暂停并且什么也不做(即不下载所需的文件),即使脚本已经完成运行(是的,我确实在脚本结束时将其关闭)

我试过了:

  • 下载其他文件(来自不同的网站)和无头镀铬似乎下载它们没有任何问题(我启用无头chrome选项成功下载文件)
  • 拍摄网站的快照以确保其正确导航到下载页面(是的,它正确导航)
  • 修改用户代理(它似乎正在使用我期望的用户代理)
  • 在没有无头选项的情况下运行完全相同的代码 - 它使用常规chrome成功下载文件
  • 通过使用改变插件和语言JS脚本驱动程序,driver.execute_script(js_that_changes_plugins_and_langs)但我不太确定如何检查它是否实际执行它(它仍然无法正常工作)

我面临的问题:

  • 我找不到一种方法来获取最后一个下载URL,因为它似乎使用了一路上生成的一些唯一ID(当您转到主页时以及当您在站点中的页面之间导航时)会议将改变
  • 导航网址似乎来自主页内部的iframe(以及以下网址),我不太确定如何检查其生成的Javascript

我提供网站网址时没有任何问题,但是:

  • 您必须在不同页面上进行约6次点击才能使用下载按钮进入最后一页.这些点击不直观,为了解释如何导航到我想要的位置,需要花费很多时间
  • 这个网站不是英文版,这将使解释如何导航变得更加困难

我需要它无头而不是普通的chrome,因为我们想要运行代码的机器非常弱并且无法运行chrome GUI

所以我的问题是:有谁知道这可能是什么问题?或者至少,我该如何调试它?

这或多或少是我正在使用的代码:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

def enable_download_in_headless_chrome(driver, download_dir):
        """
        there is currently a "feature" in chrome where
        headless does not allow file download: https://bugs.chromium.org/p/chromium/issues/detail?id=696481
        This method is a hacky work-around until the official chromedriver support for this.
        Requires chrome version 62.0.3196.0 or above.
        """

        # add missing support for chrome "send_command"  to selenium …
Run Code Online (Sandbox Code Playgroud)

python python-3.x selenium-webdriver google-chrome-headless

8
推荐指数
1
解决办法
1554
查看次数

使用Spark数据帧进行单元测试

我正在尝试测试我的程序的一部分,它执行数据帧的转换我想测试这些数据帧的几个不同变体,这排除了从文件中读取特定DF的选项

所以我的问题是:

  1. 有没有关于如何使用Spark和数据帧执行单元测试的优秀教程,特别是关于数据帧的创建?
  2. 如何在没有大量样板的情况下创建这些不同的几行数据帧,而无需从文件中读取这些数据帧?
  3. 是否有任何实用程序类用于检查数据框内的特定值?

我之前显然用谷歌搜索过,但找不到任何非常有用的东西.我找到的更有用的链接包括:

如果示例/教程在Scala中会很棒,但我会采用你所拥有的任何语言

提前致谢

unit-testing scala apache-spark apache-spark-sql spark-dataframe

7
推荐指数
1
解决办法
1万
查看次数

Apache Spark和域驱动设计

我有点抽象的问题.我最近一直在和Scala一起使用Apache Spark(也是Streaming和SQL).我的大多数Spark作业基本上将RDD/Dataframe从一个类移动到另一个类,其中每个类对输入执行一些转换.

我最近也在阅读有关Domain Driven Design的内容,这让我想到了如何使用DDD来模拟我的Spark程序.我得说我发现使用DDD概念来模拟Spark代码要比非Spark代码更难(可能是因为它主要执行转换或IO).我可以考虑如何创建无处不在的语言,而不是如何在Spark代码本身中实际应用它.

我试过谷歌搜索如何使用Spark与DDD,但无法找到任何关于它,所以我想知道:

  • 我是否遗漏了有关如何在Spark代码上应用DDD概念的内容?
  • 也许Spark职业如此专注于ETL,他们实际上并不需要使用DDD?如果不是这样,有人可以解释她/他如何在Spark代码中使用DDD概念?也许一些例子可能有用

我希望这是一个合理的问题 - 如果没有,我道歉

提前致谢

scala apache-spark spark-streaming apache-spark-sql spark-dataframe

7
推荐指数
1
解决办法
425
查看次数

使用带有Spark on Yarn的typesafe配置

我有一个Spark作业,从配置文件中读取数据.此文件是类型安全的配置文件.

读取配置的代码如下所示:

ConfigFactory.load().getConfig("com.mycompany")
Run Code Online (Sandbox Code Playgroud)

现在我没有将application.conf作为我的超级jar的一部分进行组装,因为我想将该文件作为外部文件传递

我想使用的外部application.conf的内容如下所示:

com.mycompany {
  //configurations my program needs
}
Run Code Online (Sandbox Code Playgroud)

此application.conf文件存在于我的本地计算机文件系统上(而不是HDFS上)

我正在使用Spark 1.6.1和Yarn

这是我的spark-submit命令的样子:

LOG4J_FULL_PATH=/log4j-path
ROOT_DIR=/application.conf-path

    /opt/deploy/spark/bin/spark-submit \
    --class com.mycompany.Main \
    --master yarn \
    --deploy-mode cluster \
    --files $ROOT_DIR/application.conf \
    --files $LOG4J_FULL_PATH/log4j.xml \
    --conf spark.executor.extraClassPath="-Dconfig.file=file:application.conf" \
    --driver-class-path $ROOT_DIR/application.conf \
    --verbose \
    /opt/deploy/lal-ml.jar
Run Code Online (Sandbox Code Playgroud)

我收到的例外是:

2016-11-09 12:32:14 ERROR ApplicationMaster:95 - User class threw exception: com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'com'
com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'com'
    at com.typesafe.config.impl.SimpleConfig.findKey(SimpleConfig.java:124)
    at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:147)
    at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:159)
    at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:164)
    at com.typesafe.config.impl.SimpleConfig.getObject(SimpleConfig.java:218) …
Run Code Online (Sandbox Code Playgroud)

scala hadoop-yarn typesafe-config apache-spark

6
推荐指数
1
解决办法
5502
查看次数

Spark显示的内核数量与使用spark-submit传递给它的内核数量不同

TL; DR

Spark UI显示的核心和内存数量不同于我在使用spark-submit时所要求的数量

更多细节:

我在独立模式下运行Spark 1.6.当我运行spark-submit时,我传递了1个执行器实例,其中1个核心用于执行程序,还有1个核心用于驱动程序.我期望发生的是我的应用程序将运行总共2个核心.当我检查UI上的环境选项卡时,我看到它收到了我给它的正确参数,但它看起来仍然使用不同数量的核心.你可以在这里看到它:

在此输入图像描述

这是我正在使用的spark-defaults.conf:

spark.executor.memory 5g
spark.executor.cores 1
spark.executor.instances 1
spark.driver.cores 1
Run Code Online (Sandbox Code Playgroud)

检查Spark UI上的环境选项卡显示这些确实是接收到的参数,但UI仍显示其他内容

有没有人知道什么可能导致Spark使用不同数量的内核而不是我想传递它?我显然尝试使用谷歌搜索,但没有找到任何有用的主题

提前致谢

apache-spark

5
推荐指数
1
解决办法
1011
查看次数