Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spark Jobserver速度太慢,无法执行Apache Spark查询_Java_Apache Spark_Spark Jobserver - Fatal编程技术网

Java Spark Jobserver速度太慢,无法执行Apache Spark查询

Java Spark Jobserver速度太慢,无法执行Apache Spark查询,java,apache-spark,spark-jobserver,Java,Apache Spark,Spark Jobserver,使用Jobserver Spark-2.0-preview和Apache Spark 2.1.1 当我检查spark UI时,每个查询的执行时间不超过1s,但我在10秒或更长时间后收到来自jobserver的响应。 我正在查询拼花地板文件,我正在使用java 这是我的代码示例,基本上我使用jobserver提供的SparkContext创建sparksession public class SOverflow extends VIQ_SparkJob { private static fina

使用Jobserver Spark-2.0-preview和Apache Spark 2.1.1

当我检查spark UI时,每个查询的执行时间不超过1s,但我在10秒或更长时间后收到来自jobserver的响应。 我正在查询拼花地板文件,我正在使用java

这是我的代码示例,基本上我使用jobserver提供的SparkContext创建sparksession

public class SOverflow extends VIQ_SparkJob {

private static final String CUBE_USERS_V_DE = "spark_cube_users_v_de";
private static final String CUBE_USERS_V_EN = "spark_cube_users_v_en";

@Override
public Object runJob(SparkContext jsc, Config jobConfig) {
    Long startTime = System.currentTimeMillis();
    String query = jobConfig.getString("query");
    try {
        sparkSession = SparkSession.builder()
                .sparkContext(jsc)
                .enableHiveSupport()
                .config("spark.sql.warehouse.dir", "file:///value_iq/spark-warehouse/")
                .config("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
                .config("spark.kryoserializer.buffer", "8m")
                .getOrCreate();
        Class<?>[] classes = new Class<?>[1];
        classes[0] = SOverflow.class;
        sparkSession.sparkContext().conf().registerKryoClasses(classes);

        getDataFrameFromParket("spark_cube_users_v" + "/tenant_id=" + getTENANT_ID()).createOrReplaceTempView("spark_cube_users_v");

        getDataFrameFromMySQL("value_iq", "lookup_values").filter(new Column("lookup_domain").equalTo("customer_type")).createOrReplaceTempView("lookup_values");

        sparkSession.sql(jdbcMySQL.getViewQuery(CUBE_USERS_V_DE)).createOrReplaceTempView("cube_users_v_de");
        sparkSession.sql(jdbcMySQL.getViewQuery(CUBE_USERS_V_EN)).createOrReplaceTempView("cube_users_v_en");

        List<String> list = sparkSession.sql(query).toJSON().takeAsList(10000);
        String result = "[";
        for (int i = 0; i < list.size(); i++) {
            result += (i == 0 ? "" : ",") + list.get(i);
        }
        result += "]";
        log(MyLog.INFORMATION, "runJob()", "Tooks " + ((System.currentTimeMillis() - startTime) / 1000) + "s to execute query: " + query + ".");
        return result;
    } catch (Exception e) {

    }
    return null;
}
}
公共类SOverflow扩展了VIQ_SparkJob{
私有静态最终字符串CUBE\u USERS\u V\u DE=“spark\u CUBE\u USERS\u V\u DE”;
私有静态最终字符串CUBE\u USERS\u V\u EN=“spark\u CUBE\u USERS\u V\u EN”;
@凌驾
公共对象运行作业(SparkContext jsc,Config jobConfig){
Long startTime=System.currentTimeMillis();
String query=jobConfig.getString(“查询”);
试一试{
sparkSession=sparkSession.builder()
.sparkContext(jsc)
.enableHiveSupport()
.config(“spark.sql.warehouse.dir”file:///value_iq/spark-warehouse/")
.config(“spark.serializer”、“org.apache.spark.serializer.KryoSerializer”)
.config(“spark.kryoserializer.buffer”,“8m”)
.getOrCreate();
类别[]类别=新类别[1];
classes[0]=SOverflow.class;
sparkSession.sparkContext().conf().registerKryoClasses(类);
getDataFrameFromParket(“spark_cube_users_v”+”/tenant_id=“+getTENANT_id())。createOrReplaceTempView(“spark_cube_users_v”);
getDataFrameFromMySQL(“值”、“查找值”).filter(新列(“查找域”).equalTo(“客户类型”)).createOrReplaceTempView(“查找值”);
sparkSession.sql(jdbcMySQL.getViewQuery(CUBE_USERS_V_DE)).createOrReplaceTempView(“CUBE_USERS_V_DE”);
sparkSession.sql(jdbcMySQL.getViewQuery(CUBE_USERS_V_EN)).createOrReplaceTempView(“CUBE_USERS_V_EN”);
List List=sparkSession.sql(query.toJSON().takeAsList(10000);
字符串结果=“[”;
对于(int i=0;i

我的问题是:为什么我在spark UI中的查询速度非常快时会得到这么长时间的响应?

你是在为每个作业创建临时上下文吗?@noorul,不是,我对所有作业使用单一上下文。但你是在为每个作业创建sparkSession和该上下文。@noorul,是的,我使用作业服务器作为参数传递给runJob方法的上下文创建它。你看到另一条路了吗?或者我必须从SparkSession对象中预查找?我认为不应该这样做,因为sjc参数中已经有sparkContext。