Apache Ливий - Rest API - PullRequest
       23

Apache Ливий - Rest API

0 голосов
/ 30 марта 2020

Мое требование: Из веб-приложения запустите задание Spark в Yarn и отобразите результат обратно на веб-странице. Задание spark принимает несколько аргументов и вычисляет DataSet со значениями, которые необходимо вернуть в веб-приложение.

После просмотра веб-страниц я подумал, что для этого можно использовать Ливи.

Ливий уже был установлен с HDP 2.5. Поэтому я создал новый сеанс Livy с использованием POST / Sessions и включил мой файл jar.

{"kind":"spark","name":"livy","jars":["/xyz.jar"],"proxyUser":"livy"}

(мне пришлось включить заголовок «x-Request-by», так как csrfPrevention была включена.) Примечание: - jar имел быть помещенным в HDFS, чтобы это работало

Согласно Ливийским Примерам: - https://livy.apache.org/examples/ Я могу передать фрагменты кода как "data = {'code': '1 + 1'} «Я не понимаю, как я могу вызвать метод в своем классе. У меня нет опции« className »в соответствии с документацией Livy Rest API - https://livy.apache.org/docs/latest/rest-api.html

Если я использую POST / Пакетно для создания сеанса я могу указать jar и мой основной класс. Но, делая это таким образом, я не верну свой результат в мое веб-приложение.

Java Код в моем файле jar:

public class LivySample {


    public String executeSampleLivy(SparkContext sc,String input){
        JavaSparkContext jsc = new JavaSparkContext(sc);
        List<String> listNames = Arrays.asList("abc","def","ghi");
        JavaRDD<String> rdd =  jsc.parallelize(listNames);
        return rdd.filter(l->l.contains(input)).collect().get(0);
    }

}

Я попытался запустить приведенный ниже код как POST на URL Livy - session / 20 / Statement '' '

{
  "code": "import LivySample;LivySample lv = new LivySample();lv.executeSampleLivy(sc, \"abc\")"
}

Ошибка, полученная при вызове сеансов GET / 21 / Statement / 0:

  {
"id": 2,
"state": "available",
"output": {
"status": "error",
"execution_count": 2,
"ename": "Error",
"evalue": "<console>:1: error: '.' expected but ';' found. import LivySample;LivySample lv = new LivySample();lv.executeSampleLivy(sc, "chris"); ^",
"traceback": [],
}
}

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

Могу ли я использовать Java в LivyRest API Как я уже указал здесь.

Спасибо!

1 Ответ

0 голосов
/ 01 апреля 2020

Я более знаком с API пакетов, но я считаю, что в API сеанса JAR вашего приложения должен указываться в поле files запроса, а не jars (как это ни парадоксально).

В любом случае, сеанс Livy - это, по сути, интерактивный сеанс spark-shell. Поэтому, если вы хотите использовать сеансы, вы должны построчно проходить через вашу программу (отправляя запрос в конечную точку RunStatement для каждой строки). Затем в конце вы спросите конечную точку GetSessionStatement(s) о результате.

В качестве альтернативы (и, возможно, более просто), вы можете использовать пакетный API, просто записать вывод в какое-то постоянное местоположение и сделать так, чтобы ваше веб-приложение отображало его, когда пакет достигает состояния «УСПЕХ».

...