Мониторинг Spark Structured Streaming с пользовательскими событиями [duplicate]

При использовании let

ключевое слово let присоединяет объявление переменной к какому-либо блоку (обычно пару { .. }), в котором оно содержится. Другими словами, let неявно захватывает область любого блока для его объявления переменной.

let переменные не могут быть доступны в объекте window, потому что они не могут быть глобально доступны.

function a(){
    { // this is the Max Scope for let variable
        let x = 12;
    }
    console.log(x);
}
a(); // Uncaught ReferenceError: x is not defined

При использовании var

var, а переменные в ES5 имеют области действия, означающие, что переменные действительны внутри функции, а не вне самой функции.

var переменные могут быть доступны в window, потому что они не могут быть доступны по всему миру.

function a(){ // this is the Max Scope for var variable
    { 
        var x = 12;
    }
    console.log(x);
}
a(); // 12

Если вы хотите узнать больше продолжить чтение ниже

, один из самых известных вопросов собеседования по сфере охвата также может быть достаточным точное использование let и var, как показано ниже:

При использовании let

for (let i = 0; i < 10 ; i++) {
    setTimeout(
        function a() {
            console.log(i); //print 0 to 9, that is literally AWW!!!
        }, 
        100 * i);
}

Это связано с тем, что при использовании let для каждой итерации цикла переменная

При использовании var

for (var i = 0; i < 10 ; i++) {
    setTimeout(
        function a() {
            console.log(i); //print 10 times 10
        }, 
        100 * i);
}

Th заключается в том, что при использовании var для каждой итерации цикла переменная имеет область действия и имеет общую копию.

5
задан svKris 17 June 2015 в 18:56
поделиться

4 ответа

Я бы рекомендовал вам напрямую использовать интерфейс, который обеспечивает искру. Он предоставляет много информации и показателей по времени, шагам, использованию сети и т. Д. ...

Вы можете узнать подробнее об этом здесь: https://spark.apache.org/docs/ last / monitoring.html

Кроме того, в новой версии Spark (1.4.0) есть хороший визуализатор, чтобы понять шаги и этапы ваших искровых заданий.

8
ответ дан hveiga 5 September 2018 в 10:44
поделиться

Как вы сказали, профилирование распределенного процесса сложнее, чем профилирование одного процесса JVM, но есть способы его достижения.

Вы можете использовать выборку в качестве метода профилирования потоков. Добавьте агента java к исполнителям, которые будут захватывать трассировки стека, а затем агрегируют по этим трассировкам стека, чтобы узнать, какие методы использует ваше приложение в большинстве случаев.

Например, вы можете использовать statsd- jvm-profiler java agent и настроить его для отправки трассировки стека в InfluxDB , а затем скомпилировать их с помощью пламенных графов .

информацию, проверить мое сообщение о профилировании приложений Spark: https://www.paypal-engineering.com/2016/09/08/spark-in-flames-profiling-spark-applications-using-flame-graphs/

4
ответ дан aviemzur 5 September 2018 в 10:44
поделиться

Посмотрите на JVM Profiler , выпущенный UBER.

JVM Profiler - это инструмент, разработанный UBER для анализа приложений JVM в распределенной среде. Он может подключать Java-агент к исполнителям приложения Spark / Hadoop распределенным способом и собирать различные показатели во время выполнения. Это позволяет отслеживать произвольные java-методы / аргументы без изменения исходного кода (аналогично Dtrace).

Вот сообщение в блоге .

0
ответ дан pkumbhar 5 September 2018 в 10:44
поделиться

Недавно я написал статью и скрипт, который обертывает spark-submit и генерирует график пламени после выполнения приложения Spark.

Вот статья: https: // www .linkedin.com / pulse / profiling-spark-applications-one-click-michael-spector

Вот сценарий: https://raw.githubusercontent.com/spektom/ spark-flamegraph / master / spark-submit-flamegraph

Просто используйте его вместо обычного spark-submit.

3
ответ дан spektom 5 September 2018 в 10:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: