电竞比分网-中国电竞赛事及体育赛事平台

分享

Java 如何遠程調(diào)用 SPL 腳本

 raqsoft 2019-08-28

《Java 如何調(diào)用 SPL 腳本》中我們介紹了在 Java 中可以部署集算器 JDBC 來調(diào)用本地 SPL 腳本,那如何能在 Java 中遠程調(diào)用 SPL 腳本呢?這就是接下來要說的重點!

實現(xiàn)思路通過下圖一目了然:

1png

部署服務(wù)器

服務(wù)器是運行在 Java 平臺上面向分析型的高性能數(shù)據(jù)庫,作為高性能計算數(shù)據(jù)倉庫,服務(wù)器可以在離線跑批、在線查詢、多維分析和內(nèi)存計算等方面提供高效的計算輸出,幫助用戶解決計算中的多種問題。

下面我們先來了解一下服務(wù)器的使用及配置,更多關(guān)于服務(wù)器的介紹可參考集算器在線文檔《教程》服務(wù)器小節(jié)。

1. 服務(wù)器配置

在集算器安裝目錄的 esProc\bin 路徑下,可以找到 esprocs.exe 文件,可以直接運行它來啟動或配置服務(wù)器。使用 esprocs 時,會自動在安裝路徑下加載所需的 jar 包,但是需要注意此時使用的配置文件 raqsoftConfig.xml 和 unitServer.xml 必須放置在集算器安裝目錄的 esProc\config 路徑下。運行后,打開窗口如下:

1png

在 esprocs.exe 執(zhí)行時,窗口中會顯示加載初始設(shè)定的信息,這些設(shè)定實際上是由配置文件 raqsoftConfig.xml 決定的。在右側(cè)的菜單欄中點擊 Options,可以配置服務(wù)器的相關(guān)信息,點擊后彈出服務(wù)器配置窗口如下:

2png

在頁面中,可以配置授權(quán)文件、主路徑、尋址路徑、日期時間格式、默認字符編碼、日志等級、文件緩存區(qū)字節(jié)數(shù)等信息。

下面我們繼續(xù)來了解服務(wù)器的配置,在右側(cè)的菜單欄中點擊 Config,可以配置分機的相關(guān)信息,點擊后在 Unit 頁面中可以配置分機信息,如下:

3png

Temp file timeout 設(shè)定臨時文件的生命周期小時數(shù);Check interval 必須設(shè)定為正值或 0,為檢查過期的間隔秒數(shù);Proxy timeout 為代理生命周期,即遠程游標、任務(wù)空間的生命小時數(shù)。如果 Temp file timeout 或者 Proxy timeout 設(shè)定為 0,則不檢查過期。

分機列表 Host list 中,可以配置本機上所有可能用來運行服務(wù)器的分機,配置它們的 IP 地址,在進程列表 Process list 中,可以為一個 IP 地址配置多個進程的端口 Port,其中第一個為主進程。服務(wù)器啟動時,會自動在分機列表中,尋找有空閑進程的分機,然后再由分機將任務(wù)交由某個進程執(zhí)行。需要注意的是,IP 地址需要是本機的真實 IP,在使用多網(wǎng)卡的情況下可以設(shè)定多個 IP。

分機配置中,Max task number 是該分機允許執(zhí)行的最大作業(yè)數(shù),而 Preferred task number 是該分機的適合作業(yè)數(shù),當分機中使用了多個進程時,適合作業(yè)數(shù)就是分進程的總數(shù)。在 Partitions 一欄中,可以選擇每個分機上所使用的分區(qū)。

服務(wù)器的 Enable clients 頁面中可以設(shè)定客戶端白名單,如下:

4png

選定 Check clients 后,可以在 Clients hosts 列表中,設(shè)定允許調(diào)用服務(wù)器的 IP 地址白名單,不在設(shè)定范圍中的 IP 地址將無法調(diào)用服務(wù)器執(zhí)行計算。

服務(wù)器設(shè)定完成后,點擊 OK,此時可以自動設(shè)定對應(yīng)的配置文件 unitServer.xml 如下:

<?xml version="1.0" encoding="UTF-8"?><SERVER Version="3"><TempTimeOut>12</TempTimeOut><Interval>1800</Interval><ProxyTimeOut>12</ProxyTimeOut><Hosts><Host ip="192.168.107.1" maxTaskNum="8" preferredTaskNum="3"><Partitions><Partition name="0" path="d:/file/parallel/node1/0"></Partition><Partition name="1" path="d:/file/parallel/node1/1"></Partition></Partitions><Units><Unit port="8281"></Unit><Unit port="8282"></Unit></Units></Host></Hosts><EnabledClients check="true"><Host start="192.168.107.1" end="192.168.107.1"></Host></EnabledClients></SERVER>

2. 運行服務(wù)器

服務(wù)器配置完成后,在分機運行窗口中,點擊 Start 即可開始運行服務(wù)器,需要停止服務(wù)可以點擊 Stop,服務(wù)器停止后可以點擊 Quit 退出。如果點擊 Reset,服務(wù)將初始化重新啟動,清除所有的全局變量以及內(nèi)存區(qū)。

1png

在分機啟動時,設(shè)置的各個進程會同時啟動,可以點擊 Main 查看分機主進程的執(zhí)行情況,或者點擊對應(yīng)的端口號查看分機的其它分進程執(zhí)行頁面。

在 Linux 系統(tǒng)中,可以運行 ServerConsole.sh 來啟動服務(wù)器類:

2png

打開的分機運行窗口和在 Windows 下是相同的:

3png

此外,還可以在執(zhí)行命令時添加 -p 參數(shù),非圖形啟動服務(wù)器,此時服務(wù)器將直接執(zhí)行:

4png

部署集算器 JDBC

將啟動 JAVA 應(yīng)用程序時加載集算器所需的 jar 包及配置文件放到項目中。需要注意的是,集算器 JDBC 所要求的 JDK 版本不得低于 1.6。

1. 加載驅(qū)動 jar

集算器 JDBC 類似一個不帶物理表的數(shù)據(jù)庫 JDBC 驅(qū)動,可以把它簡單的看成是一個只有存儲過程的數(shù)據(jù)庫。另外,集算器 JDBC 是個完全嵌入式計算引擎,已經(jīng)在 JDBC 中完成了所有運算,不象數(shù)據(jù)庫那樣 JDBC 只是個接口,實際運算在獨立的數(shù)據(jù)庫服務(wù)器完成。

如果在 web 應(yīng)用項目下,可以把這些 jar 包放在 WEB-INF/lib 目錄下。集算器 JDBC 需要三個基礎(chǔ) jar 包,都可以在 [安裝目錄]\esProc\lib 目錄下找到:

dm.jar //集算器計算引擎及JDBC驅(qū)動包icu4j_3_4_5.jar //處理國際化jdom.jar //解析配置文件

除了以上的必需 jar,還有一些為完成特定功能的 jar 包:

比如數(shù)據(jù)庫作為數(shù)據(jù)源,那么還需要相應(yīng)數(shù)據(jù)庫的驅(qū)動 jar 包;
要讀寫 Office 文件,則需要加入 poi*.jar 和 xmlbeans.jar; 要使用繪制圖形功能,則需要加入 SVG 圖形處理相關(guān)的 jar 包,包括 batik*.jar、js.jar、pdf-transcoder.jar、xalan-2.6.0.jar、xercesImpl.jar、xml-apis.jar、xml-apis-ext.jar。

2. 部署 raqsoftConfig.xml

集算器還有個重要的配置文件 raqsoftConfig.xml,可以在 [安裝目錄]\esProc\config 下找到,需復(fù)制后放置在應(yīng)用項目的類路徑下,配置文件的名稱不可改變。

在 raqsoftConfig.xml 文件中,配置了授權(quán)信息、集算器主路徑、dfx 文件尋址路徑、JDBC 遠程訪問的服務(wù)器地址等各類信息。我們先看下最基本的配置,即集算器授權(quán)文件和服務(wù)器地址的配置:

<?xml version="1.0" encoding=" UTF-8"?> <Config Version="2">  <Runtime>  <Esproc>     <!--集算器授權(quán)文件配置,可以是絕對路徑,也可以是相對路徑,使用相對路徑時是相對于類路徑-->     <license>esproc.xml</license>     <!--試用授權(quán)文件可從潤乾公司官網(wǎng)中下載-->  </Esproc>  </Runtime> <JDBC> <!--配置JDBC需遠程訪問的服務(wù)器地址--> <Units> <!--為方便多機熱備,可配置多臺服務(wù)器地址,添加多個<Unit/>節(jié)點--> <Unit>192.168.107.1:8281</Unit> </Units>                </JDBC> </Config>

Java 調(diào)用

接下來我們以訪問服務(wù)器上的數(shù)據(jù)文件為例,介紹如何在 Java 中遠程訪問服務(wù)器。

Java 通過 SPL 不僅可以訪問本地文件,還能遠程訪問服務(wù)器上的數(shù)據(jù)文件,其中包括 Txt、Excel、Json、Csv、Ctx 等多種類型的文件。

訪問時可以通過絕對路徑查文件位置,也可以通過相對路徑查找。這里的絕對路徑和相對路徑都是會到服務(wù)器上去找。使用相對路徑時,則是相對于服務(wù)器中 raqsoftConfig.xml 配置文件中的主目錄,所以,首先我們來配置下服務(wù)器上的主目錄:

在 raqsoftConfig.xml 文件的節(jié)點中添加以下節(jié)點:

<!--集算器主路徑,該路徑為單一的絕對路徑--> <mainPath>D:\\mainFile</mainPath>

我們把要調(diào)用的文件 employee.txt 放到服務(wù)器的主目錄下面,Java 代碼如下:

public  void runSPL() throws ClassNotFoundException, SQLException{     Connection con = null;     PreparedStatement st;     ResultSet set ;     //建立連接     Class.forName("com.esproc.jdbc.InternalDriver"); //onlyServer用于控制當前jdbc是否對服務(wù)器進行遠程計算,為true表示遠程計算;false時表示本地計算 //注意:屬性值為false,當SPL語句使用call dfx或dfx時,會先使用本地計算,如未計算成功則會進行遠程計算     con= DriverManager.getConnection("jdbc:esproc:local://?onlyServer=true");     //直接執(zhí)行SPL語句,返回結(jié)果集     st = (PreparedStatement)con.createStatement();     ResultSet rs = st.executeQuery("$select * from employee.txt");         //簡單處理結(jié)果集,將結(jié)果集中的字段名與數(shù)據(jù)輸出      ResultSetMetaData rsmd = rs.getMetaData();     int colCount = rsmd.getColumnCount();     for ( int  c = 1; c <= colCount;c++) {     String title = rsmd.getColumnName(c);     if( c > 1 ) {         System.out.print("\t");     }     else {         System.out.print("\n");     }         System.out.print(title);   }     while (rs.next()) {      for(int c = 1; c<= colCount; c++) {        if ( c > 1 ) {             System.out.print("\t");   }        else {             System.out.print("\n");   }      Object o = rs.getObject(c);      System.out.print(o.toString());   }   }    //關(guān)閉連接    if (con!=null) {         con.close();    } }

執(zhí)行結(jié)果:

1png

總結(jié)

通過上面的使用,相信您已經(jīng)了解遠程訪問服務(wù)器的部署核心了吧,沒錯!Java 程序中調(diào)用服務(wù)器上的運算與調(diào)用本地的 SPL 運算操作步驟其實大體相同,總結(jié)下主要有如下三點區(qū)別:

1,部署服務(wù)器

2,JDBC 的 raqsoftConfig.xml 中添加服務(wù)器地址

3,在 JDBC 的 url 中添加 onlyServer 屬性,屬性值為 true,始終訪問服務(wù)器進行遠程計算;屬性值為 false,進行本地計算,但當 SPL 語句為 call dfx 或 dfx 時,會先在本地計算,如未計算成功則會進行遠程計算

到此,對于遠程調(diào)用 SPL 腳本的介紹就完了,Java 中調(diào)用時更多 SPL 的用法可參見《Java 如何調(diào)用 SPL 腳本》這里就不再贅述了,當然,想要更深入的學習 SPL 的小伙伴兒還可以去官網(wǎng)上的在線教程中查看。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多