文件读取:首先是一个文件上传,数据入库,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的大小无限制,只要不超过虚拟机内存就可以。
一般大型系统中,类似这种情况都是在数据库中写存储过程解决的。