- ?
java逆天攻略:快速进入大数据开发核心技术
干寻芹
展开
前言
Java安装应该是件非常简单的事情,不知何时在Oracle官方下载JDK时,竟然强制要求用户登陆。这样就不能通过Linux命令wget下载了,真是有点让人火大。
想了个办法破解这种恶心的cookies验证行为!
对大数据感兴趣的朋友可以加群大数据视频学习交流群 675590728
目录
Java在Windows中安装
Java在Linux Ubuntu中安装
1 Java在Windows中安装
Java环境安装,是指Java开发环境的安装,包括JDK安装和Java的环境配置。在Windows中,很多的Java应用通过JRE就可以运行。但对Java的开发者来说,我们需要安装JDK,必须Oracle SUN官方发布的JDK。
在Windows系统上安装JDK是件非常简单的事情,对大数据感兴趣的朋友可以加群大数据视频学习交流群 675590728
大家可以下载最新版本的Java SE 8,或者较早的JDK版本。本文中使用的是1.6.0_45版本的JDK。
下载后,双击安装。我安装在目录: D:\toolkit\java\jdk6
安装好JDK后,配置环境变量:
选择:控制面板 –> 系统和安全 –> 系统属性 –> 高级 –>环境变量
# 新建JAVA_HOME变量JAVA_HOME=D:\toolkit\java\jdk6# 新建PATH变量PATH=D:\toolkit\java\jdk6\bin
注:如果PATH变量已存在,则在最后增加JDK的路径,用分号(;)与上个配置做分隔。
保存后,打开CMD命令窗口,测试Java的命令行操作。
# 查看Java安装版本~ C:\Users\Administrator>java -versionjava version "1.6.0_45"Java(TM) SE Runtime Environment (build 1.6.0_45-b06)Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)# 测试Java命令~ C:\Users\Administrator>javaUsage: java [-options] class [args...] (to execute a class) or java [-options] -jar jarfile [args...] (to execute a jar file)where options include: -server to select the "server" VM -hotspot is a synonym for the "server" VM [deprecated] The default VM is server. -cp-classpathA ; separated list of directories, JAR archives, and ZIP archives to search for class files. -D=set a system property -verbose[:class|gc|jni] enable verbose output -version print product version and exit -version:require the specified version to run -showversion print product version and continue -jre-restrict-search | -jre-no-restrict-search include/exclude user private JREs in the version search -? -help print this help message -X print help on non-standard options -ea[:...|:] -enableassertions[:...|:] enable assertions -da[:...|:] -disableassertions[:...|:] disable assertions -esa | -enablesystemassertions enable system assertions -dsa | -disablesystemassertions disable system assertions -agentlib:[=] load native agent library, e.g. -agentlib:hprof see also, -agentlib:jdwp=help and -agentlib:hprof=help -agentpath:[=] load native agent library by full pathname -javaagent:[=] load Java programming language agent, see java.lang.instrument -splash:show splash screen with specified image# 测试Javac命令~ C:\Users\Administrator>javac用法:javac<选项><源文件>其中,可能的选项包括: -g 生成所有调试信息 -g:none 不生成任何调试信息 -g:{lines,vars,source} 只生成某些调试信息 -nowarn 不生成任何警告 -verbose 输出有关编译器正在执行的操作的消息 -deprecation 输出使用已过时的 API 的源位置 -classpath <路径> 指定查找用户类文件和注释处理程序的位置 -cp <路径> 指定查找用户类文件和注释处理程序的位置 -sourcepath <路径> 指定查找输入源文件的位置 -bootclasspath <路径> 覆盖引导类文件的位置 -extdirs <目录> 覆盖安装的扩展目录的位置 -endorseddirs <目录> 覆盖签名的标准路径的位置 -proc:{none,only} 控制是否执行注释处理和/或编译。 -processor[,,...]要运行的注释处理程序的名称;绕过默认的搜索进程 -processorpath <路径> 指定查找注释处理程序的位置 -d <目录> 指定存放生成的类文件的位置 -s <目录> 指定存放生成的源文件的位置 -implicit:{none,class} 指定是否为隐式引用文件生成类文件 -encoding <编码> 指定源文件使用的字符编码 -source <版本> 提供与指定版本的源兼容性 -target <版本> 生成特定 VM 版本的类文件 -version 版本信息 -help 输出标准选项的提要 -Akey[=value] 传递给注释处理程序的选项 -X 输出非标准选项的提要 -J<标志>直接将<标志>传递给运行时系统
这样我们就在Windows的系统中,配置好了Java环境。
2 Java在Linux Ubuntu中安装
Java安装,指定的是SUN Oracle官方的JDK软件包,而不是Linux Ubuntu系统中通过apt-get安装的OpenJDK。
注:请一定注意版本,必须使用SUN Oracle官方的JDK软件包
在Linux Ubuntu中,下载并安装JDK,这里我选择安装Java SE 1.6.45的64位版本的JDK。
2.1 下载JDK
不知道Oracle官方网站时候调整的JDK下载需要先登陆,因此直接使用wget命令,无法完成JDK的下载。
我们有下面2种解决方法:
1). 从浏览器中登陆下载,然后再传到Linux的服务器
2). 用wget命令模拟,浏览器中的用户cookies,进行下载
第一种方式没什么技术含量,不再展开介绍。接下来,使用第二种方式,用wget命令模拟浏览器中的用户cookies。
打开浏览器,登陆Oracle官网,进入Oracle JDK下载页面。把对应的cookies配置后wget后,进行下载。
#下载JDK~ wget --no-check-certificate --no-cookies --header "Cookie: s_nr=1392900709523; ORA_WWW_PERSONALIZE=v:1~i:6~r:6~g:APAC~l:en~cs:NOT_FOUND~cn:scut; ORASSO_AUTH_HINT=v1.0~20140322121132; ORA_UCM_INFO=3~xxxx21212xxxx~xxxx~xxxx~xxxx@163; s_cc=true; oraclelicense=accept-securebackup-cookie; gpw_e24=http%3A%2F%2Foracle%2Ftechnetwork%2Fjava%2Fjavase%2Fdownloads%2Fjava-archive-downloads-javase6-419409.html%23jdk-6u45-oth-JPR; s_sq=%5B%5BB%5D%5D;" //download.oracle/otn-pub/java/jdk/6u45-b06/jdk-6u45-linux-x64.bin
有关账户信息的部分,我已经涂黑。
经常一番周折,我们下载就下载好了JDK。
2.2 安装JDK
通过shell命令安装JDK
# 安装JDK~ sh ./jdk-6u45-linux-x64.bin~ pwd/home/conan/tookit# 查看安装JDK安装后的目录~ tree -L 2.├── jdk1.6.0_45│ ├── bin│ ├── COPYRIGHT│ ├── db│ ├── include│ ├── jre│ ├── lib│ ├── LICENSE│ ├── man│ ├── README.html│ ├── src.zip│ └── THIRDPARTYLICENSEREADME.txt└── jdk-6u45-linux-x64.bin
2.3 设置Java的环境变量
用vi编辑environemt文件
~ sudo vi /etc/environmentPATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/conan/tookit/jdk1.6.0_45/bin"JAVA_HOME=/home/conan/tookit/jdk1.6.0_45
检查环境变量的设置
# 让环境变量生效~ . /etc/environment# 检查环境变量~ export|grep jdkdeclare -x OLDPWD="/home/conan/tookit/jdk1.6.0_45"declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/conan/tookit/jdk1.6.0_45/bin"~ echo $JAVA_HOME/home/conan/tookit/jdk1.6.0_45
运行Java命令
~ java -versionjava version "1.6.0_45"Java(TM) SE Runtime Environment (build 1.6.0_45-b06)Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)~ javaUsage: java [-options] class [args...] (to execute a class) or java [-options] -jar jarfile [args...] (to execute a jar file)where options include: -d32 use a 32-bit data model if available -d64 use a 64-bit data model if available -server to select the "server" VM The default VM is server. -cp-classpathA : separated list of directories, JAR archives, and ZIP archives to search for class files. -D=set a system property -verbose[:class|gc|jni] enable verbose output -version print product version and exit -version:require the specified version to run -showversion print product version and continue -jre-restrict-search | -jre-no-restrict-search include/exclude user private JREs in the version search -? -help print this help message -X print help on non-standard options -ea[:...|:] -enableassertions[:...|:] enable assertions -da[:...|:] -disableassertions[:...|:] disable assertions -esa | -enablesystemassertions enable system assertions -dsa | -disablesystemassertions disable system assertions -agentlib:[=] load native agent library, e.g. -agentlib:hprof see also, -agentlib:jdwp=help and -agentlib:hprof=help -agentpath:[=] load native agent library by full pathname -javaagent:[=] load Java programming language agent, see java.lang.instrument -splash:show splash screen with specified image
通过上面的操作,我们就把Java在Linux Ubuntu中的系统安装完成。
- ?
一起来学大数据|Java与数据库之间的连接JDBC
Phyllis
展开
昨天我们看了数据库的使用,只不过那都是我们手工去输入的数据,今天我们用java来实现对数据库的连接。
JDBC简介
JDBC就是java 数据库连接,是java中的API,我们将用它来执行SQL语句,除了我们平常的mysql数据库以外,jdbc还提供了统一的多种的数据库。
如上图所示客户端通过jdbc API加载驱动后实现了数据的连接。接下来我们给出详细的步骤。
入门程序
我们先来学习一个简单的,首先我们新建的Java项目,其次是导入mysql的数据驱动jar包,jar可以在网上直接找一个,很方便,不需要太高版本的。
准备工作都有做好了之后,我们就可开始啦~
1,.注册驱动
方式一
方式二
在这里我们建议使用第一种方式,第二种方式会多次注册数据库,因为Driver()中其实就封装了一个注册驱动的方法,我们在外面又注册一次。
2.建立连接
我们通过上述的语句实现连接数据库,数据库对应写上数据库的名字,在后面将自己的数据库的用户名和密码因为补上。第二步就结束了。
3.获取执行sql语句的statement
4.执行sql语句的增删改查
在上面图片中,我们一般将sql单独拿出来,赋值给sql,方便操作。
5.如果是查询语句,就会有结果集返回,我们对其进行处理。
6.释放数据库的资源
按顺序依次关闭数据库的资源,防止资源的恶意占有。
主要接口或类
---DriverManger---
作用
a、注册驱动
b、获取与数据库的链接
改进注册驱动:
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
缺点:严重依赖具体的驱动类;会导致驱动被注册2次。
替代方案:Class.forName("com.mysql.jdbc.Driver");
获取与数据库的链接
DriverManager.getConnection("jdbc:mysql://localhost:3306/ssm", "root", "hang");
---Connection---
我们知道所有和数据库之间的连接我们都是通过链接的方式进行的,如果我们想要对数据库进行操作,我们就要从连接的对象中获取可以执行数据库的statement对象,实现我们的操作。
---statement---
---PreparedStatement---
我们在这里,能用PreparedStatement就不要使用Statement,上面已经很明确了PreparedStatement的优点。
---ResultSet---
作用:
代表者查询语句的查询结果集
上面就是对java连接数据库的简单介绍,下篇文章我们就会对上述的代码进行优化,解决代码中的硬编码问题,以及代码的冗余问题,我们还引入连接池强化数据连接速率。
有帮助到大家的话,关注支持一下~
感谢坚持关注的朋友
世界很大,幸好有你
欢迎在评论区留下你的问题或困惑,我将每天与你分享我的观点和心得。
聚焦最新科技咨讯,探寻未来智能领域,我是女陶。
- ?
集算器协助java处理多样性数据源之Excel
杰克逊
展开
Java程序员读取和计算excel的程序一般要使用poi或其它开源包,这些开源包对编程的支持较为底层,整体学习成本和操作复杂度都很高。使用集算器辅助java处理excel文件就可以避免这些事务。
下面通过一个例子看一下具体作法:从Excel文件orders.xls中读取订单信息,找出2010年1月1日(含)之后,SELLERID等于18的订单。orders.xls的内容如下:
实现的思路是:用Java程序调用集算器脚本,读取和计算excel文件中的数据,之后将结果以ResultSet的方式返回给Java程序。由于集算器支持动态表达式解析和求值,使得Java程序可以像使用sql那样,灵活的处理数据。
首先,程序员可以将条件“2010年1月1日(含)之后,并且SELLERID等于18的订单。”作为参数where传递给esProc程序,如下图:
where是个字串,其值为:ORDERDATE>=date(2010,1,1) && SELLERID==18。
esProc的程序代码如下:
A2:按照条件过滤。这里使用宏来实现动态解析表达式,其中的where就是传入参数。集算器将先计算${…}里的表达式,将计算结果作为宏字符串值替换${…}之后解释执行。这个例子中最终执行的是:=A1.select(ORDERDATE>=date(2010,1,1) && SELLERID==18)。A1:定义一个file对象,导入excel数据。esProc的集成开发环境可以直观的显示出导入的数据,如上图右边部分。importxls函数也可以读写xlsx文件,它会根据文件扩展名自动判断excel的版本。
A3:将符合条件的结果集返回给java。如果需要将结果写入另外一个excel文件,只要将A3单元格改为:=file("D:/file/orders_result.xls").exportxls@t(A2)。
过滤条件发生变化时不用改变程序,只需改变where参数即可。例如,条件变为:2010年1月1日(含)之后,并且SELLERID等于18的订单,或者CLIENT等于PWQ的订单。Where的参数值可以写为:CLIENT=="PWQ"||ORDERDATE>=date(2010,1,1) && SELLERID==18。执行之后,A2中的结果集如下图:
在Java程序中使用esProc JDBC调用这段程序获得结果的代码如下:(将上述esProc程序保存为test.dfx):
//建立esProc jdbc连接
Class.forName("com.esproc.jdbc.InternalDriver");
con= DriverManager.getConnection("jdbc:esproc:local://");
//调用esProc程序(存储过程),其中test是dfx的文件名
com.esproc.jdbc.InternalCStatementst =(com.esproc.jdbc.InternalCStatement)con.prepareCall("call test(?)");
//设置参数
st.setObject(1,"ORDERDATE>=date(2010,1,1) && SELLERID==18 || CLIENT==\"PWQ\"");//执行esProc存储过程
ResultSet set =st.executeQuery();
对于代码较简单的脚本,还可以把代码直接写在调用集算器JDBC的Java程序中,而不必专门编写脚本文件(test.dfx):
ResultSet set = st.executeQuery(
"=file(\"D:/file/orders.xls\").importxls@t().select(ORDERDATE>=date(2010,1,1) && SELLERID==18 || CLIENT==\"PWQ\")");
这段Java代码直接调用了集算器的一句脚本:从Excel文件中取得数据,并按照指定的条件过滤。
- ?
如何用Java制作一个简单数据库
尔玉
展开
笔者准备上大二,四月时加入了学院一个为期一年的Hadoop开发研究项目小组,暑假绝对是不可错过的学习时期。由于Hadoop 是由Java 编写的,调用API 最好也是用Java,Java的简单使用因此成为我们小组的必修。
我们选择的教材是《Thinking in Java》(Bruce Eckel)和网课《Java4android》(Mars老师)。悄悄告诉你,我《Thinking in Java》截稿时才看了不到200页。
制作一个简单数据库是 《Java4android》中Mars老师留下的作业。我花了三天半完成,700+行。(代码太长,就不一一贴出来了,文末有跳转查看和下载地址)
学习是一个输入和输出的过程,这篇文章就当作我Java入门的奠基,同时可以帮助初学者理解Java这门语言的使用,也欢迎参照这个小项目练练手。
---------------------------------------------------
笔者的这个数据库是基于文本文件的读写储存,原理比较简单。
数据库命令: 首先,数据库有四大基本功能:增删改查(add/delete/update/query),我为了使用方便,在设定这四个命令的同时,增加了“列出全部(show)”和“退出(quit)”。
数据库成员: 数据库每个成员有五个值:与
命令格式:
ADD
DELETE
UPDATE
QUERY
SHOW
QUIT
程序文件纵览:(已展开展示成员与方法)
程序类文件图:(使用Eclipse的Modelgoon插件反向制作UML)
程序关系图:
(我知道挺乱●﹏●)
程序文件各类的作用分析:
Main:显示欢迎界面、调用MainLooper的loop()方法(程序主循环)。
MainLooper:程序主循环、从Input的getInputLine()方法获得命令输入、把输入的字符串传给CheckCmd的check()方法、如果传去check()的值为”QUIT”则跳出循环。
Input:bufferedReader.getInputLine()方法中,调用java.io.BufferedReader的readLine()方法读取整行字符串返回。
Data.txt:存放数据库的文件。
Eng.properties:存放用户交互界面(UI)提示
IOProperty(截图里打错了):利用java.util.Properties的load(InputStreaminStream)方法,读取储存文件键值对。
UserInterface:提供获取UI提示的方法。
User:方便获得、暂存、修改、统一输出成员的值。
UsefulMethod:(实用方法)专门在代码重构时新增的类,供使用的类继承,意在统一管理常用的6个方法。分别是:1、反馈命令成功执行 2、判断字符串是否为数字 3、判断成员的数值value是否符合要求 4、判断新增成员key是否重复 5、把数据库储存文件的内容按照id排序(选择排序法) 6、消除String[]中的null。
CheckCmd:使用String的.split(“ ”)方法拆分命令,检查判断输入命令,若无语法问题即进行相应操作,否则报错。
Action:根据CheckCmd的调用进行相应的操作实现数据库功能。
WriteFile:根据调用的参数把字符串添加或覆盖写入文件。
QueryFile:showAll()方法返回数据库所有的内容,query(inttypeIndex, int operIndex, String args) 根据参数进行相应的搜索,返回所有符合条件的成员。
命令实现详析:
ADD
actAdd(String[] strs):可添加前提:命令长度为6、成员数值value和性别合规、key不重复。否则根据不符的要求相应显示提示。
actAdd(String[] strs):new一个User类,放入成员值,用writeFile.write(user.toString(),true)添加到文件尾部,并执行一次sortData()(文件全内容按id排序)。
DELETE
checkDelete(String[] strs):前提:命令长度为2。判断命令参数是否为id(isNumberic(Stringstr)),并输入到actDELETE()。
actDelete(String[] strs, boolean isId):调用queryFile.showAll()获得文件全部内容并存在String[]中。根据isId循环检索对应key,成立便跳出,把对应字符串赋为””空字符串,并复写在文件上。
UPDATE(设计仅支持salary修改)
checkUpdate(String[] strs):前提:命令长度为4、命令第2部分是salary。判断命令参数是否为id,并输入到actUPDATE()
actUpdate(String[] strs, boolean isId):与DELETE类似,调用queryFile.showAll()获得文件全部内容并存在String[]中。根据isId循环检索对应key,成立便跳出,把对应成员值放在一个user成员内,并修改成员salary值,再复写在文件上。
QUERY
checkQuery(String[] strs):前提:命令长度为4。根据type index{0.
actQuery(int typeIndex, int operIndex, Stringargs):调用queryFile.query(typeIndex, operIndex, args)获取结果并循环输出结果。
query(int typeIndex, int operIndex, Stringargs) :把简化的情况分别检索。思想挺简单,逻辑容易乱,代码也多。
SHOW
checkShow(String[] strs):前提:命令长度为1。直接调用actShow(String[]strs)。
actShow(String[] strs):调用queryFile.showAll()获取全部内容并循环输出。
QUIT
checkQuit():输出“谢谢使用”,并返回-1至MainLooper,跳出循环,程序终结。
Data.txt截图:
Eng.properties截图:
运行效果:(注:亮绿色为键盘输入)
------------------------------------------------------
至此,我把我数据库的结构与实现方式大概展现出来了。
但正如我们的精神领袖Linus Torvalds所说的“Talk is cheap, show me the code.”说多无益,想要自己有大长进,就要多看优秀代码,同时自己多写代码。
在此我放出链接:
直接看代码链接:Java简单数据库 源码展示
下载链接:http://pan.baidu/s/1dE82FJF 密码:jyq0
(包含源码和可运行jar)
欢迎找BUG。
感谢Bruce Eckel 和 Mars老师。
谢谢各位看看官。
- ?
给Java开发者的10个大数据工具和框架
Hazel
展开
当今IT开发人员面对的最大挑战就是复杂性,硬件越来越复杂,OS越来越复杂,编程语言和API越来越复杂,我们构建的应用也越来越复杂。根据外媒的一项调查报告,蓝鸥技术人员列出了Java程序员在过去12个月内一直使用的一些工具或框架,或许会对你有意义。
先来看看大数据的概念。根据百度百科,大数据是庞大或复杂的数据集的广义术语,因此传统的数据处理程序不足以支持如此庞大的体量。
在许多情况下,使用SQL数据库存储/检索数据都是很好的选择。而现如今的很多情况下,它都不再能满足我们的目的,这一切都取决于用例的变化。
现在来讨论一些不同的非SQL存储/处理数据工具,例如,NoSQL数据库,全文搜索引擎,实时流式处理,图形数据库等。
1、MongoDB——最受欢迎的,跨平台的,面向文档的数据库。
MongoDB是一个基于分布式文件存储的数据库,使用C++语言编写。旨在为Web应用提供可扩展的高性能数据存储解决方案。应用性能高低依赖于数据库性能,MongoDB则是非关系数据库中功能最丰富,最像关系数据库的,随着MongDB 3.4版本发布,其应用场景适用能力得到了进一步拓展。
MongoDB的核心优势就是灵活的文档模型、高可用复制集、可扩展分片集群。你可以试着从几大方面了解MongoDB,如实时监控MongoDB工具、内存使用量和页面错误、连接数、数据库操作、复制集等。
2、Elasticsearch ——为云构建的分布式RESTful搜索引擎。
ElasticSearch是基于Lucene的搜索服务器。它提供了分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是比较流行的企业级搜索引擎。
ElasticSearch不仅是一个全文本搜索引擎,还是一个分布式实时文档存储,其中每个field均是被索引的数据且可被搜索;也是一个带实时分析功能的分布式搜索引擎,并且能够扩展至数以百计的服务器存储及处理PB级的数据。ElasticSearch在底层利用Lucene完成其索引功能,因此其许多基本概念源于Lucene。
3、Cassandra——开源分布式数据库管理系统,最初是由Facebook开发的,旨在处理许多商品服务器上的大量数据,提供高可用性,没有单点故障。
Apache Cassandra是一套开源分布式NoSQL数据库系统。集Google BigTable的数据模型与Amazon Dynamo的完全分布式架构于一身。于2008开源,此后,由于Cassandra良好的可扩展性,被Digg、Twitter等Web 2.0网站所采纳,成为了一种流行的分布式结构化数据存储方案。
因Cassandra是用Java编写的,所以理论上在具有JDK6及以上版本的机器中都可以运行,官方测试的JDK还有OpenJDK 及Sun的JDK。 Cassandra的操作命令,类似于我们平时操作的关系数据库,对于熟悉MySQL的朋友来说,操作会很容易上手。
4、Redis ——开源(BSD许可)内存数据结构存储,用作数据库,缓存和消息代理。 Redis是一个开源的使用ANSI C语言编写的、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Redis 有三个主要使其有别于其它很多竞争对手的特点:Redis是完全在内存中保存数据的数据库,使用磁盘只是为了持久性目的; Redis相比许多键值数据存储系统有相对丰富的数据类型; Redis可以将数据复制到任意数。
5、Hazelcast ——基于Java的开源内存数据网格。
Hazelcast 是一种内存数据网格 in-memory data grid,提供Java程序员关键任务交易和万亿级内存应用。虽然Hazelcast没有所谓的“Master”,但是仍然有一个Leader节点(the oldest member),这个概念与ZooKeeper中的Leader类似,但是实现原理却完全不同。同时,Hazelcast中的数据是分布式的,每一个member持有部分数据和相应的backup数据,这点也与ZooKeeper不同。
Hazelcast的应用便捷性深受开发者喜欢,但如果要投入使用,还需要慎重考虑。
6、EHCache——广泛使用的开源Java分布式缓存。主要面向通用缓存、Java EE和轻量级容器。
EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是hibernate中默认的CacheProvider。主要特性有:快速简单,具有多种缓存策略;缓存数据有两级,内存和磁盘,因此无需担心容量问题;缓存数据会在虚拟机重启的过程中写入磁盘;可以通过RMI、可插入API等方式进行分布式缓存;具有缓存和缓存管理器的侦听接口;支持多缓存管理器实例,以及一个实例的多个缓存区域;提供Hibernate的缓存实现。
7、Hadoop ——用Java编写的开源软件框架,用于分布式存储,并对非常大的数据用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群进行高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,MapReduce则为海量的数据提供了计算。
8、Solr ——开源企业搜索平台,用Java编写,来自Apache Lucene项目。
Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。
与ElasticSearch一样,同样是基于Lucene,但它对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化。
9、Spark ——Apache Software Foundation中最活跃的项目,是一个开源集群计算框架。
Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。
Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架。与 Hadoop 不同,Spark 和 Scala 能够紧密集成,其中的 Scala 可以像操作本地集合对象一样轻松地
10、Memcached ——通用分布式内存缓存系统。
Memcached是一套分布式快取系统,当初是Danga Interactive为了LiveJournal所发展的,但被许多软件(如MediaWiki)所使用。Memcached作为高速运行的分布式缓存服务器,具有以下的特点:协议简单,基于libevent的事件处理,内置内存存储方式。
- ?
2018年,Java程序员转型Java大数据开发,是不是一个好选择?
笔笔
展开
前言
大数据时代,中国IT环境也将面临重新洗牌,不仅仅是企业,更是程序员们转型可遇而不可求的机遇。国内大多数大型互联网公司的程序员被称作研发工程师,但实际上国内几乎没有研发项目,只能叫做开发。开发程序员的工作大多是重复性劳动,容易产生疲惫感,薪资在工作2-5年内就达到了一个峰值,再要提升就比较困难,这样就导致了很多程序员最终转行做了其他行业。
首先JAVA的精密,强大,拥有其它语言不可替代的性能和可维护性,早已经是成为最受欢迎的编程语言之一,很多人想进入IT行业,首选的第一门语言就是JAVA。但是,在未来10年肯定是大数据的天下,人工智能的爆发,将会有大量企业会进入大数据领域,而从JAVA程序员转JAVA大数据就会有天然的优势,因为目前大数据的架构基本都是用JAVA语言完成,未来10年,JAVA大数据的需求量会越来越大。
我们都知道Java语言在编程中的地位不言而喻,近年来,我们都知道很多学java的朋友,在java的基础上开始学习以hadoop为首的大数据方向的语言,本文我就来分析一下为什么越来越多的java工程师开始转向hadoop?
Hadoop是Apache软件基金会的顶级开源项目,是由原雅虎公司Doug Cutting根据Google发布的学术论文而创建的开源项目。Doug Cutting被称为Hadoop之父,他打造了目前在云计算和大数据领域里如日中天的Hadoop。
Hadoop的发音是[hdu:p],Hadoop 这个名字不是一个缩写,而是一个虚构的名字。Doug Cutting解释Hadoop的得名:“这个名字是我孩子给一个棕黄色的大象玩具命名的。我的命名标准就是简短、容易发音和拼写,没有太多的意义,并且不会被用于别处,小孩子恰恰是这方面的高手”。
Apache Hadoop官方定义是:Hadoop项目是一套可靠的,可扩展的,支持分布式计算的开源软件。
下面我们来分析一下大数据在未来的优势:
市场需求量大
经常调查显示,去年有很多大小互联网公司都在布局大数据。而目前大数据方面的人才依旧十分紧缺,比如大数据生态Spark需要的Scala工程师。基于Java和Scala等技术密切的关系,有些大数据公司会瞄准JAVA工程师,通过培养转而成为大数据工程师。
如果你先一步在学习JAVA的基础上再学习一些大数据的知识,那么将来你在公司的竞争力会明显大于一般的JAVA工程师,甚至可能提前一步进军大数据行列。
就业方向广泛
JAVA大数据的人才以后可以进行的工作有很多种,下面举几个例子:
(1)大数据开发工程师
基础大数据服务平台,大中型的商业应用包括我们常说的企业级应用(主要指复杂的大企业的软件系统)、各种类型的网站等。负责搭建大数据应用平台以及开发分析应用程序。
(2)大数据分析师
负责数据挖掘工作,运用Hive、Hbase等技术,专门对从事行业数据搜集、整理、分析,并依据数据做出行业研究、评估和预测的专业人员。以及通过使用新型数据可视化工具如Spotifre,Qlikview和Tableau,对数据进行数据可视化和数据呈现。
(3)Android工程师
Android是一种基于Linux的自由及开放源代码的操作系统,其源代码是Java。所以市场上见到的手机系统例如MIUI,阿里云,乐蛙等,都是修改源代码再发行的。Java做安卓不单单是指系统,还有APP对于更多的开发人员来说,他们更多的时间是花在开发APP上面。
还有很多其它职位比如大数据挖掘等就不一一说明了。
行业起薪高
下面我们用一张图让大家了解一下大数据工程师和java工程师的平均薪资
通过这篇文章我相信大家对JAVA大数据行业都有一点了解,在这个大家都呼吁的大数据时代,转型做JAVA大数据是一个非常好的选择,我相信即使几年以后大数据依旧是一个很好的领域。
- ?
为什么大批的JAVA程序员都是在转大数据
Manda
展开
前言
首先JAVA的精密,强大,拥有其它语言不可替代的性能和可维护性,早已经是成为最受欢迎的编程语言之一,很多人想进入IT行业,首选的第一门语言就是JAVA。但是,在未来10年肯定是大数据的天下,人工智能的爆发,将会有大量企业会进入大数据领域,而从JAVA程序员转JAVA大数据就会有天然的优势,因为目前大数据的架构基本都是用JAVA语言完成,未来10年,JAVA大数据的需求量会越来越大。
现在学习JAVA的小伙伴,如果想以后不被淘汰,将来势必会进军大数据行列,根据目前的行业动态,JAVA程序员由于发展的局限性以及随着年龄增长,在竞争方面也越来越容易被年轻一代赶超,因为JAVA程序员的加班时间过长导致,所以大批JAVA工程师前辈已经先一步进军大数据了。
我们都知道Java语言在编程中的地位不言而喻,近年来,我们都知道很多学java的朋友,在java的基础上开始学习以hadoop为首的大数据方向的语言,本文我就来分析一下为什么越来越多的java工程师开始转向hadoop?
Hadoop是Apache软件基金会的顶级开源项目,是由原雅虎公司Doug Cutting根据Google发布的学术论文而创建的开源项目。Doug Cutting被称为Hadoop之父,他打造了目前在云计算和大数据领域里如日中天的Hadoop。
Hadoop的发音是[hdu:p],Hadoop 这个名字不是一个缩写,而是一个虚构的名字。Doug Cutting解释Hadoop的得名:“这个名字是我孩子给一个棕黄色的大象玩具命名的。我的命名标准就是简短、容易发音和拼写,没有太多的意义,并且不会被用于别处,小孩子恰恰是这方面的高手”。
Apache Hadoop官方定义是:Hadoop项目是一套可靠的,可扩展的,支持分布式计算的开源软件。
过去1年多,笔者差不多跟近1000名学习hadoop的用户做过沟通,就他们为什么要从Java转向hadoop的原因进行交流,总结起来,主要有以下4点:
1、大数据职位发展空间大
Java这块如果做5~6年到管理岗位的话,薪资基本可以达到2万-2.5万了。但是2.5万基本上是Java技术人员的天花板,能上这个数的人很少,除非是架构师或者做底层的开发。但Hadoop这块2万多的薪资只能算一般,后面还有很大发展空间,所以很多有经验的Java老鸟在往这块转。
2、大数据不受年龄限制
年龄大对搞技术的来说是个比较大的问题,Java工程师满大街都是,年龄大了工资还好但精力跟不上年轻人,不能加班,有家有室也不能长期出差,会比较尴尬。Hadoop这块年龄影响比较小,因为搞大数据不是简单的编程,编程的份量连1/6都不到,很多时候需要你从服务器、存储、计算、运维等多个方面来分析问题解决问题,年龄越大经验越丰富,也越吃香。
目前有一大半学Hadoop的学员都有不错的Java基础,有的是工作2~3年发现工资一直在7k-12k这个位置徘徊,上不去,想突破一下;也有的是不想整天做业务系统开发,想去大互联网公司发展,待遇和氛围好一些;也有的是公司有些业务需要用到Hadoop,边学边做,碰到问题也能跟老师同学交流。
3、大数据岗位工资高
做Java的人已经比较多了,很多人工作4~5年月薪也难上2万,能上2.5万的更是寥寥。但Hadoop很多人只1年经验就拿2万以上了。所以很多现在待遇还不错的人也还来学Hadoop,主要也是考虑未来发展天花板的问题。
4、大数据是未来趋势
做Java也是不错的,不过目前大数据是个趋势。稍微有实力点的企业都在上大数据项目,而Hadoop本身又是Java开发的,再加上Hadoop工程师普遍比纯Java开发要高3k以上,所以有很多搞Java的都在往这hadoop大数据方向转。
5、大数据学习路线
- ?
JDBC向数据库批量插入数据
薇薇安
展开
JDBC向数据库批量插入数据
1.新建addBatchTest.java类
2.输入如下代码,这里使用PreparedStatement 来进行循环插入
3.执行结果:
4.数据库如下图,注意姓名是从_0开始的 到99正好100
5.修改上述代码为批量操作,注意是先积攒,然后一起执行并清空,当循环不能执行完毕的时候,需要在循环外再次执行一次
6.执行结果如下,之所以出现批量比不使用批量时间还长,两个原因,一是使用的MySql数据库对批量操作支持本身不是太好,二是数据量较小,只有100条,当上万上十万的时候,就体现出批量操作的好处了,换做Oracle数据库效果更明显
7.执行的结果
8.上述代码还有个问题,那就是批量本身就是一个事务操作,要么一起成功要么一起失败,所以需要启动事务
- ?
Java实现文件批量导入导出实例(兼容xls,xlsx)
小蜗牛
展开
1、介绍
java实现文件的导入导出数据库,目前在大部分系统中是比较常见的功能了,今天写个小demo来理解其原理,没接触过的同学也可以看看参考下。
目前我所接触过的导入导出技术主要有POI和iReport,poi主要作为一些数据批量导入数据库,iReport做报表导出。另外还有jxl类似poi的方式,不过貌似很久没跟新了,2007之后的office好像也不支持,这里就不说了。
2、POI使用详解
2.1 什么是Apache POI?
Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
2.2 POI的jar包导入
本次讲解使用maven工程,jar包版本使用poi-3.14和poi-ooxml-3.14。目前最新的版本是3.16。因为3.15以后相关api有更新,部分操作可能不一样,大家注意下。
2.3 POI的API讲解
2.3.1 结构
HSSF - 提供读写Microsoft Excel格式档案的功能。XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。HWPF - 提供读写Microsoft Word格式档案的功能。HSLF - 提供读写Microsoft PowerPoint格式档案的功能。HDGF - 提供读写Microsoft Visio格式档案的功能。
2.3.2 对象
本文主要介绍HSSF和XSSF两种组件,简单的讲HSSF用来操作Office 2007版本前excel.xls文件,XSSF用来操作Office 2007版本后的excel.xlsx文件,注意二者的后缀是不一样的。
HSSF在org.apache.poi.hssf.usermodel包中。它实现了Workbook 接口,用于Excel文件中的.xls格式
常用组件:HSSFWorkbook excel的文档对象HSSFSheet excel的表单HSSFRow excel的行HSSFCell excel的格子单元HSSFFont excel字体HSSFDataFormat 日期格式HSSFHeader sheet头HSSFFooter sheet尾(只有打印的时候才能看到效果)样式:HSSFCellStyle cell样式辅助操作包括:HSSFDateUtil 日期HSSFPrintSetup 打印HSSFErrorConstants 错误信息表
XSSF在org.apache.xssf.usemodel包,并实现Workbook接口,用于Excel文件中的.xlsx格式
常用组件:XSSFWorkbook excel的文档对象XSSFSheet excel的表单XSSFRow excel的行XSSFCell excel的格子单元XSSFFont excel字体XSSFDataFormat 日期格式和HSSF类似;
2.3.3 两个组件共同的字段类型描述
其实两个组件就是针对excel的两种格式,大部分的操作都是相同的。
2.3.4 操作步骤
以HSSF为例,XSSF操作相同。
首先,理解一下一个Excel的文件的组织形式,一个Excel文件对应于一个workbook(HSSFWorkbook),一个workbook可以有多个sheet(HSSFSheet)组成,一个sheet是由多个row(HSSFRow)组成,一个row是由多个cell(HSSFCell)组成。
3、代码操作
3.1 效果图
惯例,贴代码前先看效果图
Excel文件两种格式各一个:
代码结构:
导入后:(我导入了两遍,没做校验)
导出效果:
3.2 代码详解
这里我以Spring+SpringMVC+Mybatis为基础
Controller:
Service
3.3 导出文件api补充
大家可以看到上面service的代码只是最基本的导出。
在实际应用中导出的Excel文件往往需要阅读和打印的,这就需要对输出的Excel文档进行排版和样式的设置,主要操作有合并单元格、设置单元格样式、设置字体样式等。
3.3.1 单元格合并
使用HSSFSheet的addMergedRegion()方法
参数CellRangeAddress 表示合并的区域,构造方法如下:依次表示起始行,截至行,起始列, 截至列
3.3.2 设置单元格的行高和列宽
3.3.3 设置单元格样式
1、创建HSSFCellStyle
2、设置样式
3、将样式应用于单元格
3.3.4设置字体样式
1、创建HSSFFont对象(调用HSSFWorkbook 的createFont方法)
2、设置字体各种样式
3、将字体设置到单元格样式
大家可以看出用poi导出文件还是比较麻烦的,等下次在为大家介绍下irport的方法。
导出的api基本上就是这些,最后也希望上文对大家能有所帮助。
学习Java的同学注意了!!!学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群495273252,我们一起学Java!
- ?
后端开发:「批量插入海量数据之Java插入MySql」解决方案
喻裘
展开
Java向MySql数据库插入万级记录时,采用的方案不同时执行速度会有所不同,数据量越大则优劣越明显。所以选取最优方案尤其重要,本文目前提供如下两种解决方案(不借用第三方框架或工具)。
1、方案一:循环逐条插入。
关键代码:
2、方案二:分批事务插入。
1.两种方案的主要区别在于,sql语句的不同、batch批和事务的使用。
单条插入sql语句:insert into Table (col1,col2...) values (val11,val12...);
多条批插入sql语句:insert intoTable (col1,col2...) values (val11,val12...),(val11,val12...),...;
2.本次测试的实例中,插入69万条数据左右,方案二要比方案一的速度快上10倍左右。具体测试得到的具体毫秒数可能不同。影响因素个人认为有如下几条:
(1)数据模型,每条数据记录的字段越多,就需要调整itemNum(每批插入的数据量,可以采用二分法找到最合适的数值),或者调整MySql数据库对每次执行sql语句的字节长度限制(网上自行搜索)。itemNum值找到最合适的,速度才可能在其他条件同等的条件下是最快的;
(2)主机配置。包括处理器性能、硬盘性能 ,mysql数据库可能也会影响到速度;
java批量导入数据
-
1、只需3秒快速实现求和
-
2、如何快速填充序号
-
3、如何自动填充序号(公式法)
-
4、数据条的神奇应用
-
5、多文本快速合并
-
6、查找与替换的不同玩法
-
7、快速定位到指定区域
-
8、数据排序、工资条制作
-
9、快速筛选(模糊、精确筛选)
-
10、快速插入空行
-
11、快速删除空行
-
12.快速跳转到天涯海角
-
13、.同时查看两个Excel文件
-
14、用条件格式扮靓报表
-
15、一键插入Excel图表
-
16、批量处理行高、列宽
-
17、利用拆分功能查看数据
-
18、批量录入相同内容
-
19、工作表快速跳转
-
20、批量录入表格模板(精品课程)
-
21、Excel函数与公式的应用、公式循环引用的查找
-
22、IF函数单条件判断同比增长
-
23、用sum函数 格式相同,连续多表数据汇总
-
24、excel快捷键
-
25、VLOOKUP函数——根据销售员匹配销售额
-
26、统计各部门销售总额
-
27、统计指定条件个数
-
28、怎样输入当前日期和时间、星期数
-
29、销售业绩排名
-
30、Sumproduct函数-万能函数(销售额汇总求和)
-
31、根据销售员,地区,商品名称汇总
-
32、批量替换PPT字体
-
33、给销售额数据批量添加万元单位
-
34、一秒快速核对两列数据
-
35、快速定位到指定单元格或区域
-
36、快速制作双行标题工资条
-
37、给你的表格做个瘦身
-
38、快速打开常用的Excel文件
-
39、快速打开多个Excel文件
-
40、利用创建组—快速隐藏/展开多列数据
-
41、快速制作下拉菜单
-
42、复制粘贴表格,如何保留数据源列宽格式一致?
-
43、两列数据位置互换
-
44、1秒钟扮靓报表——如何实现表格隔行换色
-
45、快速删除重复记录——保留唯一值
-
46、快速向下填充、向右填充,文本或公式
-
47、给Excel文件添加密码
-
48、插入带图片的批注
-
49、输入公式后不计算?
-
50、如何设置单元格缩进
-
51、快速解决Excel表格总显示货币格式
-
52、批量添加万元单位
-
53、你会四舍五入么?
-
54、用RAND函数机选彩票
-
55、冻结首行你会么?
-
56、超链接的高级应用
-
57、IFERROR函数-屏蔽错误值
-
58、批量填充颜色
-
59、录入数据
-
60、快速输入工号
-
61、快速行列转置
-
62、自定义缩放界面
-
63、多个单元格同时输入
-
64、如何计算立方米?
-
65、快速制作双行标题工资条
-
66、输入带方框的√和×
-
67、快速将姓名对齐
-
68、快速输入性别
-
69、按单位职务排序
-
70、自动计算合同到期日期
-
71、计算时间间隔
-
72、日期和时间的拆分
-
73、快速处理不规范的日期格式
-
74、快速填充合并单元格
-
75、效率加倍的快捷键
-
76、快速复制表格和对象
-
77、快速创建工作表副本
-
78、快速复制序列号
-
79、快速显示公式
-
80、多个单元格同时输入
-
81、快速调整显示比例
-
82、快速自动填充
-
83、快速填充(Ctrl+E)
-
84、Ctrl与数字键结合
-
85、快速将多列数据整理为1列
-
86、快速将1列数据拆分为多列
-
87、快速定位公式
-
88、快速录入数据
-
89、快速累计求和
-
90、身份证号码显示为0怎么办?
-
91、快速制作斜线表头
-
92、文本竖向显示
-
93、神奇的监视窗口
-
94、不一样的格式刷
-
95、快速美化图表
-
96、快速生成当前日期
-
97、快速找出循环引用
-
98、快速提取信息
-
99、二维表快速转换为一维表
-
100、快速多表合并