сцена
Выберите продукты необходимо выполнить некоторые задачи (искры задач) через передний конец интерфейс, а затем представить искровой задачу кластера RESTful API Ливий
Краткое введение Ливий, в переводе с официального сайта :
Ливия сервиса на основе лицензии Apache, которая позволяет удаленным приложения более удобное взаимодействию с искровым кластером через REST API. Через простой интерфейс REST или клиентской библиотеки RPC, который позволяет легко представить работу или Спарк фрагменты кода Спарк, синхронного или асинхронного извлечения результатов и управления SparkContext. Ливия также упрощает взаимодействие между искрой и сервером приложений, который является веб / мобильные приложения упрощают архитектуру Спарка.
Основные особенности:
1. нескольких клиентов , как SparkContexts несколько длительных заданий с использованием Спарка.
2. управлять несколько SparkContexts, пусть они (ПРЯЖА / Mesos) работает в кластере, для достижения хорошей отказоустойчивости и одновременно, вместо того, чтобы работать на службе Ливий.
3. скомпилированные банки, фрагмент кода или Java / Scala клиент API может быть использован для отправки заданий.
4. Аутентификация безопасности связи. (Такие , как Kerberos)
Остальные апи Ливий больше ( референтных ссылки ), в котором один представленные здесь
Код выглядит следующим образом:
<зависимости> <идентификатор_группы> org.apache.httpcomponents </ идентификатор_группы> <артефакт> HttpClient </ артефакт> <версия> 4.5.4 </ версия> </ зависимость> <! - https://mvnrepository.com/artifact /com.alibaba/fastjson -> <зависимость> <идентификатор_группы> com.alibaba </ идентификатор_группы> <артефакт> fastjson </ артефакт> <версия> 1.2.47 </ версия> </ зависимость>
пакет cn.com.dtmobile.livy; импорт java.io.BufferedReader; импорт java.io.DataOutputStream; импорт java.io.IOException; импорт java.io.InputStreamReader; импорт java.net.HttpURLConnection; импорт java.net.URL; импорт com.alibaba.fastjson.JSON; импорт com.alibaba.fastjson.JSONObject; общественный класс HttpUtils { государственной статическая HttpURLConnection инициализация (HttpURLConnection соппы) { conn.setDoInput (истина); conn.setDoOutput (истина); conn.setRequestProperty ( "кодировка", "UTF-8"); conn.setRequestProperty ( "Content-Type", "применение / JSON"); вернуться соед; } / ** * / общественности статической JSONObject GetAccess (String urlStr) { HttpURLConnection сопп = NULL; BufferedReader в = NULL; StringBuilder строитель = NULL; JSONObject ответ = NULL; попробуйте { URL URL = новый URL (urlStr); Conn = INIT ((HttpURLConnection) url.openConnection ()); conn.setRequestMethod ( "GET"); conn.connect (); в = новый BufferedReader (новый InputStreamReader (conn.getInputStream (), "UTF-8")); Строка строка = «»; строитель = новый StringBuilder (); в то время как (! (строка = in.readLine ()) = NULL) { builder.append (строка); } Ответ = JSON.parseObject (builder.toString ()); } задвижка (Исключение е) { e.printStackTrace (); } наконец { если (подключ! = NULL) conn.disconnect (); попробуйте { если (в! = NULL) in.close (); } Поймать (IOException е) { e.printStackTrace (); } } Возвращать ответ; } / ** * HttpDelete请求 * / общественности статической Логическое deleteAccess (String urlStr) { HttpURLConnection сопп = NULL; попробуйте { URL URL = новый URL (urlStr); Conn = INIT ((HttpURLConnection) url.openConnection ()); conn.setRequestMethod ( "DELETE"); conn.connect (); conn.getInputStream () близко (). conn.disconnect (); } задвижка (Исключение е) { e.printStackTrace (); вернуться ложным; } Возвращает истину; } / ** * HttpPost请求 * / общественности статической строки postAccess (String urlStr, данные JSONObject) { HttpURLConnection сопп = NULL; BufferedReader в = NULL; StringBuilder строитель = NULL; DataOutputStream из = NULL; пытаться { URL URL = новый URL (urlStr); Conn = INIT ((HttpURLConnection) url.openConnection ()); conn.setRequestMethod ( "ПОСТ"); conn.connect (); из = новый DataOutputStream (conn.getOutputStream ()); out.write (. data.toString () GetBytes ( "utf8")); out.flush (); в = новый BufferedReader (новый InputStreamReader (conn.getInputStream (), "UTF-8")); Строка строка = «»; строитель = новый StringBuilder (); в то время как (! (строка = in.readLine ()) = NULL) { builder.append (строка); } }в конце концов { e.printStackTrace (); если (подключ! = NULL) conn.disconnect (); попробуйте { если (в! = NULL) in.close (); если (из = нуль!) out.close (); } Поймать (IOException е) { e.printStackTrace (); } } Если (строитель! = NULL) вернуть builder.toString (); вернуть ""; } }
пакет cn.com.dtmobile.livy; импорт com.alibaba.fastjson.JSON; импорт com.alibaba.fastjson.JSONException; импорт com.alibaba.fastjson.JSONObject; класс LivyApp общественного { статические строки хост = «http://172.xx.x.xxx:8998»; открытые статические INT submitJob () бросает JSONException { данные JSONObject = новый JSONObject (); JSONObject конф = новый JSONObject (); conf.put ( "spark.master", "Нить-кластер"); data.put ( "конф", конф); data.put ( "PROXYUSER", "etluser"); data.put ( "файл", "/ конг / данные / банка / your_jar.jar"); //指定执行的искровой баночка (HDFS路径) data.put ( "баночка", новый String [] { "/ конг / данные / банка / dbscan-на-spark_2.11-0.2.0-SNAPSHOT.jar"}); //指定искровым банка依赖的外部банки данные , данные .Put ( "имя", "jonitsiteplan"); data.put ( "executorCores", 3); data.put ( "executorMemory", "2g"); data.put ( "driverCores", 1); data.put ( "driverMemory", "4g"); data.put ( "numExecutors", 6); data.put ( "очередь", " по умолчанию"); data.put ( "арг", новая строка [] { "杭州", "yj_hangzhou", "2019041719"}); //传递参数 Строка Рез = HttpUtils.postAccess (Host + "/" партии, данные); JSONObject resjson = JSON.parseObject (RES); System.out.println ( "ID:" + resjson.getIntValue ( "ID")); вернуться resjson.getIntValue ( "ID"); } Государственной статической силы getJobInfo (интермедиат ID) { // JSONObject ответ = HttpUtils.getAccess (хост + "/ партии / 3"); // System.out.print (response.toString (1)); // JSONObject войти = HttpUtils.getAccess (хост + "/ партии / 3 / Log"); // System.out.print (log.toString (1)); JSONObject состояние = HttpUtils.getAccess (хост + "/ партии /" + + идентификатор "/ состояние"); System.out.println (state.getString ( "состояние")); } Государственной статической силы killJob (интермедиат идентификатор) { //可以直接убить掉искру任务 если (HttpUtils.deleteAccess (хост + "/ партии /" + идентификатор)) { System.out.println ( "убить искру успеха работу"); в то время как (истинно) { попробуйте { getJobInfo (идентификатор); Thread.sleep (10000); } Задвижка (InterruptedException е) { } } // killJob (9); } }
После получения состояния задачи фиксации, состояние может быть на интерфейсе задачи Ливий UI может быть запрошен API, и выход журнала задачи
интерфейс пряжи