Настройка кластера Apache Spark и Hive на Hadoop

Настройка кластера Apache Spark и Hive на Hadoop

    Как настроить 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")
    }

    При этом можно столкнуться с некоторыми проблемами. К примеру, исключение 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

    Узнайте больше про практическое использование Apache Spark и Hive для задач дата-инженерии, разработки распределенных приложений и аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

    [elementor-template id=»13619″]

    Источники

    1. https://medium.com/codex/setting-up-a-multi-node-apache-spark-cluster-on-apache-hadoop-and-apache-hive-412764ab6881
    2. https://medium.com/codex/setting-up-an-apache-hive-data-warehouse-6074775cf66