Знакомство со Spark с нуля

Spark

предисловие

У Spark очень много очков знаний, поэтому я решил разделить его на P, чтобы рассказывать об этом не спеша🤣 На самом деле большинство ключевых операторов RDD написано, но контента все равно слишком много, поэтому ставить не буду вместе с этой ерундой.

Старая рутина, давайте сначала откроем официальный сайт, чтобы увидеть

переведи это предложение

Spark — это усовершенствование на основе Hadoop.Это общая среда параллельных вычислений, похожая на Hadoop MapReduce, с открытым исходным кодом лаборатории AMP Калифорнийского университета в Беркли.Spark реализует распределенные вычисления на основе алгоритма mapReduce.Он обладает преимуществами Hadoop MapReduce.

Однако, в отличие от MapReduce, промежуточные выходные данные и результаты задания могут храниться в памяти, поэтому больше нет необходимости читать и записывать HDFS, поэтому Spark лучше применять для алгоритмов mapReduce, требующих итерации, таких как интеллектуальный анализ данных и машинное обучение. . Но это касается только вычислений, а не хранения данных.На более позднем этапе искра должна использоваться для подключения к внешним источникам данных, таким как HDFS в Hadoop.

1. Основы искры

1.1 четыре основных особенности искры

По сути, это следующий контент главной страницы официального сайта.

1.1.1 Быстро

Добавьте контент в Baidu Translate

Независимо от того, какое планирование DAG, оптимизация запросов и т. д. профессиональные термины, просто посмотрите на скорость, в сто раз превышающую скорость гистограммы, мы знаем, что это очень быстро, и MapReduce требуется 110 с, чтобы завершить его за 0,9 с.

1.1.2 Почему Spark намного быстрее, чем MapReduce

Его можно условно разделить на два аспекта

1.基于内存:mapreduce任务在计算的时候,每一个job的输出结果会落地到磁盘,后续有其他的job需要依赖于前面job的输出结果,这个时候就需要进行大量的磁盘io操作,性能就比较低。 And spark task calculation of the time, the output job can be stored in memory, the subsequent there are other job needs dependent on the output results of previous job of this time directly from the memory to avoid disk io operation, so performance is can be улучшен.

2. Процессы и потоки: задачи mapreduce запускаются в кластере yarn как процессы, например, если в программе 100 MapTasks, то для одной задачи нужен один процесс, и для запуска этих задач нужно открыть 100 процессов.

Spark-задачи выполняются в процессе в виде потоков.Например, в программе 100 MapTasks, а более поздняя задача соответствует потоку.Это не процесс.Эти задачи нужно запускать.Если здесь экстремально : нужно открыть только один процесс, достаточно запустить в этом процессе 100 потоков. В процессе может быть запущено много потоков, а затраты времени и планирования, необходимые для запуска процесса и запуска потока, различаются. Запуск процесса занимает гораздо больше времени, чем запуск потока.

1.1.3 Простота использования


Расширять тут нечего, то есть можно быстро писать искровые программы на разных языках типа java/scala/python/R/SQL

1.1.4 Общее


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

SparkSQL:通过sql去做离线分析
SparkStreaming:解决实时计算用的
Mlib:机器学习的算法库
Graphx:图计算方面的

1.1.5 Совместимость


Программа spark — это программа вычислительной логики.Для запуска этой задачи требуются вычислительные ресурсы (память, процессор, диск).Везде, где вычислительные ресурсы могут быть предоставлены для текущей задачи, программа spark может быть запущена.

1.2 Искровая архитектура

1.2.1 Driver

Он выполнит основной метод, написанный клиентом, который создастSparkContextобъект. объектэто запись выполнения для всех искровых программ

1.2.2 Cluster Manager

Обычно существует три типа служб, которые предоставляют внешние вычислительные ресурсы для программ Spark.

  1. standAlone: ​​режим собственного кластера Spark, за распределение ресурсов всей задачи отвечает мастер-лидер кластера Spark.
  2. Yarn: Spark можно отправить в Yarn для запуска, в это время распределением ресурсов занимается босс ResourceManager в Yarn.
  3. mesos: платформа планирования ресурсов, похожая на Yarn с открытым исходным кодом от Apache.

Обычно мы будем использовать пряжу для управления

1.2.3 Worker Node

Мастер является начальником всего искрового кластера и отвечает за распределение ресурсов задач. То есть младший брат, отвечающий за работу в кластере Spark, — это нода, отвечающая за расчет задачи.

1.2.4 Executor

Executor — процесс, который запускает процесс (вычислительный ресурс) на рабочем узле.

1.2.5 Task

Задача spark запускается в процессе-исполнителе, соответствующем рабочему узлу, в качестве потока задачи.

1.3 Установка и развертывание Spark

Взять один. Проще говоря, скачать установочный пакет и закинуть его на сервер, распаковать и перейти в папку conf vim spark-env.sh, настроить переменные среды Java и zookeeper, а затем настроить рабочие узлы с vim slave. Затем измените переменные среды Spark и распространите их среди рабочих, а затем используйте источник /etc/profile.

Следует отметить, что у нас обычно есть несколько мастеров для высокой доступности кластера Spark (процедура высокой доступности Hadoop), которая обычно настраивается следующим образом.

#配置zk相关信息
export SPARK_DAEMON_JAVA_OPTS="
-Dspark.deploy.recoveryMode=ZOOKEEPER  
-Dspark.deploy.zookeeper.url=node1:2181,node2:2181,node3:2181  
-Dspark.deploy.zookeeper.dir=/spark"

Вышеупомянутое на самом деле-DЗатем возьмите 3 параметра и разделите параметры и параметры пробелами.

spark.deploy.recoveryModeЭто схема высокой доступности, которая полагается на zookeeper для восстановления, а втораяspark.deploy.zookeeper.urlАдрес смотрителя зоопарка указан, третийspark.deploy.zookeeper.dirЭто означает, что узел zookeeper отвечает за получение метаданных, сгенерированных Spark (каталог — это строка).

1.4 Пуск и остановка искровой группы

Сначала запустите zk, а затем запустите искровой кластер.

可以在任意一台服务器来执行(条件:需要任意2台机器之间实现ssh免密登录)
$SPARK_HOME/sbin/start-all.sh
在哪里启动这个脚本,就在当前该机器启动一个Master进程

整个集群的worker进程的启动由slaves文件控制

后期可以在其他机器单独再启动master
$SPARK_HOME/sbin/start-master.sh

Если развертывание прошло успешно, можно пройти

http://master主机名:8080 

Для доступа к веб-интерфейсу можно увидеть различную информацию о кластере, в том числе примерно

 整个spark集群的详细信息
 整个spark集群总的资源信息
 整个spark集群已经使用的资源信息
 整个spark集群还剩的资源信息
 整个spark集群正在运行的任务信息
 整个spark集群已经完成的任务信息

Кроме того, для резервного главного узлаstatusЗначение будет в режиме ожидания

Приведенную выше информацию нетрудно понять, здесь это не объясняется.

1.5 Как восстановить состояние до смерти последнего живого мастера?

В режиме высокой доступности во всем спарк-кластере много мастеров.Только один мастер выбирается в качестве живого мастера по zk, а остальные мастера находятся в режиме ожидания.При этом информация метаданных всего спарк-кластера обрабатывается через узлы в зк.

Позже, если живой мастер повесит трубку. Сначала zk почувствует, что мастер живого повесился.Далее будут проведены выборы среди нескольких мастеров в режиме ожидания, и снова будет сгенерирован живой мастер.Мастер этого живого будетЧтение информации о метаданных искрового кластера, хранящейся в узле zk., восстановить до состояния последнего мастера. Весь процесс прошел через множество различных этапов во время восстановления, каждый этап занимает определенное количество времени, и, наконец, восстанавливается до переходного состояния последнего живого мастера.Весь процесс восстановления обычно занимает 1-2 минуты.

1.6 В последствиях задачи на этапе восстановления мастера?

  1. Не влияет на уже запущенные задачи. Поскольку задача запущена, объясните ееВычислительные ресурсы получены, и в настоящее время мастер не требуется.
  2. Это влияет на задачу, которая должна быть отправлена. Поскольку задача требует вычислительных ресурсов, в это время будет найден живой мастер, который подаст заявку на вычислительные ресурсы.Поскольку живого мастера нет, задачаВычислительные ресурсы не могут быть получены, то есть задача не может быть запущена.

1.7 Подача программы Spark

1.7.1 В обычном режиме

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://node1:7077 \
--executor-memory 1G \
--total-executor-cores 2 \
examples/jars/spark-examples_2.11-2.3.3.jar \
10

Описание параметра:

--class: указывает основной класс, содержащий основной метод.

--master: укажите главный адрес искрового кластера.

--executor-memory: укажите размер памяти каждого исполнителя, который должен выполняться при выполнении задачи.

--total-executor-cores: указывает общее количество ядер процессора, необходимое для выполнения указанной задачи.

1.7.2 Фиксация в режиме высокой доступности (кластер имеет несколько мастеров)

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://node1:7077,node2:7077,node3:7077 \
--executor-memory 1G \
--total-executor-cores 2 \
examples/jars/spark-examples_2.11-2.3.3.jar \
10

На самом деле мало что изменилось. В искровом кластере много мастеров, и вы не знаете, какой мастер является живым мастером. Даже если вы знаете, какой мастер является живым мастером, он может зависнуть в следующую секунду. Вы можете перечислить все мастера здесь.

--master spark://node1:7077,node2:7077,node3:7077

Последняя программа опросит весь список мастеров, в итоге найдет живой мастер, затем применит его к вычислительным ресурсам и, наконец, запустит программу.

1.8 Spark-shell

···

finally

Я изначально планировал написать scala, но это не сложно придумать, и каждый может изучить его через различные поисковые системы, поэтому я вынес его в черновик (на самом деле поленился и не дописал)

Эта статья на самом деле является введением в концепцию, в следующей статье мы начнем говорить о RDD. Заинтересованные друзья могут продолжать обращать внимание! Общественный номер: Скажи свое желание