Интерпретаторы в Apache Zeppelin ================================= + `Обзор`_ + `Интерпретатор Zeppelin`_ + `Настройка интерпретатора`_ + `Группа интерпретаторов`_ + `Режим привязки интерпретатора`_ + `Подключение к существующему удаленному интерпретатору`_ Обзор ------- В разделе рассказывается об интерпретаторах, их группах и настройках в **Apache Zeppelin**. Концепция интерпретатора **Zeppelin** позволяет подключать любой язык/фреймворк обработки данных. В настоящее время **Zeppelin** поддерживает множество интерпретаторов, таких как **Scala** (с **Apache Spark**), **Python** (с **Apache Spark**), **Spark SQL**, **JDBC**, **Markdown**, **Shell** и другие. Интерпретатор Zeppelin ----------------------- Интерпретатор **Zeppelin** -- это плагин, который позволяет пользователям **Apache Zeppelin** использовать определенный язык/фреймворк обработки данных. Например, чтобы использовать Scala-код в **Zeppelin**, понадобится *%spark* интерпретатор. На странице интерпретатора при нажатии кнопки "+Create" в открывшемся диалоговом окне в выпадающем списке поля "Interpreter" отображаются все доступные интерпретаторы на сервере (:numref:`Рис.%s.`). .. _zeppelin_interpreters_create-interpreter: .. figure:: ../imgs/zeppelin_interpreters_create-interpreter.* :align: center Создать новый интерпретатор Настройка интерпретатора ------------------------- Настройка интерпретатора **Zeppelin** -- это конфигурация данного интерпретатора на сервере **Zeppelin**. Например, ниже приведены свойства, необходимые для подключения интерпретатора **hive JDBC** к **Hive** серверу (:numref:`Рис.%s.`). .. _zeppelin_interpreters_properties: .. figure:: ../imgs/zeppelin_interpreters_properties.* :align: center Свойства интерпретатора Для экспорта свойств в качестве переменной среды окружения необходимо, чтобы имя свойства состояло из символов верхнего регистра, цифр и подчеркивания (*[A-Z_0-9]*). В противном случае свойства задаются как свойство **JVM**. Каждый блокнот может быть связан с несколькими конфигурациями одного интерпретатора, для этого следует использовать значок настройки в правом верхнем углу блокнота (:numref:`Рис.%s.`). .. _zeppelin_interpreters_settings: .. figure:: ../imgs/zeppelin_interpreters_settings.* :align: center Настройки интерпретатора Группа интерпретаторов ----------------------- Каждый интерпретатор принадлежит к группе интерпретаторов. **Группа интерпретаторов (Interpreter Group)** -- это единый блок, позволяющий одновременно управлять (start/stop) несколькими интерпретаторами. По умолчанию каждый интерпретатор принадлежит к одной группе, но группа может содержать больше интерпретаторов. Например, группа интерпретаторов **Spark** включает поддержку **Spark**, **pySpark**, **Spark SQL** и загрузчик зависимостей *%dep*. Технически, интерпретаторы **Zeppelin** одной группы запускаются в одной **JVM**. Каждый из интерпретаторов может относиться к одной группе. Все их свойства перечислены в настройках интерпретатора (:numref:`Рис.%s.`). .. _zeppelin_interpreters_properties-group: .. figure:: ../imgs/zeppelin_interpreters_properties-group.* :align: center Свойства групп интерпретатора Режим привязки интерпретатора ------------------------------- Каждая конфигурация интерпретатора может быть сделана в одном из приведенных режимов привязки: *"shared"* -- общедоступный, *"scoped"* -- ограниченный, *"isolated"* -- отдельный (:numref:`Рис.%s.`). В режиме *"shared"* каждый блокнот, связанный с конфигурацией интерпретатора, совместно использует один экземпляр интерпретатора. В режиме *"scoped"* каждый блокнот создает новый экземпляр интерпретатора в том же процессе интерпретатора. В режиме *"isolated"* каждый блокнот создает новый процесс интерпретатора. .. _zeppelin_interpreters_binding-mode: .. figure:: ../imgs/zeppelin_interpreters_binding-mode.* :align: center Режимы привязки интерпретатора Подключение к существующему удаленному интерпретатору ------------------------------------------------------ Существует возможность запуска потока интерпретатора пользователем **Zeppelin** на удаленном узле. Для этого необходимо создать экземпляр *RemoteInterpreterServer* и запустить его следующим образом: :: RemoteInterpreterServer interpreter=new RemoteInterpreterServer(3678); // Here, 3678 is the port on which interpreter will listen. interpreter.start() Данный код запускает поток интерпретатора внутри процесса. После запуска интерпретатора можно настроить **Zeppelin** для подключения к *RemoteInterpreter*, установив флаг *"Connect to existing process"* и указав узел (*Host*) и порт (*Port*), который слушает процесс интерпретатора (:numref:`Рис.%s.`). .. _zeppelin_interpreters_connecting: .. figure:: ../imgs/zeppelin_interpreters_connecting.* :align: center Подключение к удаленному интерпретатору