在《Java 如何調(diào)用 SPL 腳本》中我們介紹了在 Java 中可以部署集算器 JDBC 來調(diào)用本地 SPL 腳本,那如何能在 Java 中遠程調(diào)用 SPL 腳本呢?這就是接下來要說的重點!
實現(xiàn)思路通過下圖一目了然:
服務(wù)器是運行在 Java 平臺上面向分析型的高性能數(shù)據(jù)庫,作為高性能計算數(shù)據(jù)倉庫,服務(wù)器可以在離線跑批、在線查詢、多維分析和內(nèi)存計算等方面提供高效的計算輸出,幫助用戶解決計算中的多種問題。
下面我們先來了解一下服務(wù)器的使用及配置,更多關(guān)于服務(wù)器的介紹可參考集算器在線文檔《教程》服務(wù)器小節(jié)。
在集算器安裝目錄的 esProc\bin 路徑下,可以找到 esprocs.exe 文件,可以直接運行它來啟動或配置服務(wù)器。使用 esprocs 時,會自動在安裝路徑下加載所需的 jar 包,但是需要注意此時使用的配置文件 raqsoftConfig.xml 和 unitServer.xml 必須放置在集算器安裝目錄的 esProc\config 路徑下。運行后,打開窗口如下:
在 esprocs.exe 執(zhí)行時,窗口中會顯示加載初始設(shè)定的信息,這些設(shè)定實際上是由配置文件 raqsoftConfig.xml 決定的。在右側(cè)的菜單欄中點擊 Options,可以配置服務(wù)器的相關(guān)信息,點擊后彈出服務(wù)器配置窗口如下:
在頁面中,可以配置授權(quán)文件、主路徑、尋址路徑、日期時間格式、默認字符編碼、日志等級、文件緩存區(qū)字節(jié)數(shù)等信息。
下面我們繼續(xù)來了解服務(wù)器的配置,在右側(cè)的菜單欄中點擊 Config,可以配置分機的相關(guān)信息,點擊后在 Unit 頁面中可以配置分機信息,如下:
Temp file timeout 設(shè)定臨時文件的生命周期小時數(shù);Check interval 必須設(shè)定為正值或 0,為檢查過期的間隔秒數(shù);Proxy timeout 為代理生命周期,即遠程游標(biāo)、任務(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ù),當(dāng)分機中使用了多個進程時,適合作業(yè)數(shù)就是分進程的總數(shù)。在 Partitions 一欄中,可以選擇每個分機上所使用的分區(qū)。
服務(wù)器的 Enable clients 頁面中可以設(shè)定客戶端白名單,如下:
選定 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><?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>
服務(wù)器配置完成后,在分機運行窗口中,點擊 Start 即可開始運行服務(wù)器,需要停止服務(wù)可以點擊 Stop,服務(wù)器停止后可以點擊 Quit 退出。如果點擊 Reset,服務(wù)將初始化重新啟動,清除所有的全局變量以及內(nèi)存區(qū)。
在分機啟動時,設(shè)置的各個進程會同時啟動,可以點擊 Main 查看分機主進程的執(zhí)行情況,或者點擊對應(yīng)的端口號查看分機的其它分進程執(zhí)行頁面。
在 Linux 系統(tǒng)中,可以運行 ServerConsole.sh 來啟動服務(wù)器類:
打開的分機運行窗口和在 Windows 下是相同的:
此外,還可以在執(zhí)行命令時添加 -p 參數(shù),非圖形啟動服務(wù)器,此時服務(wù)器將直接執(zhí)行:
將啟動 JAVA 應(yīng)用程序時加載集算器所需的 jar 包及配置文件放到項目中。需要注意的是,集算器 JDBC 所要求的 JDK 版本不得低于 1.6。
集算器 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??//解析配置文件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。
集算器還有個重要的配置文件 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></Unit>節(jié)點-->?? <Unit>192.168.107.1:8281</Unit>?? </Units>???????????????? ?</JDBC>?? </Config><?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>
接下來我們以訪問服務(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><!--集算器主路徑,該路徑為單一的絕對路徑--> ?<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用于控制當(dāng)前jdbc是否對服務(wù)器進行遠程計算,為true表示遠程計算;false時表示本地計算?? //注意:屬性值為false,當(dāng)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();?? ???}?? }public??void?runSPL()?throws?ClassNotFoundException,?SQLException{?? ????Connection?con?=?null;?? ????PreparedStatement?st;?? ????ResultSet?set?;?? ????//建立連接??????Class.forName("com.esproc.jdbc.InternalDriver");?? //onlyServer用于控制當(dāng)前jdbc是否對服務(wù)器進行遠程計算,為true表示遠程計算;false時表示本地計算??//注意:屬性值為false,當(dāng)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é)果:
通過上面的使用,相信您已經(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,進行本地計算,但當(dāng) SPL 語句為 call dfx 或 dfx 時,會先在本地計算,如未計算成功則會進行遠程計算
到此,對于遠程調(diào)用 SPL 腳本的介紹就完了,Java 中調(diào)用時更多 SPL 的用法可參見《Java 如何調(diào)用 SPL 腳本》這里就不再贅述了,當(dāng)然,想要更深入的學(xué)習(xí) SPL 的小伙伴兒還可以去官網(wǎng)上的在線教程中查看。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
當(dāng)前名稱:Java如何遠程調(diào)用SPL腳本-創(chuàng)新互聯(lián)
鏈接地址:http://chinadenli.net/article22/depejc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、云服務(wù)器、企業(yè)網(wǎng)站制作、網(wǎng)站營銷、建站公司、網(wǎng)站設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)