Мое требование: Из веб-приложения запустите задание 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 Как я уже указал здесь.
Спасибо!