小编Clé*_*IEU的帖子

如何加速Spark SQL单元测试?

我正在评估Spark SQL以实现一个简单的报告模块(对已经存储在HDFS上的Avro数据进行的简单聚合很少).我毫不怀疑Spark SQL可以很好地适应我的功能和非功能需求.

但是,除了生产要求之外,我还要确保模块可以测试.我们遵循BDD方法,采用非常集中的方案,这意味着该模块将需要对一些非常简单的数据(1..10条记录)运行数十/数百个SQL查询.

为了大致了解我在本地模式下可以从Spark SQL中获得的性能,我已经快速制作了一些测试原型:

  1. select count(*) from myTable
  2. select key, count(*) from myTable group by key

第一次测试平均需要100ms,但第二次需要500ms.这样的性能是不可接受的,因为它会使测试套件太慢.

为了比较,我可以使用Crunch及其MemPipeline(在本地模式下使用MRPipeline为1500ms)以及在嵌入模式下使用Hive进行1500ms运行相同的测试.因此,Spark SQL在本地模式下比MR快一点,但仍然可以减慢构建良好的测试套件的速度.

是否可以在本地模式下加速Spark SQL?

有没有更好/更快的方法来测试Spark SQL模块?

(我还没有对执行情况进行分析,但由于groupBy().countByKey()RDD平均需要40ms,我希望发现罪魁祸首是查询优化器)


我的快速和肮脏的测试代码如下:

  SparkConf sparkConf = new SparkConf()
                .setMaster("local[4]")
                .setAppName("poc-sparksql");

  try (JavaSparkContext ctx = new JavaSparkContext(sparkConf)) {
        SQLContext sqlCtx = new SQLContext(ctx);

        for (int i = 0; i < ITERATIONS; i++) {
            Stopwatch testCaseSw = new Stopwatch().start();

            DataFrame df = sqlCtx.load("/tmp/test.avro", "com.databricks.spark.avro");
            df.registerTempTable("myTable");
            DataFrame result = sqlCtx.sql("select count(*) from myTable");

            System.out.println("Results: " + result.collectAsList()); …
Run Code Online (Sandbox Code Playgroud)

testing unit-testing apache-spark apache-spark-sql

11
推荐指数
2
解决办法
1554
查看次数

Sonar,S128:Switch case 应以无条件“break”语句结束 VS continue

除非明确说明,否则规则 squid:128 的存在似乎是为了防止 switch case 中的失败。这似乎是一个合理的规则,因为忘记休息是一个常见的错误。

然而,在需要的时候,失败是完全有效的。

该规则的文档指出,实现失败的唯一方法是使用 continue

   case 4:                                // Use of continue statement
   continue;
Run Code Online (Sandbox Code Playgroud)

我还检查了 SwitchCaseWithoutBreakCheck 的源代码,其实现是否真正检查“继续”语句

  @Override
  public void visitContinueStatement(ContinueStatementTree tree) {
    super.visitContinueStatement(tree);
    markSwitchCasesAsCompliant();
  }
Run Code Online (Sandbox Code Playgroud)

但是,Java 语言不支持 switch/case 中的 continue。在线文档和 ./java-checks/src/test/files/checks/SwitchCaseWithoutBreakCheck.java 都不是有效的 Java 程序。

我是否遗漏了一些东西,或者这条规则是否完全被打破并阻止使用失败?

java sonarqube

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

如何使用Java Flight Recorder避免截断的堆栈跟踪

我正在使用Oracle Java Flight Recorder来收集Java应用程序的堆栈跟踪示例.这些堆栈跟踪允许我最终生成CPU Flamegraph.

我的问题是Java Flight Recorder会截断超过64帧的堆栈跟踪.在Flamegraph中很容易观察到并且使用调试器我可以观察到没有FLRStackTrace超过64 FLRFrame秒且几乎所有64帧的堆栈跟踪都将其TruncationState设置为TRUNCATED.

有谁知道这64帧限制是否可以增加?如果堆栈跟踪不完整,则Flamegraphs无用.

java jvm jmc flamegraph jfr

3
推荐指数
1
解决办法
367
查看次数