Отправка заданий на искру CDH кластера Ливий

 

сцена

Выберите продукты необходимо выполнить некоторые задачи (искры задач) через передний конец интерфейс, а затем представить искровой задачу кластера 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, и выход журнала задачи

интерфейс пряжи

 

рекомендация

отwww.cnblogs.com/dtmobile-ksw/p/11345908.html