文件讀取:首先是一個文件上傳,數據入庫,10-200萬條不等,這里主要考慮到一次性讀取,JVM分配出來的棧內存不一定會夠(個人對內存這一塊還是處於一知半解的狀態,所以比較謹慎,若諸位大神有好的認知,希望評論留下地址分享一下),是依行讀取數據,設定一個批量值,當讀取的數據達到一定量之後,執行批量入庫操作,清空集合,再接著讀取。
//讀取文件內容
while((s = br.readLine())!=null){
//判斷是否達到單次處理量
if(num%leadingNum==0&&num!=0){
int a = stencDao.insertBatch(listBean);
if(a!=leadingNum){
flag = false;
}
//清空集合
listBean.clear();
}
String value = s.trim();
//將讀取到的內容放入集合中
if(!value.equals("")){
StencilCustomer bean = new StencilCustomer();
bean.setCustomerPhone(value);
bean.setLinkStencilId(id);
listBean.add(bean);
num ++;
}
}
數據處理:這里的思路也是將數據小化然後處理,這里使用了多線程,設定單個線程處理量,然後開啟多個線程處理,這里需要考慮你的伺服器的承載能力,如果線程開得太多了,處理不過來,會出現蹦死的情況。例如200萬數據,我開了20個線程,單個線程處理600條。
//建立一個線程池 ThreadPoolExecutor threadPool = new ThreadPoolExecutor(
minTaskNumber, maxTaskNumber, 3L, TimeUnit.SECONDS,
new ArrayBlockingQueue<Runnable>(minTaskNumber),
new ThreadPoolExecutor.DiscardOldestPolicy());
//當正在執行的線程數達到最大執行線程數的時候等待
boolean flag = true;
while(flag){
Thread.sleep(1000);//休眠2ms查詢一次
int c = threadPool.getActiveCount();//線程池中活動中的線程數量
if(c<maxTaskNumber){
flag = false;
}
}
上面的代碼是我對線程池的一個控制,控制伺服器一直最大線程執行,Thread.sleep(1000);用while的時候,這個休眠最好不要去掉,去掉之後很影響執行效率
㈡ Java和Java大數據如何選
很多小夥伴還在糾結Java開發和Java大數據2個方向該選哪個,今天達妹就幫你分析一下,Java和Java大數據到底選哪個,做哪個方向薪資更高。
一、Java與大數據的關系
Java是一種語言,而大數據更像是一個方法論或者是集合。從事大數據行業,需要掌握的技能比較多,而且,java是必須要掌握的,舉個簡單的例子:做大數據的工作需要永達hadoop,而hadoop就是通過java語言實現的。
兩個方向,各有優勢。
國家政策支持:大數據行業國家支持力度很大,產生很多新科技產業的公司,人才需求和培養也非常重視。
二、就業方面
就業和行業前景方面:
JAVA就業更廣;大數據開發薪水高,還有非常長的時間發展,需要行業細化,發展潛力大;現在大數據就業相對窄,但人才也少,容易就業,且薪水高,將來隨著大數據行業的細分行業產生,就業機會也會大量增加。
大數據人才缺口現在超過百萬,如果你想投身互聯網行業,那麼大數據絕對是你的首選方向。
從以後的就業薪資待遇來看,Java和Java大數據的區別:
Java以後的就業方向單一,薪資就是Java程序員的基本水平;Java大數據工程師,以後的就業可以從事Java方面的工作,也可以涉獵大數據方面的工作,因為對大數據技術知識有所涉獵,所以談薪資的資本會高一些,但終究高不過大數據的薪資待遇。
可以看到,Java薪資處在10-30K的為普遍情況。
由於大數據產業的火爆,相關職位的待遇也是水漲船高。可以看到,大數據相關職位的平均薪資已經超過月薪20K。
TIPS:
一般建議選擇新興行業,大數據因為人才稀缺,一開始容易入行,薪水高;後期自己經驗提升,更容易成為高端人才,與一些老行業相比,高端人才少,競爭小,同是高端人才新興行業的薪水更高,而且高出很大一截,足以讓你心動。
JAVA是老開發行業,人才一堆一堆的,而且提升機會少,幾乎都是用時間一點點的養起來,很難有突然而來的機會。
三、學習內容方面
Java是老牌編程語言,Java開發主要學的是後台開發的相關技術。包括環境搭建技術、資料庫和web技術、主流框架技術(SpringMVC、MyBatis、WebService、JQuery等)
大數據對於java的學習,只需要學習其中的一部分就可以。
大家都知道Java的方向有JavaSE、JavaEE、JavaME,學習大數據要學習哪個方向呢?只需要學襪灶畝習Java的標准版JavaSE就可以了,像Servlet、JSP、Tomcat、Struts、Spring、Hibernate,Mybatis都是JavaEE方向的技術在大數據技術里用到的並不多,只需要了解就可以了,當然Java怎麼連接資料庫還是要知道的,像JDBC一定要掌握一下。
四、學習方向區別
學習方面,JAVA的學習和大數據的學習,JAVA屬於純開發,而大數據更重視數據邏輯關系,更接近於實際的應用,並且都屬中大型項目,對於商業、數據等各方面都有較深關聯性,可以較好的培養一個人的整體商業思維。
開發會了,邏輯清楚了,商業關系明確了,既告森然再沒創業想法的人,都會被你自身的成長和周邊朋辯友友的影響而創業。大數據開發的學習打造的是實際應用項目的理解,更容易成長為綜合性人才。相對應的JAVA學習雖然也有大項目,也可以培養,但機率小一些,很多人做了多年,還是開發。
學習方面-續:一般學JAVA的不一定能做得了大數據,然後學大數據開發的,在一定程度上是能做JAVA的,只不過既然大數據的薪水高,工作發展機會、項目發展機會、創業發展機會都比JAVA優越,很少有人願意再去選擇做JAVA開發。
綜上所述,Java大數據就是升級版的Java,學習大數據一定要有Java基礎。如果你是0基礎,那麼也可以從Java開始學習,逐漸做到大數據,薪資會更高。
免責聲明:內容來源於公開網路,若涉及侵權聯系盡快刪除!
㈢ 學習Java大數據需要掌握哪些Java技能
學習Java大數據需要掌握哪些Java技能?現在大數據發展很速度很多小夥伴想要學習Java大數據技術開發,但是學習大數據為什麼需要掌握Java技能呢?
一、學大數據為什麼要掌握Java?
首先,我們學習大數據,為什麼要先掌握Java技術?
Java是目前使用非常廣泛的編程語言,它具有的眾多特性,特別適合作為大數據應用的開發語言。
Java不僅吸收了C++語言的各種優點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特徵。Java語言作為靜態面向對象編程語言的代表,極好地實現了面向對象理論,允許程序員以優雅的思維方式進行復雜的編程。
Java的跨平台應用能力,比C、C++更易侍頃尺用,更容易上手。同時還具有簡單性、面向對象、分布式、健壯性、安全性、平台獨立與可移植性、多線程、動態性等特點。
更重要的是,Hadoop以及其他大數據處理技術很多都是用Java,例如Apache的基於Java的HBase和Accumulo以及ElasticSearchas,因此學習Hadoop的一個首要條件老高,就是掌握Java語言編程。
二、學哪些Java知識?
想要掌握大數據技術,需要學習哪些java基礎知識?
java學習路線圖如下:
(1)Java語言基礎
Java開發介紹、熟悉Eclipse開發工具、Java語言基礎、Java流程式控制制、Java字元串、Java數組與類和對象、數字處理類與核心技術、I/O與反射、多線程、Swing程序與集合類
(2)HTML、CSS與JavaScript
PC端網站布局、HTML5+CSS3基礎、WebApp頁面布局、原生JavaScript交互功能開發、Ajax非同步交互、jQuery應用
(3)JavaWeb和資料庫
資料庫、JavaWeb開發核心、JavaWeb開發內幕
大數據學習預警:
雖然說,Java是學習大數據的基礎,但這並不代表著真正的大數據技術就是以Java學習為主,Java只是大數據學習的漫漫長路中的一小段路程,想要學習真正的大數據技術,還要掌握hadoop、spark、storm開發、hive資料庫、Linux操作系統、分布式存儲、分布式計算框架等專業知識。
其實學習大數據之前會先學習Java編程的,如果你是零基礎學習大數據技術開發建議先學習Java,昌平北大青鳥Java培訓班後期會有大數據知識的拓展,如果你比較感興趣不妨來昌平北大青鳥參加Java培訓班的免費體驗課程。
免責聲明:內容來源於公開網路,若乎仿涉及侵權聯系盡快刪除!
㈣ 大數據 java怎麼解決
Java在處理數據量比較大的時候,載入到內存必然會導致內存溢出,而在一些數據處理中我們不得不去處理海量數據,那Java是如何處理大數據的呢?有什麼技巧嗎?
在做數據處理中,我們常見的手段是分解,壓縮,並行,臨時文件等方法。例如,我們要將資料庫(不論是什麼資料庫)的數據導出到一個文件,一般是Excel或文本格式的CSV;對於Excel來講,對於POI和JXL的介面,你很多時候沒有辦法去控制內存什麼時候向磁碟寫入,很惡心,而且這些API在內存構造的對象大小將比數據原有的大小要大很多倍數,所以你不得不去拆分Excel,還好,POI開始意識到這個問題,在3.8.4的版本後,開始提供cache的行數,提供了SXSSFWorkbook的介面,可以設置在內存中的行數,不過可惜的是,他當你超過這個行數,每添加一行,它就將相對行數前面的一行寫入磁碟(如你設置2000行的話,當你寫第20001行的時候,他會將第一行寫入磁碟),其實這個時候他些的臨時文件,以至於不消耗內存,不過這樣你會發現,刷磁碟的頻率會非常高,我們的確不想這樣,因為我們想讓他達到一個范圍一次性將數據刷如磁碟,比如一次刷1M之類的做法,可惜現在還沒有這種API,很痛苦,我自己做過測試,通過寫小的Excel比使用目前提供刷磁碟的API來寫大文件,效率要高一些,而且這樣如果訪問的人稍微多一些磁碟IO可能會扛不住,因為IO資源是非常有限的,所以還是拆文件才是上策
㈤ 問一個JAVA編程問題,要處理大數據,要速度快的話能不能不把它全部放到內存里啊
用一個隊列邊取邊處理, 每次取一部分數據。
list的大小無限制,只要不超過虛擬機內存就可以。
一般大型系統中,類似這種情況都是在資料庫中寫存儲過程解決的。