Запрос зависает перед выполнением (план запроса занимает много времени) - PullRequest
0 голосов
/ 01 сентября 2018

Я пытаюсь выполнить следующий запрос ниже (для таблиц Hive), но по какой-то причине он зависает еще до того, как начнет выполняться. Просто зависает после того, как я вставляю его в REPL, а также ничего не появляется в WEB UI.

Оболочка Spark запускается со следующими параметрами:

$ spark-shell --num-executors=10 --executor-cores=3 --executor-memory=16G --conf spark.sql.adaptive.enabled=true

testtable имеет несколько записей, а testtable_stg содержит около 100 миллионов записей. В запросе 15 столбцов, я просто включил 6, чтобы упростить его.

{
     {
       spark.table("testtable_stg")
         .selectExpr(
           """md5(concat(coalesce(nullif(test1,'null'),'val'),
             coalesce(nullif(test2,'null'),'val'),
             coalesce(nullif(test3,'null'),'val'),
             coalesce(nullif(test4,'null'),'val'),
             cast(coalesce(test5,'2222-22-22') as date),
           )) as sk""",
           "coalesce(nullif(test1,'null'),'val') as test1",
           "coalesce(nullif(test2,'null'),'val') as test2",
           "coalesce(nullif(test3,'null'),'val') as test3",
           "coalesce(nullif(test4,'null'),'val') as test4",
           "cast(coalesce(test5,'2222-22-22') as date) as test5",
           "CAST(from_unixtime(unix_timestamp()) AS TIMESTAMP) as dt"
         )
     }.join(spark.table("testtable"), Seq("sk"), "leftanti")
       .write
       .format("parquet")
       .mode("Append")
       .saveAsTable("testtable")
}

Когда я вставляю его в REPL без записи, это нормально. Но когда я хочу вызвать какое-либо действие на этом df (то есть показать, сохранить) или даже объяснить план, он останавливается.

Полагаю, в конце концов я найду решение для выполнения этого запроса. Но меня больше интересует поведение Спарк здесь, оно просто зависает. Я запускаю тысячи запросов в этом кластере. Но обычно я получаю некоторую информацию (например, предупреждение, ошибка и т. Д.). Но в этом конкретном запросе он просто висит.

UPDATE

Я начал удалять столбцы один за другим из оператора select, и, наконец, я получил план запроса. Меньше столбцов, план запроса был создан быстрее. Однако для всех столбцов это занимает много времени, потому что кажется, что план запроса составляется задолго до выполнения запроса. Есть ли способ ускорить его? Я пытался увеличить память на драйвере, но не повезло. Я использую свечи 2.1 и 2.2.

...