第一篇:Hadoop的頂級(jí)匯報(bào)、分析、可視化、集成和開(kāi)發(fā)工具
馴服大數(shù)據(jù)的七種武器
隨著泰國(guó)洪水抬高的硬盤(pán)價(jià)格逐漸回落到正常水平,數(shù)據(jù)存儲(chǔ)容量的增長(zhǎng)速度有望重新開(kāi)始飆升。這將讓風(fēng)頭蓋過(guò)商業(yè)智能的“大數(shù)據(jù)”應(yīng)用更加火爆,上至白宮下至沃爾瑪都在使用Hadoop、NoSQL數(shù)據(jù)庫(kù)和廉價(jià)通用服務(wù)器的組合進(jìn)行低成本的大數(shù)據(jù)分析,不過(guò)雖然大數(shù)據(jù)分析的軟硬件成本在降低,但是為數(shù)十臺(tái)大數(shù)據(jù)服務(wù)器編寫(xiě)應(yīng)用依然比傳統(tǒng)SQL數(shù)據(jù)庫(kù)來(lái)得復(fù)雜。而且Hadoop任務(wù)是用Java編寫(xiě)的,這進(jìn)一步增加了復(fù)雜性。目前已經(jīng)有很多大數(shù)據(jù)工具能夠幫助人們駕馭大數(shù)據(jù)的分布式計(jì)算馬力,這些工具大多也能與NoSQL數(shù)據(jù)庫(kù)一起工作,這與傳統(tǒng)數(shù)據(jù)庫(kù)相比,NoSQL數(shù)據(jù)庫(kù)要靈活得多。
面對(duì)大數(shù)據(jù),最大的挑戰(zhàn)也許來(lái)自對(duì)數(shù)據(jù)的理解和提出正確的分析命題/問(wèn)題,這遠(yuǎn)比讓你的Hadoop任務(wù)運(yùn)行得更快有意義。所以以下列舉的這些工具也只是大數(shù)據(jù)的”器“,而非”道“。
一、Jaspersoft BI Suite
Jaspersoft是從列數(shù)據(jù)庫(kù)生成PDF報(bào)告的最好的開(kāi)源軟件。JasperReport正跳上大數(shù)據(jù)的班車(chē),在大數(shù)據(jù)和其報(bào)告生成軟件之間增加了一個(gè)軟件層。JasperReports服務(wù)器目前提供軟件用于從許多主流存儲(chǔ)平臺(tái)讀取數(shù)據(jù),包括MongoDB,Cassandra、Redis、Riak、CouchDB和Neo4j。Hadoop自然也不會(huì)缺席,JasperReports向HBase提供了一個(gè)Hive Connector。但是Jaspersoft的大數(shù)據(jù)整合工作開(kāi)始不久,還沒(méi)有實(shí)現(xiàn)完全的集成,例如可視化查詢(xún)?cè)O(shè)計(jì)工具還不能跟Cassandra的CQL對(duì)接,你需要手動(dòng)輸入。
二、Pentaho Business Analytics
Pentaho也是以報(bào)告生成引擎起步的軟件平臺(tái),與Jaspersoft的策略類(lèi)似,也是通過(guò)增加新的數(shù)據(jù)源來(lái)進(jìn)入大數(shù)據(jù)市場(chǎng)。你可以講Pentaho的工具與大多數(shù)流行的NoSQL數(shù)據(jù)庫(kù)如MongoDB和Cassandra掛接起來(lái)。當(dāng)連接上數(shù)據(jù)庫(kù)后,你就能拖放數(shù)據(jù)庫(kù)列到窗口和報(bào)告界面,就像是用來(lái)自SQL數(shù)據(jù)庫(kù)的信息一樣。Pentaho還提供軟件用于從Hadoop集群中抽取HDFS文件數(shù)據(jù)和HBase數(shù)據(jù)。其中最新吸引人的工具要數(shù)圖形編程界面Kettle,也稱(chēng)Pentaho Data Integration。
三、Karmasphere Studio and Analyst
并非所有大數(shù)據(jù)工具都從報(bào)告工具開(kāi)始。Karmasphere Studio就是基于Eclipse開(kāi)發(fā)的一組插件。它是一個(gè)專(zhuān)業(yè)化的IDE集成開(kāi)發(fā)環(huán)境,可以讓Hadoop任務(wù)的創(chuàng)建和運(yùn)行更加容易。
四、Talend Open Studio
Talend也提供了一個(gè)基于Eclipse的IDE,用于串聯(lián)Hadoop的數(shù)據(jù)處理任務(wù)。Talend的工具可用于數(shù)據(jù)集成、數(shù)據(jù)質(zhì)量和數(shù)據(jù)管理工作,同時(shí)為這些工作準(zhǔn)備了相應(yīng)的子程序。Talend Studio允許你通過(guò)向模板拖拽建立任務(wù),例如獲取RSS的feeds。Talend的TalendForge是一些列的開(kāi)源擴(kuò)展,可以與該公司的其他軟件搭配工作。大多數(shù)工具看上去都是庫(kù)過(guò)濾器,用于將Talend的軟件與其他主流廠商如Salesforce.com和SugarCRM的產(chǎn)品進(jìn)行連接。你可以從這些系統(tǒng)讀取數(shù)據(jù)到到你自己的項(xiàng)目中,這簡(jiǎn)化了集成工作。
五、Skytree Server
并非所有的工具都被設(shè)計(jì)用來(lái)簡(jiǎn)化代碼與虛擬機(jī)制的串聯(lián)。Skytree提供了一個(gè)功能群組,提供了更加復(fù)雜的機(jī)器學(xué)習(xí)(Machine-learning)算法。你只需要將正確的命令輸入正確的命令行。
六、Tableau 桌面和服務(wù)器版
Tableau桌面版是一個(gè)可視化工具,能讓你更直觀地審視數(shù)據(jù),你還能抽離數(shù)據(jù)從不同角度觀察,你還能降其他數(shù)據(jù)混合進(jìn)來(lái)獲得新的結(jié)果。Tableau在幾個(gè)版本前就開(kāi)始擁抱Hadoop,現(xiàn)在你能想處理其他數(shù)據(jù)一樣處理Hadoop的數(shù)據(jù)。Tableau通過(guò)Hive來(lái)結(jié)構(gòu)化查詢(xún),然后將盡可能多的數(shù)據(jù)緩存在內(nèi)存里以實(shí)現(xiàn)交互。其他的報(bào)告工具都是離線生成報(bào)告,而Tableau洗完功能提供一種交互機(jī)制,這樣你就能不斷分割數(shù)據(jù)。緩存能夠部分解決Hadoop集群的延遲問(wèn)題。
七、Splunk
Splunk與上述工具有所不同,它并不是一個(gè)純粹的報(bào)告生成工具或AI路徑的集合,雖然它在很大程度上也能實(shí)現(xiàn)這些功能。Splunk為你的海量數(shù)據(jù)創(chuàng)建一個(gè)索引,將其整理成可以搜索的鏈接,其方式就好像這些數(shù)據(jù)是一本書(shū)或者文本塊。雖然數(shù)據(jù)庫(kù)也內(nèi)建有指標(biāo),但是Splunk的索引方式更像是文本搜索處理。
Splunk的索引功能非常靈活,可以兼容很多數(shù)據(jù)源,包括日志、配置文件、消息等,基本上所有應(yīng)用產(chǎn)生的文本數(shù)據(jù)它都能”吃“下去。Splunk還有很多解決方案套裝出售,其中包括監(jiān)控微軟Exchange服務(wù)器以及政策web攻擊。
Splunk圍繞索引抽取文本串和搜索、提供報(bào)警和報(bào)告功能。你可以敲入重要文章的URL或者IP地址。Splunk會(huì)根據(jù)數(shù)據(jù)中的時(shí)間戳將結(jié)果以時(shí)間軸的方式展示出來(lái)。這只是一個(gè)簡(jiǎn)單的應(yīng)用,但如果你在數(shù)據(jù)Feed中找到的正確的指針,Splunk將非常強(qiáng)大。Splunk非常適合處理日志文件。
Splunk的一個(gè)新工具Shep,目前正在Beta內(nèi)測(cè),提供Hadoop和Splunk之間的雙向集成,可以在兩個(gè)系統(tǒng)間交換數(shù)據(jù),你還可以從Hadoop中查詢(xún)Splunk的數(shù)據(jù)。
第二篇:Java開(kāi)源集成開(kāi)發(fā)工具
Java開(kāi)發(fā)工具點(diǎn)評(píng)
Java開(kāi)發(fā)工具點(diǎn)評(píng)
在計(jì)算機(jī)開(kāi)發(fā)語(yǔ)言的歷史中,從來(lái)沒(méi)有哪種語(yǔ)言象Java那樣受到如此眾多廠商的支持,有如此多的開(kāi)發(fā)工具,Java菜鳥(niǎo)們?nèi)绯跞氪笥^園的劉姥姥,看花了眼,不知該何種選擇。的確,這些工具各有所長(zhǎng),都沒(méi)有絕對(duì)完美的,就算是老鳥(niǎo)也很難做出選擇。在本文中我簡(jiǎn)要介紹了常見(jiàn)的十五種Java開(kāi)發(fā)工具的特點(diǎn),管中窺“器”,希望能對(duì)大家有所幫助。
一、JDK(Java Development Kit)
SUN的Java不僅提了一個(gè)豐富的語(yǔ)言和運(yùn)行環(huán)境,而且還提了一個(gè)免費(fèi)的Java開(kāi)發(fā)工具集(JDK)。開(kāi)發(fā)人員和最終用戶(hù)可以利用這個(gè)工具來(lái)開(kāi)發(fā)java程序。
JDK簡(jiǎn)單易學(xué),可以通過(guò)任何文本編輯器(如:Windows 記事本、UltrEdit、Editplus、FrontPage以及dreamweaver等)編寫(xiě)Java源文件,然后在DOS狀況下利通過(guò)javac命令將Java源程序編譯成字節(jié)碼,通過(guò)Java命令來(lái)執(zhí)行編譯后的Java文件,這能帶給DOS時(shí)代程序員美好的回憶。Java 初學(xué)者一般都采用這種開(kāi)發(fā)工具。
從初學(xué)者角度來(lái)看,采用JDK開(kāi)發(fā)Java程序能夠很快理解程序中各部分代碼之間的關(guān)系,有利于理解Java面向?qū)ο蟮脑O(shè)計(jì)思想。JDK的另一個(gè)顯著特點(diǎn)是隨著Java(J2EE、J2SE以及J2ME)版本的升級(jí)而升級(jí)。但它的缺點(diǎn)也是非常明顯的就是從事大規(guī)模企業(yè)級(jí)Java應(yīng)用開(kāi)發(fā)非常困難,不能進(jìn)行復(fù)雜的Java軟件開(kāi)發(fā),也不利于團(tuán)體協(xié)同開(kāi)發(fā)。
二、Java Workshop
Sun MicroSystems公司于1996年3月26日推出了Java WorkShop 1.0,這是業(yè)界出現(xiàn)的第一個(gè)供Internet網(wǎng)使用的多平臺(tái)開(kāi)發(fā)工具,它可以滿(mǎn)足各公司開(kāi)發(fā)Internet和Intranet網(wǎng)應(yīng)用軟件的需要。Java WorkShop完全用Java語(yǔ)言編寫(xiě),是當(dāng)今市場(chǎng)上銷(xiāo)售的第一個(gè)完全的Java開(kāi)發(fā)環(huán)境,目前Java WorkShop的最性版本是3.0。Java Workshop的特點(diǎn)表現(xiàn)如下:
1、結(jié)構(gòu)易于創(chuàng)建:在創(chuàng)建平臺(tái)中立的網(wǎng)格結(jié)構(gòu)方面,Java Workshop比其他任何一種Java開(kāi)發(fā)工具都要方便。
2、可視化編程:Java Workshop的可視化編程特性是很基本的。Java Workshop允許程序員重新安排這些操作,甚至可以確定觸發(fā)操作行為的過(guò)濾器。1
Java Workshop產(chǎn)生的模板帶有許多注釋?zhuān)@對(duì)程序員是很有幫助的。
此外,Java WorkShop支持JDK1.1.3以及JavaBeans組件模型,API和語(yǔ)言特征增加了編譯Java應(yīng)用程序的靈活性。Java WorkShop開(kāi)發(fā)環(huán)境由于完全用Java寫(xiě)成,所以可移植性極好,以致于多個(gè)平臺(tái)都能支持,目前Java WorkShop支持Solaris操作環(huán)境SPARC及Intel 版)、Windows95、WindowsNT、以及HP/Ux等平臺(tái)。適合于初學(xué)者進(jìn)行一些簡(jiǎn)單的Java編程。Java WorkShop的缺點(diǎn)是Java Workshop中的每一個(gè)可視化對(duì)象都遲早會(huì)用到網(wǎng)格布局,這種設(shè)計(jì)方法是許多人不習(xí)慣的;Java Workdshop的調(diào)色板是較差的,僅僅能滿(mǎn)足絕大部分應(yīng)用的基本要求。
三、NetBeans 與Sun Java Studio 5
NetBeans是開(kāi)放源碼的Java集成開(kāi)發(fā)環(huán)境(IDE),適用于各種客戶(hù)機(jī)和Web應(yīng)用。Sun Java Studio是Sun公司最新發(fā)布的商用全功能Java IDE,支持Solaris、Linux和Windows平臺(tái),適于創(chuàng)建和部署2層Java Web應(yīng)用和n層J2EE應(yīng)用的企業(yè)開(kāi)發(fā)人員使用。
NetBeans是業(yè)界第一款支持創(chuàng)新型Java開(kāi)發(fā)的開(kāi)放源碼IDE。開(kāi)發(fā)人員可以利用業(yè)界強(qiáng)大的開(kāi)發(fā)工具來(lái)構(gòu)建桌面、Web或移動(dòng)應(yīng)用。同時(shí),通過(guò)NetBeans和開(kāi)放的API的模塊化結(jié)構(gòu),第三方能夠非常輕松地?cái)U(kuò)展或集成NetBeans平臺(tái)。
NetBeans3.5.1主要針對(duì)一般Java軟件的開(kāi)發(fā)者,而Java One Studio5則主要針對(duì)企業(yè)做網(wǎng)絡(luò)服務(wù)等應(yīng)用的開(kāi)發(fā)者。Sun不久還將推出Project Rave,其目標(biāo)是幫助企業(yè)的開(kāi)發(fā)者進(jìn)行軟件開(kāi)發(fā)。NetBeans 3.5.1版本與其他開(kāi)發(fā)工具相比,最大區(qū)別在于不僅能夠開(kāi)發(fā)各種臺(tái)式機(jī)上的應(yīng)用,而且可以用來(lái)開(kāi)發(fā)網(wǎng)絡(luò)服務(wù)方面的應(yīng)用,可以開(kāi)發(fā)基于J2ME的移動(dòng)設(shè)備上的應(yīng)用等。在NetBeans 3.5.1基礎(chǔ)上,Sun開(kāi)發(fā)出了Java One Studio5,為用戶(hù)提供了一個(gè)更加先進(jìn)的企業(yè)編程環(huán)境。在新的Java One Studio5里有一個(gè)應(yīng)用框架,開(kāi)發(fā)者可以利用這些模塊快速開(kāi)發(fā)自己在網(wǎng)絡(luò)服務(wù)方面的各種應(yīng)用程序。
NetBeans是開(kāi)放源碼的Java集成開(kāi)發(fā)環(huán)境(IDE),適用于各種客戶(hù)機(jī)和Web應(yīng)用。Sun Java Studio是Sun公司最新發(fā)布的商用全功能Java IDE,支持Solaris、Linux和Windows平臺(tái),適于創(chuàng)建和部署2層Java Web應(yīng)用和n層J2EE應(yīng)用的企業(yè)開(kāi)發(fā)人員使用。
NetBeans是業(yè)界第一款支持創(chuàng)新型Java開(kāi)發(fā)的開(kāi)放源碼IDE。開(kāi)發(fā)人員可以利用業(yè)界強(qiáng)大的開(kāi)發(fā)工具來(lái)構(gòu)建桌面、Web或移動(dòng)應(yīng)用。同時(shí),通過(guò)NetBeans和開(kāi)放的API的模塊化結(jié)構(gòu),第三方能夠非常輕松地?cái)U(kuò)展或集成NetBeans平臺(tái)。
NetBeans3.5.1主要針對(duì)一般Java軟件的開(kāi)發(fā)者,而Java One Studio5則
主要針對(duì)企業(yè)做網(wǎng)絡(luò)服務(wù)等應(yīng)用的開(kāi)發(fā)者。Sun不久還將推出Project Rave,其目標(biāo)是幫助企業(yè)的開(kāi)發(fā)者進(jìn)行軟件開(kāi)發(fā)。NetBeans 3.5.1版本與其他開(kāi)發(fā)工具相比,最大區(qū)別在于不僅能夠開(kāi)發(fā)各種臺(tái)式機(jī)上的應(yīng)用,而且可以用來(lái)開(kāi)發(fā)網(wǎng)絡(luò)服務(wù)方面的應(yīng)用,可以開(kāi)發(fā)基于J2ME的移動(dòng)設(shè)備上的應(yīng)用等。在NetBeans 3.5.1基礎(chǔ)上,Sun開(kāi)發(fā)出了Java One Studio5,為用戶(hù)提供了一個(gè)更加先進(jìn)的企業(yè)編程環(huán)境。在新的Java One Studio5里有一個(gè)應(yīng)用框架,開(kāi)發(fā)者可以利用這些模塊快速開(kāi)發(fā)自己在網(wǎng)絡(luò)服務(wù)方面的各種應(yīng)用程序。
四、Borland 的JBuilder
Jbuilder進(jìn)入了Java集成開(kāi)發(fā)環(huán)境的王國(guó),它滿(mǎn)足很多方面的應(yīng)用,尤其是對(duì)于服務(wù)器方以及EJB開(kāi)發(fā)者們來(lái)說(shuō)。下面簡(jiǎn)單介紹一下Jbuilder的特點(diǎn):
1、Jbuilder支持最新的Java技術(shù),包括Applets、JSP/Servlets、JavaBean以及EJB(Enterprise JavaBeans)的應(yīng)用。
2、用戶(hù)可以自動(dòng)地生成基于后端數(shù)據(jù)庫(kù)表的EJB Java類(lèi),Jbuilder同時(shí)還簡(jiǎn)化了EJB的自動(dòng)部署功能.此外它還支持CORBA,相應(yīng)的向?qū)С绦蛴兄谟脩?hù)全面地管理IDL(分布應(yīng)用程序所必需的接口定義語(yǔ)言Interface Definition Language)和控制遠(yuǎn)程對(duì)象。
3、Jbuilder支持各種應(yīng)用服務(wù)器。Jbuilder與Inprise Application Server緊密集成,同時(shí)支持WebLogic Server,支持EJB 1.1和EJB 2.0,可以快速開(kāi)發(fā)J2EE的電子商務(wù)應(yīng)用。
4、Jbuilder能用Servlet和JSP開(kāi)發(fā)和調(diào)試動(dòng)態(tài)Web 應(yīng)用。
5、利用Jbuilder可創(chuàng)建(沒(méi)有專(zhuān)有代碼和標(biāo)記)純Java2應(yīng)用。由于Jbuilder是用純Java語(yǔ)言編寫(xiě)的,其代碼不含任何專(zhuān)屬代碼和標(biāo)記,它支持最新的Java標(biāo)準(zhǔn)。
6、Jbuilder擁有專(zhuān)業(yè)化的圖形調(diào)試介面,支持遠(yuǎn)程調(diào)試和多線程調(diào)試,調(diào)試器支持各種JDK版本,包括J2ME/J2SE/J2EE。
JBuilder環(huán)境開(kāi)發(fā)程序方便,它是純的Java 開(kāi)發(fā)環(huán)境,適合企業(yè)的J2EE開(kāi)發(fā);缺點(diǎn)是往往一開(kāi)始人們難于把握整個(gè)程序各部分之間的關(guān)系,對(duì)機(jī)器的硬件要求較高,比較吃?xún)?nèi)存,這時(shí)運(yùn)行速度顯得較慢。
五、Oracle 的JDeveloper
Oracle9i JDeveloper(定為9.0版,最新為10g)為構(gòu)建具有J2EE功能,XML和Web services的復(fù)雜的,多層的Java應(yīng)用程序提供了一個(gè)完全集成的開(kāi)發(fā)環(huán)境。它為運(yùn)用Oracle9i數(shù)據(jù)庫(kù)和應(yīng)用服務(wù)器的開(kāi)發(fā)人員提供特殊的功能和
增強(qiáng)性能,除此以外,它也有資格成為用于多種用途Java開(kāi)發(fā)的一個(gè)強(qiáng)大的工具。
六、Oracle9i JDeveloper的主要特點(diǎn)如下:
1、具有UML(Unified Modeling Language,一體化建模語(yǔ)言)建模功能??梢詫I(yè)務(wù)對(duì)象及e-business應(yīng)用模型化。
2、配備有高速Java調(diào)試器(Debuger)、內(nèi)置Profiling工具、提高代碼質(zhì)量的工具“CodeCoach”等。
3、支持SOAP(Simple Object Access Protocol)“簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議”、UDDI(Universal Description, Discovery and Integration)“統(tǒng)一描述、發(fā)現(xiàn)和集成協(xié)議”、WSDL(Web Services Description Language)“WEB服務(wù)描述語(yǔ)言”等Web服務(wù)標(biāo)準(zhǔn)。JDeveloper 不僅僅是很好的 Java 編程工具,而且是 Oracle Web 服務(wù)的延伸,支持 Apache SOAP,以及 9iAS,可擴(kuò)充的環(huán)境和 XML 和 WSDL 語(yǔ)言緊密相關(guān)。Oracle9i Jdeveloper完全利用Java編寫(xiě),能夠與以前的Oracle服務(wù)器軟件以及其他廠商支持J2EE的應(yīng)用服務(wù)器產(chǎn)品相兼容,而且在設(shè)計(jì)時(shí)著重針對(duì)Oracle9i,能夠無(wú)縫化跨平臺(tái)之間的應(yīng)用開(kāi)發(fā),提供了業(yè)界第一個(gè)完整的、集成了J2EE和XML的開(kāi)發(fā)環(huán)境,允許開(kāi)發(fā)者快速開(kāi)發(fā)可以通過(guò)Web、無(wú)線設(shè)備及語(yǔ)音界面訪問(wèn)的Web服務(wù)和交易應(yīng)用,以往只能通過(guò)將傳統(tǒng)Java編程技巧與最新模塊化方式結(jié)合到一個(gè)單一集成的開(kāi)發(fā)環(huán)境中之后才能完成J2EE應(yīng)用開(kāi)發(fā)生命周期管理的事實(shí),從根本上得到改變。缺點(diǎn)就是對(duì)于初學(xué)者來(lái)說(shuō),較復(fù)雜,也比較難。
第三篇:Hadoop之JobTrack分析
Hadoop之JobTrack分析
1.client端指定Job的各種參數(shù)配置之后調(diào)用job.waitForCompletion(true)方法提交Job給JobTracker,等待Job 完成。
[java] view plaincopyprint?
1.public void submit()throws IOException, InterruptedException, 2.ClassNotFoundException { 3.ensureState(JobState.DEFINE);//檢查JobState狀態(tài)
4.setUseNewAPI();//檢查及設(shè)置是否使用新的MapReduce API
5.6.// Connect to the JobTracker and submit the job
7.connect();//鏈接JobTracker
8.info = jobClient.submitJobInternal(conf);//將job信息提交
9.super.setJobID(info.getID());
10.state = JobState.RUNNING;//更改job狀態(tài)
11.}
以上代碼主要有兩步驟,連接JobTracker并提交Job信息。connect方法主要是實(shí)例化JobClient對(duì)象,包括設(shè)置JobConf和init工作:
[java] view plaincopyprint?
1.public void init(JobConf conf)throws IOException {
2.String tracker = conf.get(“mapred.job.tracker”, “l(fā)ocal”);//讀取配置文件信息用于判斷該Job是運(yùn)行于本地單機(jī)模式還是分布式模式
3.tasklogtimeout = conf.getInt(4.TASKLOG_PULL_TIMEOUT_KEY, DEFAULT_TASKLOG_TIMEOUT);5.this.ugi = UserGroupInformation.getCurrentUser();
6.if(“l(fā)ocal”.equals(tracker)){//如果是單機(jī)模式,new LocalJobRunner
7.conf.setNumMapTasks(1);
8.this.jobSubmitClient = new LocalJobRunner(conf);9.} else {
10.this.jobSubmitClient = createRPCProxy(JobTracker.getAddress(conf), conf);
11.} 12.}
分布式模式下就會(huì)創(chuàng)建一個(gè)RPC代理鏈接:
[java] view plaincopyprint?
1.public static VersionedProtocol getProxy(2.Class extends VersionedProtocol> protocol,3.long clientVersion, InetSocketAddress addr, UserGroupInformation ticket,4.Configuration conf, SocketFactory factory, int rpcTimeout)throws IOException { 5.6.if(UserGroupInformation.isSecurityEnabled()){ 7.SaslRpcServer.init(conf);8.}
9.VersionedProtocol proxy =
10.(VersionedProtocol)Proxy.newProxyInstance(11.protocol.getClassLoader(), new Class[] { protocol },12.new Invoker(protocol, addr, ticket, conf, factory, rpcTimeout));
13.long serverVersion = proxy.getProtocolVersion(protocol.getName(), 14.clientVersion);15.if(serverVersion == clientVersion){ 16.return proxy;17.} else {
18.throw new VersionMismatch(protocol.getName(), clientVersion, 19.serverVersion);20.} 21.}
從上述代碼可以看出hadoop實(shí)際上使用了Java自帶的Proxy API來(lái)實(shí)現(xiàn)Remote Procedure Call 初始完之后,需要提交job [java] view plaincopyprint?
1.info = jobClient.submitJobInternal(conf);//將job信息提交
submit方法做以下幾件事情:
1.將conf中目錄名字替換成hdfs代理的名字
2.檢查output是否合法:比如路徑是否已經(jīng)存在,是否是明確的3.將數(shù)據(jù)分成多個(gè)split并放到hdfs上面,寫(xiě)入job.xml文件
4.調(diào)用JobTracker的submitJob方法
該方法主要新建JobInProgress對(duì)象,然后檢查訪問(wèn)權(quán)限和系統(tǒng)參數(shù)是否滿(mǎn)足job,最后addJob:
[java] view plaincopyprint?
1.private synchronized JobStatus addJob(JobID jobId, JobInProgress job)2.throws IOException { 3.totalSubmissions++;4.5.synchronized(jobs){
6.synchronized(taskScheduler){
7.jobs.put(job.getProfile().getJobID(), job);
8.for(JobInProgressListener listener : jobInProgressListeners){ 9.listener.jobAdded(job);10.} 11.} 12.}
13.myInstrumentation.submitJob(job.getJobConf(), jobId);14.job.getQueueMetrics().submitJob(job.getJobConf(), jobId);15.16.LOG.info(“Job ” + jobId + “ added successfully for user '”
17.+ job.getJobConf().getUser()+ “' to queue '”
18.+ job.getJobConf().getQueueName()+ “'”);19.AuditLogger.logSuccess(job.getUser(),20.Operation.SUBMIT_JOB.name(), jobId.toString());21.return job.getStatus();22.}
totalSubmissions記錄client端提交job到JobTracker的次數(shù)。而jobs則是JobTracker所有可以管理的job的映射表
Map
hadoop job調(diào)度機(jī)制; public enum SchedulingMode { FAIR, FIFO } 1.公平調(diào)度FairScheduler 對(duì)于每個(gè)用戶(hù)而言,分布式資源是公平分配的,每個(gè)用戶(hù)都有一個(gè)job池,假若某個(gè)用戶(hù)目前所占有的資源很多,對(duì)于其他用戶(hù)而言是不公平的,那么調(diào)度器就會(huì)殺掉占有資源多的用戶(hù)的一些task,釋放資源供他人使用 2.容量調(diào)度JobQueueTaskScheduler 在分布式系統(tǒng)上維護(hù)多個(gè)隊(duì)列,每個(gè)隊(duì)列都有一定的容量,每個(gè)隊(duì)列中的job按照FIFO的策略進(jìn)行調(diào)度。隊(duì)列中可以包含隊(duì)列。
兩個(gè)Scheduler都要實(shí)現(xiàn)TaskScheduler的public synchronized List
接下來(lái)看看JobTracker的工作: 記錄更新JobTracker重試的次數(shù):
[java] view plaincopyprint?
1.while(true){ 2.try {
3.recoveryManager.updateRestartCount();4.break;
5.} catch(IOException ioe){
6.LOG.warn(“Failed to initialize recovery manager.”, ioe);7.// wait for some time
8.Thread.sleep(FS_ACCESS_RETRY_PERIOD);9.LOG.warn(“Retrying...”);10.} 11.}
啟動(dòng)Job調(diào)度器,默認(rèn)是FairScheduler: taskScheduler.start();主要是初始化一些管理對(duì)象,比如job pool管理池
[java] view plaincopyprint?
1.// Initialize other pieces of the scheduler
2.jobInitializer = new JobInitializer(conf, taskTrackerManager);3.taskTrackerManager.addJobInProgressListener(jobListener);4.poolMgr = new PoolManager(this);5.poolMgr.initialize();
6.loadMgr =(LoadManager)ReflectionUtils.newInstance(7.conf.getClass(“mapred.fairscheduler.loadmanager”, 8.CapBasedLoadManager.class, LoadManager.class), conf);9.loadMgr.setTaskTrackerManager(taskTrackerManager);10.loadMgr.setEventLog(eventLog);11.loadMgr.start();
12.taskSelector =(TaskSelector)ReflectionUtils.newInstance(13.conf.getClass(“mapred.fairscheduler.taskselector”, 14.DefaultTaskSelector.class, TaskSelector.class), conf);15.taskSelector.setTaskTrackerManager(taskTrackerManager);16.taskSelector.start();
[java] view plaincopyprint?
1.JobInitializer有一個(gè)確定大小的ExecutorService threadPool,每個(gè)thread用于初始化job
[java] view plaincopyprint?
1.try {
2.JobStatus prevStatus =(JobStatus)job.getStatus().clone();3.LOG.info(“Initializing ” + job.getJobID());4.job.initTasks();
5.// Inform the listeners if the job state has changed 6.// Note : that the job will be in PREP state.7.JobStatus newStatus =(JobStatus)job.getStatus().clone();8.if(prevStatus.getRunState()!= newStatus.getRunState()){ 9.JobStatusChangeEvent event =
10.new JobStatusChangeEvent(job, EventType.RUN_STATE_CHANGED, prevStatus,11.newStatus);
12.synchronized(JobTracker.this){ 13.updateJobInProgressListeners(event);14.} 15.} 16.}
初始化操作主要用于初始化生成tasks然后通知其他的監(jiān)聽(tīng)者執(zhí)行其他操作。initTasks主要處理以下工作:
[java] view plaincopyprint?
1.// 記錄用戶(hù)提交的運(yùn)行的job信息
2.try {
3.userUGI.doAs(new PrivilegedExceptionAction
5.public Object run()throws Exception {
6.JobHistory.JobInfo.logSubmitted(getJobID(), conf, jobFile, 7.startTimeFinal, hasRestarted());8.return null;9.} 10.});
11.} catch(InterruptedException ie){ 12.throw new IOException(ie);13.} 14.15.// 設(shè)置并記錄job的優(yōu)先級(jí)
16.setPriority(this.priority);17.18.//
19.//生成每個(gè)Task需要的密鑰
20.//
21.generateAndStoreTokens();22.然后讀取JobTracker split的數(shù)據(jù)的元信息,元信息包括以下屬性信息:
[java] view plaincopyprint?
1.private TaskSplitIndex splitIndex;//洗牌后的索引位置
2.private long inputDataLength;//洗牌后數(shù)據(jù)長(zhǎng)度 3.private String[] locations;//數(shù)據(jù)存儲(chǔ)位置
然后根據(jù)元信息的長(zhǎng)度來(lái)計(jì)算numMapTasks并校驗(yàn)數(shù)據(jù)存儲(chǔ)地址是否可以連接 接下來(lái)生成map tasks和reducer tasks:
[java] view plaincopyprint?
1.maps = new TaskInProgress[numMapTasks];2.for(int i=0;i < numMapTasks;++i){
3.inputLength += splits[i].getInputDataLength();4.maps[i] = new TaskInProgress(jobId, jobFile, 5.splits[i],6.jobtracker, conf, this, i, numSlotsPerMap);
7.}
[java] view plaincopyprint?
1.this.jobFile = jobFile;2.this.splitInfo = split;3.this.jobtracker = jobtracker;4.this.job = job;5.this.conf = conf;
6.this.partition = partition;
7.this.maxSkipRecords = SkipBadRecords.getMapperMaxSkipRecords(conf);8.this.numSlotsRequired = numSlotsRequired;9.setMaxTaskAttempts();10.init(jobid);
以上除了task對(duì)應(yīng)的jobTracker,split信息和job信息外,還設(shè)置了
[java] view plaincopyprint?
1.maxSkipRecords---記錄task執(zhí)行的時(shí)候最大可以跳過(guò)的錯(cuò)誤記錄數(shù);
2.
setMaxTaskAttempts--設(shè)置task最多可以執(zhí)行的次數(shù)。當(dāng)一個(gè)task執(zhí)行兩次都失敗了之后,會(huì)以skip mode模式再重新執(zhí)行一次,記錄那些bad record,3.然后第四次再執(zhí)行的時(shí)候,跳過(guò)這些bad records 4.
5.新建reducer task的過(guò)程也很類(lèi)似。
6.7.
8.
10.
12.
14.
第四篇:可視化工具交流分析
1、除了Freemind,你還用過(guò)哪些軟件來(lái)做類(lèi)似的工作?談?wù)勀銓?duì)這些軟件的評(píng)價(jià)。答:我是第一次接觸并使用思維導(dǎo)圖工具制作教學(xué)目標(biāo),操作簡(jiǎn)單,容易掌握,還起到了集中注意力和擴(kuò)散思維的作用。
思維導(dǎo)圖軟件制作出來(lái)的教學(xué)目標(biāo)界面簡(jiǎn)潔,節(jié)約資源;思維導(dǎo)圖工具制作出的教學(xué)目標(biāo)更加具有層次性和立體感,它將教學(xué)目標(biāo)呈樹(shù)狀清晰明確的表現(xiàn)出來(lái),便于對(duì)信息的組織和管理,同時(shí)也可以更加清晰地了解到自己的教學(xué)目標(biāo)之間的內(nèi)在聯(lián)系,有助于思考教學(xué)處理方式和教學(xué)過(guò)程。
除了Freemind,我還用過(guò)Microsoft PowerPoint、word做過(guò)類(lèi)似的工作。PPT、WORD軟件也可以達(dá)到思維導(dǎo)圖的效果,但是在畫(huà)層次結(jié)構(gòu)圖上,它們的作用不如思維導(dǎo)圖,可是在文字處理上,它們卻有優(yōu)勢(shì),可以彌補(bǔ)思維導(dǎo)圖的不足。
此外,ppt做框架效率高,速度快,文字圖片的演示功能也很強(qiáng)大:具體的說(shuō):首先、PowerPoint簡(jiǎn)單易學(xué),容易操作,只要稍加學(xué)習(xí),就能掌握。只要一般教師充分能利用自身教學(xué)經(jīng)驗(yàn)和豐富的教學(xué)素材資源就能開(kāi)發(fā)出許多優(yōu)秀的教學(xué)課件。其次、利用
PowerPoint能開(kāi)發(fā)出兼具文字、圖像、聲音、動(dòng)畫(huà)等特點(diǎn)的多媒體演示型課件。第三,可以滿(mǎn)足一般的課堂教學(xué)需求。
其實(shí),我們?cè)谧銮捌诜治鼋虒W(xué)目標(biāo)的目的是為了讓學(xué)生明確本節(jié)課的任務(wù),所以無(wú)論使用哪種軟件,只要能讓生達(dá)到教學(xué)目標(biāo)就可以了,畢竟任何輔助教學(xué)軟件知識(shí)輔助而已。因此,在工作中,應(yīng)該做到適度運(yùn)用輔助工具,適度教學(xué)。
2、除了用來(lái)輔助教學(xué)目標(biāo)分析,你認(rèn)為知識(shí)可視化工具還可以支持哪些教學(xué)活動(dòng)?張開(kāi)想象的翅膀吧,看誰(shuí)想到的多。
答:
我認(rèn)為知識(shí)可視化工具還可以支持以下教學(xué)活動(dòng):
(1)預(yù)習(xí)課本,學(xué)生可以利用思維導(dǎo)圖幫助自己達(dá)到更好的預(yù)習(xí)效果。
(2)展示學(xué)習(xí)內(nèi)容,讓學(xué)生清楚知識(shí)結(jié)構(gòu),從而方便教師組織學(xué)習(xí)活動(dòng)。
(3)梳理教學(xué)過(guò)程:課堂上老師通過(guò)一張關(guān)于本課的思維導(dǎo)圖,讓學(xué)生復(fù)述課文梗要,記住課文脈絡(luò),背誦課文關(guān)鍵字,有助于學(xué)生掌握本節(jié)課內(nèi)容。
(4)還可以支持運(yùn)用在課堂板書(shū)中,歸納總結(jié)知識(shí)點(diǎn),幫助學(xué)生分解復(fù)雜的知識(shí)結(jié)構(gòu)。
(5)幫助學(xué)生整理所學(xué)知識(shí)點(diǎn),形成系統(tǒng)的知識(shí)體系,方便復(fù)習(xí)。
(6)復(fù)習(xí)時(shí),將所學(xué)的知識(shí)用思維導(dǎo)圖系統(tǒng)地展示出來(lái),將所學(xué)的知識(shí)形成相對(duì)完整的體系,有利于知識(shí)的掌握。如:如果是臨近期末復(fù)習(xí),可以用思維導(dǎo)圖一天整理一們學(xué)科特別是文科的書(shū)本知識(shí),相當(dāng)于用自習(xí)的方式復(fù)習(xí)了一次課本。
(7)思維導(dǎo)圖可以應(yīng)用在筆記、寫(xiě)作、討論、會(huì)議、設(shè)計(jì)等方面。
第五篇:集成吊頂營(yíng)銷(xiāo)分析
集成吊頂營(yíng)銷(xiāo)分析
集成吊頂自進(jìn)入人們的視野以來(lái),一路蓬勃發(fā)展,行業(yè)景象欣欣向榮。但任何行業(yè),發(fā)展到一定時(shí)期,總會(huì)進(jìn)入瓶頸期,集成吊頂也不例外。2010年至2011年,不少集成吊頂廠家跟風(fēng)模仿之勢(shì)愈演愈烈,產(chǎn)品同質(zhì)化可謂非常嚴(yán)重。但即便如此,奧盟三維吊頂則不斷探索和思考未來(lái)集成吊頂?shù)陌l(fā)展方向,并且愈加重視品牌營(yíng)銷(xiāo),旨在消費(fèi)者心中深入企業(yè)品牌,提高產(chǎn)品認(rèn)知度。在市場(chǎng)行情的整個(gè)分析下,奧盟公司從以下幾個(gè)方面做出了重大舉措。
一、強(qiáng)化渠道開(kāi)拓,加強(qiáng)內(nèi)功修煉在目前形勢(shì)下,危機(jī)永遠(yuǎn)與機(jī)遇并存,誰(shuí)能在危機(jī)中創(chuàng)造機(jī)會(huì),誰(shuí)就有可能脫穎而出。中小集成吊頂企業(yè)最大的優(yōu)勢(shì)就是渠道優(yōu)勢(shì),因?yàn)橹行∑髽I(yè)相對(duì)來(lái)說(shuō)根基較深,可以采用多種形式進(jìn)行營(yíng)銷(xiāo),包括:送貨上門(mén),送貨下鄉(xiāng),建立市、縣、鄉(xiāng)各級(jí)專(zhuān)賣(mài)店,給特定場(chǎng)所專(zhuān)供產(chǎn)品等等形式形成自己獨(dú)特的營(yíng)銷(xiāo)方式。以渠道優(yōu)勢(shì)為核心競(jìng)爭(zhēng)力的企業(yè)雖然在一級(jí)市場(chǎng)擁有比較堅(jiān)實(shí)的市場(chǎng)基礎(chǔ),但其核心渠道已開(kāi)始老化,企業(yè)缺乏增值策略,渠道缺乏可供拓展的空間,為了銷(xiāo)售業(yè)績(jī),企業(yè)的人力、財(cái)力逐年增多,但企業(yè)獲取的利潤(rùn)卻逐漸走低。作為企業(yè)盈利的核心渠道,其盈利能力與企業(yè)資源投入的比例開(kāi)始逐漸下降,導(dǎo)致企業(yè)盈利水平降低。渠道內(nèi)產(chǎn)品組合單一,不能構(gòu)筑起積極的市場(chǎng)防御體系,增加了企業(yè)競(jìng)爭(zhēng)風(fēng)險(xiǎn)。新
二、電子商務(wù)營(yíng)銷(xiāo)建筑房產(chǎn)營(yíng)銷(xiāo) 廣闊的市場(chǎng)空間,必須要開(kāi)發(fā)出更多適合二、三級(jí)市場(chǎng)需求的產(chǎn)品,來(lái)滿(mǎn)足更多消費(fèi)群體的需要。企業(yè)在開(kāi)拓二、三級(jí)市場(chǎng)的過(guò)程中,除了要不斷提高品牌影響力來(lái)占據(jù)消費(fèi)者心理空間,還要爭(zhēng)取市場(chǎng)份額最大化才是根本目標(biāo)。企業(yè)在宣傳過(guò)程中,更要利用集成吊頂 的美觀、實(shí)用等特性進(jìn)行區(qū)域滲透,通過(guò)對(duì)高速發(fā)展的二、三級(jí)渠道有針對(duì)性的拉動(dòng),提升整體品牌擴(kuò)張能力。在產(chǎn)品上,一方面要豐富傳統(tǒng)吊頂?shù)钠贩N,繼續(xù)擴(kuò)大市場(chǎng)占有率;另一方面還要加強(qiáng)集成吊頂 的產(chǎn)品質(zhì)量,從品質(zhì)上要利潤(rùn),這才是集成吊頂企業(yè) 下一步的思路。
三、加強(qiáng)品牌營(yíng)銷(xiāo)一個(gè)產(chǎn)品的品牌就是一個(gè)企業(yè)的生命,最主要的一點(diǎn)就是如何樹(shù)立產(chǎn)品的品牌意識(shí)。奧盟把品牌視作生命,努力打造企業(yè)的品牌使企業(yè)屹立不倒,使品牌成為奧盟在面臨更多困難依然能安全過(guò)渡的良藥,而如何維護(hù)奧盟的品牌形象,就需要奧盟長(zhǎng)期不斷地為品牌增輝添彩。質(zhì)量是品牌的生命,只有高質(zhì)量的產(chǎn)品才能讓品牌生存下去,而生存下去的品牌才能給消費(fèi)者信心,從而擴(kuò)大奧盟在消費(fèi)者心目中的地位。如何讓消費(fèi)者心目中的品牌形象高大起來(lái)?就是通過(guò)與消費(fèi)者的互動(dòng),形成情感上的品牌營(yíng)銷(xiāo)。一個(gè)企業(yè)的品牌理念如果能與消費(fèi)者達(dá)到共鳴,或者引起消費(fèi)者情感上的觸動(dòng),那么這個(gè)集成吊頂企業(yè)的品牌營(yíng)銷(xiāo)就是成功的。