Протестировано на EMR:
cd /usr/lib/spark/jars/; zip /tmp/yarn-archive.zip *.jar
cd path/to/folder/of/someOtherDependancy/jarFolder/; zip /tmp/yarn-archive.zip jar-file.jar
zip -Tv /tmp/yarn-archive.zip
для целостности теста и расширенной отладки yarn-archive.zip
уже существует в hdfs, тогда hdfs dfs -rm -r -f -skipTrash /user/hadoop/yarn-archive.zip
hdfs dfs -put /tmp/yarn-archive.zip /user/hadoop/
else hdfs dfs -put /tmp/yarn-archive.zip /user/hadoop/
--conf spark.yarn.archive="hdfs:///user/hadoop/yarn-archive.zip"
использует этот аргумент в spark-submit
Причина, по которой это может сработать, мастер не должен распространять все банки на ведомые устройства.
Я понял, что он может сэкономить ваше время на 3-5 секунд, это время также зависит от количества узлов в кластере , Больше узлов, больше вы экономите время.
Хорошо, downvote время...
Профилировщики являются великими для измерения.
, Но Ваш вопрос был, "Как я могу определить, где медленные части моего кода?".
, Который является другой проблемой. Это - диагноз, не измерение.
я знаю, что это не популярное представление, но это верно.
Это похоже на бизнес, который пытается сократить издержки.
Один подход (вершина вниз) должен измерить полные финансы, затем сломать ее категориями и отделами, и попытаться предположить то, что могло быть устранено. , Который является измерением.
Другой подход (вверх дном) должен войти наугад в офис, выбрать кого-то наугад и спросить их, что они делают в тот момент и (значительно) почему, подробно.
Делают это несколько раз.
, Именно это Harry Truman сделал при внезапном начале Второй мировой войны, в американской военной промышленности, и сразу раскрыл крупное мошенничество и отходы путем посещения нескольких сайтов. , Который является диагнозом.
В коде можно сделать это очень простым способом: "Приостановите" его и спросите его, почему это тратит тот конкретный цикл. Обычно стек вызовов говорит Вам почему, подробно.
Делают это несколько раз.
Это выбирает. Некоторые профилировщики выбирают стек вызовов. Но тогда по некоторым причинам они настаивают на том, чтобы суммировать время, проведенное в каждой функции, содержащей и эксклюзивной. Это похоже на суммирование отделом в бизнесе, содержащем и эксклюзивном.
Это теряет информацию, в которой Вы нуждаетесь, который является мелкозернистой деталью, которая говорит, необходимы ли циклы.
Для ответа на вопрос:
Просто приостанавливают Вашу программу несколько раз и получают стек вызовов каждый раз. Если Ваш код будет очень медленным, то расточительные вызовы функции будут идти почти каждый стек. Они укажут с точностью на "медленные части Вашего кода".
ДОБАВИЛ: RedGate ANTS добирается там. Это может дать Вам стоивший с методической точностью, и это довольно элегантно. Таким образом, если Вы находитесь в.NET, и можете сэкономить 3 числа и не возражаете ожидать вокруг для установки & изучите это, это может сказать Вам большую часть того, что Ваша клавиша Pause может сказать Вам и быть намного более симпатичной об этом.
Я использовал Профилировщика МУРАВЬЕВ, и я могу присоединиться к другим с рекомендацией.
цена НЕЗНАЧИТЕЛЬНА при сравнении ее с суммой dev часов, она сохранит Вас.
я Вы - разработчик для жизни, и Ваша компания не купит ее для Вас, или изменить компанию или купить ее для себя.
Для профилирования больших сложных приложений UI затем Вам часто нужен ряд инструментов и подходов. Я обрисую в общих чертах подход и инструменты, которые я недавно использовал на проекте улучшить производительность приложения.Net 2.0 UI.
, В первую очередь, я взял интервью у пользователей и работал через варианты использования сам для предложения списка целевых вариантов использования, которые выделили системы худшие области выполнения. Т.е. Я не хотел проводить n дни человека, оптимизируя функцию, которая почти никогда не была использована, но не очень медленная. Я хотел бы провести время, однако, оптимизируя функцию, которая была немного вяла, но вызвала 1000 времена день, и т.д.
, После того как варианты использования кандидата были определены, я оснастил свой код с моим собственным классом входа легкого веса (я использовал некоторые высокопроизводительные таймеры и пользовательское решение для входа потому что необходимая точность подмиллисекунды). Вы могли бы, однако, смочь сойти с рук log4net и метки времени. Причина я оснастил код, состоит в том, что иногда легче считать Ваши собственные журналы, а не вывод профилировщика. Мне были нужны оба по ряду причин (например, имеющие размеры разметки пользовательского элемента управления .NET не всегда простое использование профилировщика).
я затем выполнил свой оснащенный код с профилировщиком МУРАВЬЕВ и представил вариант использования. Путем объединения профиля МУРАВЬЕВ и моих собственных файлов журнала я очень быстро смог обнаружить проблемы с нашим приложением.
Мы также представили сервер, а также UI и смогли разработать разбивки в течение времени, проведенного в UI, время, проведенное на проводе, время, проведенное на сервере и т.д.
Также стоящий замечания, - то, что 1 выполнение не достаточно, и 1-е выполнение обычно стоит выбросить. Позвольте мне объяснить: загрузка ПК, сетевой трафик, состояние JIT-компиляции и т.д. может все влиять на время, которое займет конкретная операция. Простая стратегия состоит в том, чтобы измерить операцию n, времена (скажите 5), выбросьте самое медленное и самое быстрое выполнение, анализирование профилей remianing.
профилировщик Eqatec является милым мелким профилировщиком, который свободен и прост в использовании. Это, вероятно, не прибудет в какой-либо степени, "ничего себе", фактор профилировщика Муравьев с точки зрения функций, но это все еще - очень прохладный IMO и стоящий взгляда.
Используйте профилировщик . МУРАВЬИ стоят денег, но очень хороши.
Учебное руководство/Объяснение Профилировщика МУРАВЬЕВ
Если Вы не хотите платить, более новые вириона VS идут с профилировщиком, но быть честным это не кажется очень хорошим. ATI/AMD делает свободного профилировщика..., но не очень удобный для пользователя (мне, я не мог вытащить полезную информацию из него).
совет, который я дал бы, к вызовам функции времени самостоятельно с кодом. Если они быстры, и у Вас нет таймера высокой точности, или вызовы варьируются по замедлению по ряду причин (например, каждый x вызовы, создающие некоторый кэш), пытаются выполнить каждого x10000 времена или что-то, то, деля результат соответственно. Это не может идеально подойти для некоторых разделов кода, но если Вы не можете найти хорошее, бесплатное, решение других производителей, в значительной степени, что оставляют, если Вы не хотите заплатить.