Как настроить Apache Spark 3.0.1 и Hive 3.1.2 на Hadoop 3.3.0: тонкости установки и конфигурирования для обучения администраторов кластера и инженеров с примерами команд и кода распределенных приложений.
Запуск Spark-приложения на Hadoop-кластере
Прежде всего, для настройки кластера Apache Spark нужен работающий кластер Hadoop. Сама установка и настройка выполняется в 2 этапа:
- сперва Spark должен знать, как работает Hadoop;
- затем вычислительному движку нужно задать собственные конфигурации.
Для этого необходимо скопировать файлы конфигурации Hadoop в каталог конфигурации Spark на всех серверах в каталоге /pot/spark/conf.
На главном сервере следует отредактировать файлы конфигурации и скопировать их в файлы worker’ов, т.е. там, где выполняются рабочие процессы. Далее необходимо отредактировать файл .bashrc, добавив эти строки:
# Spark export SPARK_HOME=/opt/spark export SPARK_CONF_DIR=$SPARK_HOME/conf export PATH=$SPARK_HOME/bin:$PATH
Теперь настройка вычислительного движка завершена, но перед отправкой распределенного приложения в кластер нужно предоставить JAR-файлы, просто запустив эти команды на любом сервере:
[hduser@{server} ~]# hdfs dfs –mkdir –p /user/spark/share/lib [hduser@{server} ~]# hadoop fs –put /opt/spark/jars/* /user/spark/share/lib/
Далее можно отправить пользовательские приложения Spark в кластер и использовать Apache HDFS и YARN, запустив команду с набором параметров на любом сервере:
[hduser@{server} ~]# /opt/spark/bin/spark-submit \ --master yarn –deploy-mode cluster \ --class com.github.saeiddadkhah.hadoop.spark.Application \ --driver-memory 2G –driver-cores 2 \ --executor-memory 1G –executor-cores 1\ --name MyApp \ --num-executors 10 \ MyApp.jar
При этом необходимо предоставить некоторые другие конфигурации внутри приложения. В частности, определив точку входа через объект сеанса Spark, о чем мы подробно писали здесь. Также следует задать значения параметров контекста, например, как это сделано в следующем участке кода на Scala:
object SparkConfig { val ss = SparkSession .builder() .appName(“MyApp”) .config(“spark.hadoop.fs.defaultFS”, “hdfs://master:9000”) .config(“spark.sql.debug.maxToStringFields”, 100) .config(“fs.s3.impl”, “org.apache.hadoop.fs.s3native.NativeS3FileSystem”) .getOrCreate() ss.sparkContext.hadoopConfiguration.set(“fs.s3a.impl”, “org.apache.hadoop.fs.s3a.S3AfileSystem”) ss.sparkContext.hadoopConfiguration.set(“fs.s3a.path.style.access”, “True”) }
Чтобы вычислительный движок мог обращаться к популярному SQL-on-Hadoop инструменту, NoSQL-хранилищу данных Hive, это тоже нужно настроить. Как это сделать и с какими трудностями можно при этом столкнуться, мы рассмотрим далее.
Настройка Apache Hive
Прежде всего необходимо скопировать файл конфигурации Hive hive-site.xml в каталог конфигурации Spark на всех серверах с помощью команды cp, сменив директорию на соответствующий каталог:
[hduser@{server} ~]# cd /pot/spark/conf [hduser@{server} /opt/spark/conf]# cp /opt/hive/conf/hive-site.xml
Далее нужно добавить другие конфигурации в Spark-приложение, чтобы включить поддержку Hive. По аналогии с вышерассмотренным участком кода на Scala, также следует определить точку входа в приложение через объект сеанса Spark и задать значения параметров контекста:
object SparkConfig { val ss = SparkSession .builder() .appName("MyApp") .config("spark.hadoop.fs.defaultFS", "hdfs://master:9000") .config("spark.sql.debug.maxToStringFields", 100) .config("spark.sql.warehouse.dir", "/user/hive/warehouse") .config("fs.s3.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem") .config("hive.metastore.uris", "thrift://hiveserver:9083") .enableHiveSupport() .getOrCreate() ss.sparkContext.hadoopConfiguration.set("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem") ss.sparkContext.hadoopConfiguration.set("fs.s3a.path.style.access", "True") }
Код курса
HIVE
Ближайшая дата курса
Продолжительность
ак.часов
Стоимость обучения
0 руб.
При этом можно столкнуться с некоторыми проблемами. К примеру, исключение RuntimeException типа com.ctc.wstx.WstxParsingException:
Exception in thread "main" java.lang.RuntimeException: com.ctc.wstx.exc.WstxParsingException: Illegal character entity: expansion character
Обычно это случается при копировании, когда в файл конфигурации hive-site.xml попадает лишний символ. Удалить его можно, просто открыв этот файл в редакторе vi:
[hduser@hiveserver /opt/hive/conf]# vi hive-site.xml # Find hive.txn.xlock.iow property and delete the special character between for and transactional words in its description.
Также можно столкнуться с исключением, которое возникает из-за несоответствия версий библиотек. Для устранения этой ошибки нужно проверить версию библиотеки guava в Apache Hive и Hadoop, чтобы привести их к единой последней версии. Сообщение об ошибке выглядит так:
Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)
Проверка версий:
[hduser@hiveserver ~]# ls /opt/hive/lib/ | grep guava guava-19.0.jar [hduser@hiveserver ~]# ls /opt/hadoop/share/hadoop/hdfs/lib/ | grep guava guava-27.0-jre.jar
В данном примере нужно скопировать JAR-файл библиотеки guava из Hadoop в Hive:
[hduser@hiveserver ~]# mv /opt/hive/lib/guava-19.0.jar /opt/hive/lib/guava-19.0.jar.bak [hduser@hiveserver ~]# cp /opt/hadoop/share/hadoop/hdfs/lib/guava-27.0-jre.jar /opt/hive/lib/guava-27.0-jre.jar
Код курса
NOSQL
Ближайшая дата курса
Продолжительность
ак.часов
Стоимость обучения
0 руб.
Узнайте больше про практическое использование Apache Spark и Hive для задач дата-инженерии, разработки распределенных приложений и аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
- Hadoop SQL администратор Hive
- Интеграция Hadoop и NoSQL
- Основы Apache Spark для разработчиков
- Анализ данных с Apache Spark
Источники