• [开发应用] GaussDB 200当游标作为存储过程的返回值时,JAVA调用该存储过程,如何获取结果集?
        报错内容: Found multiple occurrences of org.json.JSONObject on the class path:jar:file:/D:/mvn_repository/org/json/json/20180813/json-20180813.jar!/org/json/JSONObject.classjar:file:/D:/mvn_repository/com/vaadin/external/google/android-json/0.0.20131108.vaadin1/android-json-0.0.20131108.vaadin1.jar!/org/json/JSONObject.classYou may wish to exclude one of them to ensure predictable runtime behavior2020-12-14 16:50:22,071 [main] DEBUG [com.huawei.it.finioc.dao.IFiniocGaussDao.finiocGaussFunNewTest] ==>  Preparing: {call DWRSALES.proc_test_lyt( ?, ?, ?, ?) } 2020-12-14 16:50:22,081 [main] DEBUG [com.huawei.it.finioc.dao.IFiniocGaussDao.finiocGaussFunNewTest] ==> Parameters: 1(String), 1(String), YYY(String)org.springframework.jdbc.BadSqlGrammarException: ### Error querying database.  Cause: com.huawei.gauss200.jdbc.util.PSQLException: A CallableStatement function was executed and the out parameter 1 was of type java.sql.Types=1111 however type java.sql.Types=-10 was registered.### The error may exist in file [D:\Idea\Jalor6\cnbgioc_develop\om.impl\target\classes\com\huawei\it\finioc\dao\IFiniocGaussDao.xml]### The error may involve com.huawei.it.finioc.dao.IFiniocGaussDao.finiocGaussFunNewTest-Inline### The error occurred while setting parameters### SQL: {call DWRSALES.proc_test_lyt(       ?,       ?,       ?,       ?)    }### Cause: com.huawei.gauss200.jdbc.util.PSQLException: A CallableStatement function was executed and the out parameter 1 was of type java.sql.Types=1111 however type java.sql.Types=-10 was registered.; bad SQL grammar []; nested exception is com.huawei.gauss200.jdbc.util.PSQLException: A CallableStatement function was executed and the out parameter 1 was of type java.sql.Types=1111 however type java.sql.Types=-10 was registered.at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:101)at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:74)at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440)at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:159)at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:87)at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:57)at com.huawei.it.finioc.dao.FiniocGaussDaoTest.finiocGaussFunNewTest(FiniocGaussDaoTest.java:50)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at java.lang.reflect.Method.invoke(Method.java:498)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at java.lang.reflect.Method.invoke(Method.java:498)at org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks.java:74)at org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:84)at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:251)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:220)at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:53)Caused by: com.huawei.gauss200.jdbc.util.PSQLException: A CallableStatement function was executed and the out parameter 1 was of type java.sql.Types=1111 however type java.sql.Types=-10 was registered.at com.huawei.gauss200.jdbc.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:473)at com.huawei.gauss200.jdbc.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:415)at org.apache.commons.dbcp2.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:94)at org.apache.commons.dbcp2.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:94)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at java.lang.reflect.Method.invoke(Method.java:498)at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59)at org.apache.ibatis.executor.statement.CallableStatementHandler.query(CallableStatementHandler.java:68)at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63)at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:324)at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:83)at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147)at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:76)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at java.lang.reflect.Method.invoke(Method.java:498)at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:426)... 22 moreDisconnected from the target VM, address: '127.0.0.1:49938', transport: 'socket'Process finished with exit code -1  
  • [技术干货] java实现文件上传功能(下)
    public ServletFileUpload getServletFileUpload(DiskFileItemFactory factory) { ServletFileUpload upload = new ServletFileUpload(factory); //监听文件上传进度 upload.setProgressListener(new ProgressListener() {  @Override  public void update(long uploaded, long totalSize, int i) {  System.out.println("已上传:"+(uploaded*100)/totalSize+"%");  } }); upload.setHeaderEncoding("UTF-8");//乱码处理 upload.setFileSizeMax(1024 * 1024 * 10);//设置单个文件的最大值10M upload.setSizeMax(1024 * 1024 * 100);//设置总共能上传文件的最大值100M return upload; }  public String uploadParseRequest(ServletFileUpload upload, HttpServletRequest req, String uploadPath) throws FileUploadException, IOException { String msg = ""; //把前端请求解析,封装成一个List对象 List<FileItem> fileItems = upload.parseRequest(req); for (FileItem fileItem : fileItems) {  if (fileItem.isFormField()) {//判断上传的文件是普通的表单还是带文件的表单  String name = fileItem.getName();//前端表单控件的name:username  String value = fileItem.getString("UTF-8");//乱码处理  System.out.println(name + ":" + value);  } else {//判断为上传的文件  //==================处理文件=====================  String uploadFileName = fileItem.getName();//前端表单控件的name  System.out.println("上传的文件名:" + uploadFileName);  if (uploadFileName.trim().equals("") || uploadFileName == null) {//可能存在不合法的情况   continue;  }  String fileName = uploadFileName.substring(uploadFileName.lastIndexOf("/") + 1);//文件名  String fileExtName = uploadFileName.substring(uploadFileName.lastIndexOf(".") + 1);//文件后缀名  System.out.println("文件名:" + fileName + "--文件后缀:" + fileExtName);  //==================存放地址==================  String uuidPath = UUID.randomUUID().toString();  //文件存储的真实路径  String realPath = uploadPath + "/" + uuidPath;  System.out.println("文件上传到的位置:"+realPath);  //给每个文件创建一个文件夹  File realPathFile = new File(realPath);  if (!realPathFile.exists()) {//如果文件夹不存在,则创建一个   realPathFile.mkdir();  }  //==================文件传输==================  //获得文件上传的流  InputStream inputStream = fileItem.getInputStream();  //创建一个文件输出流  FileOutputStream fileOutputStream = new FileOutputStream(realPath + "/" + fileName);  //创建一个缓冲区  byte[] buffer = new byte[1024 * 1024];  //判断读取是否完毕  int len = 0;  while ((len = inputStream.read(buffer)) > 0) {   fileOutputStream.write(buffer, 0, len);  }  //关闭流  fileOutputStream.close();  inputStream.close();  msg = "上传成功";  fileItem.delete();//上传成功,清除临时文件  } } return msg;}文件上传的注意事项1、为保证服务器安全,上传的文件应该放在外界无法直接访问的目录下,例如放在WEB-INF目录下。2、为了防止文件覆盖的现象,要为上传的文件产生一个唯一的文件名(可以为每一个上传的文件增加一个uuid或时间戳为名的文件夹)3、限制上传文件的最大值4、限制上传文件的类型,在收到上传文件时,判断其后缀名是否合法,是否为自己限制的类型
  • [技术干货] java实现文件上传功能(上)
    本文实例为大家分享了java实现文件上传的具体代码,供大家参考,具体内容如下一、文件上传准备工作对于文件上传,浏览器在上传的过程中将文件以流的形式提交到服务器。可以选择apache的commons-fileupload包作为文件上传组件,commons-fileupload包依赖于commons-io包。可以在Maven导入该commons-fileupload包,Maven会帮我们导入依赖的jar包commons-io。12345<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.3</version></dependency>二、文件上传的主要步骤创建diskFileItemFactory对象,处理文件上传路径或者大小限制通过diskFileItemFactory对象作为ServletFileUpload类的参数,创建ServletFileUpload对象处理上传的文件三、代码实现在文件上传时,表单一定要加enctype=“multipart/form-data” 。只有使用enctype=“multipart/form-data”,表单才会把文件的内容编码到HTML请求中。默认enctype=“application/x-www-form-urlencoded”,表单的内容会按URL规则编码。而enctype="multipart/form-data"不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。method也一定要使用post请求。123456<form action="/file.do" enctype="multipart/form-data" method="post"> <p>上传用户:<input type="text" name="username"></p> <p><input type="file" name="file1"></p> <p><input type="file" name="file2"></p> <p><input type="submit">|<input type="reset"></p></form>123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //判断上传的是普通表单还是带文件的表单 if (!ServletFileUpload.isMultipartContent(req)) {  return; } //创建上传文件保存的地址,一般创建在WEB-INF目录下,用户无法直接访问该目录下的文件 String uploadPath = this.getServletContext().getRealPath("/WEB-INF/upload"); File uploadFile = new File(uploadPath); //如果文件夹不存在,则创建一个 if (!uploadFile.exists()) {  uploadFile.mkdir(); }  //创建上传大文件的临时地址,一般几天后自动删除,用户可以手动删除或者转为永久文件 // 一般创建在WEB-INF目录下,用户无法直接访问该目录下的文件 String tempPath = this.getServletContext().getRealPath("/WEB-INF/temp"); File tempFile = new File(tempPath); //如果文件夹不存在,则创建一个 if (!tempFile.exists()) {  tempFile.mkdir(); }  //1.创建diskFileItemFactory对象,处理文件上传路径或者大小限制 DiskFileItemFactory factory = getDiskFileItemFactory(tempFile);  //2.获取ServletFileUpload ServletFileUpload upload = getServletFileUpload(factory);  //3.处理上传的文件 try {  String msg = uploadParseRequest(upload, req, uploadPath);  //转发  req.setAttribute("msg",msg);  req.getRequestDispatcher("info.jsp").forward(req, resp); } catch (FileUploadException e) {  e.printStackTrace(); } }   public DiskFileItemFactory getDiskFileItemFactory(File file) { DiskFileItemFactory factory = new DiskFileItemFactory(); //创建一个缓存区,当上传文件大于设置的缓存区时,将该文件放到临时目录 factory.setSizeThreshold(1024 * 1024);//缓存区大小为1M factory.setRepository(file);//临时目录 return factory; }
  • [技术干货] 2020-12-12:现场写代码,把CPU打满,java和go都行,并解释为什么。
    2020-12-12:现场写代码,把CPU打满,java和go都行,并解释为什么。#福大大架构师每日一题#
  • [技术干货] 使用Shell脚本如何启动/停止Java的jar程序
    启动脚本:start_upload.sh123#!/bin/shnohup java -jar UploadSchedule.jar >> /usr/local/tomcat9/webapps/upload-to-oss/nohup_upload.out 2>&1 &echo $! > /var/run/UploadSchedule.pid 启动脚本说明:1、开启后台执行,并将程序产生的日志文件写入out文件;2、将当前进程id写入/var/run/UploadSchedule.pid,以供在停止脚本中使用此pid来停止当前进程。停止脚本:stop_upload.sh123#!/bin/shPID=$(cat /var/run/UploadSchedule.pid)kill -9 $PID 停止脚本说明:1、首先获取进程id;2、然后杀掉该进程。文件切分:split_nohup.sh程序不中断,一直在后台运行,那么产生的log也会持续输出到out问价,导致out文件越来越大。当需要根据out文件进行一些日志查找的时候,非常不方便。所以定期对out文件进行切分,按日期将当日out文件切分成若干小文件,从而方便处理及错误查找定位。12345678910#!/bin/bashlog_path=/usr/local/tomcat9/webapps/upload-to-oss if [ -f "$log_path/nohup_upload.out" ];thencurrent_date=`date -d "-1 day" "+%Y%m%d"`cp $log_path/nohup_upload.out $log_path/nohup_upload_${current_date}.outcat /dev/null > $log_path/nohup_upload.outsplit -b 5242880 -d -a 4 $log_path/nohup_upload_${current_date}.out $log_path/nohup_upload_${current_date}_rm -rf $log_path/nohup_upload_${current_date}.outfi切分脚本说明:1、如果out文件存在,将nohup_upload.out文件复制一份,命名为nohup_upload_当前日期(比如nohup_upload_20200328.out);2、将nohup_upload.out文件清空;3、对nohup_upload_20200328.out文件进行切分,切分后的文件命名格式为nohup_upload_20200328_0001,nohup_upload_20200328_0002;-b 指定每个小文件的大小(单位byte)-d 以数字作为后缀-a 指定后缀的长度4、将原文件(nohup_upload_20200328.out)删除。执行开启/停止命令12345# 启动./start_upload.sh # 停止./stop_upload.sh一些后台运行的小知识&和nohup区别:&的意思是在后台运行。意思是说, 当你在执行 ./start_upload.sh & 的时候, 即使你用Ctrl + C, 那么start_upload.sh照样运行(因为对SIGINT信号免疫)。 但是要注意, 如果你直接关掉Shell后, 那么, start_upload.sh进程同样消失。 因为对SIGHUP信号不免疫。nohup的意思是忽略SIGHUP信号, 所以当运行nohup ./start_upload.sh的时候, 关闭Shell,start_upload.sh进程还是存在的(对SIGHUP信号免疫)。 但是如果你直接在Shell中用Ctrl + C, 那么,start_upload.sh进程也是会消失的(因为对SIGINT信号不免疫)所以,要让进程真正不受Shell中Ctrl + C和Shell关闭的影响, 就用nohup和&同时用。
  • [技术干货] java中分段上传,设置整个文件的MD5是不检验的,只有检验分段的MD5值
    分段上传时设置初始化的MD5值,最后合并段时并不会检验MD5值。分段上传过程中只能设置分段的MD5值,能否设置整个的MD5值保证合并段后检验呢。或者有什么接口能获取已上传文件的MD5值。
  • [调优工具] 性能分析工具进行java性能分析时,部署Guardian失败
    成功安装性能分析工具后,无法安装Guardian:部署Guardian失败,在目标主机中执行部署脚本失败。
  • [对接入门] 【应用】如何制作lxc容器使用的java应用
    前提:您已经仔细阅读过软件二次开发指南,并且在本地有环境可以进行操作第一步:举例,将一个helloword打包成一个jar包,此步骤比较简单,不附截图第二步,修改制作应用的脚本内容,如build_appHelloWorld.sh,参考内容如下:注意点package字段,Architecture字段如果是64位的则填写arm64第三步:修改service文件,详细内容如下:图中选中部分java需要使用绝对路径(/xxx/xxx/java),或者需要在service里面设置environment第四步:执行脚本制作应用第五步:启动服务器上的docker第六步:生成ova文件第七步:在设备上安装ova应用并验证jar包正常运行容器内查看应用已经运行原创文章,转载请标明出处
  • [技术干货] 2020-12-01:java中,什么是安全点和安全区域?
    2020-12-01:java中,什么是安全点和安全区域?#福大大架构师每日一题#
  • [热门活动] 【开发者福利季】求职训练营 · Java实践排位赛
    【大赛简介】华为云求职训练营·Java实践排位赛是华为公司面向全国大学生及个人开发者举办的大型入门学习赛,帮助大家快速掌握企业及Java编程规范的要求,更好地完成学生向开发者,初级开发者向高级开发者的转变。【大赛时间】2020年9月8日09:00 ~ 2021年9月30日12:00【招募对象】高校在校大学生、个人开发爱好者(原则上要求参赛者年满18周岁)。【参与要求】以个人形式报名参加。为了大家更好地完成赛题作业,大赛设置求职训练营课程,帮助大家快速上手企业级Java编程规范。加入求职训练营,完成赛题作业!【加入训练营你将获得】1. 小白学生升级为职业开发者了解企业内部对Java编程规范的要求2. 具备入职名企的能力具备考取华为微认证的能力,考取华为企业级Java编程规范微认证3. 轻松学习快速掌握知识趣味课堂+课后作业,专家全程QQ群答疑指导【加入训练营你需要完成】 本次训练营三步走:1.点击左上角报名训练营;2.听课;3.完成26个作业。【如何参加训练营】1.报名:点击Java实践排位赛报名,或扫描下方二维码完成报名。2. 上课:点击右边链接进入课堂学习>>>企业级Java编程规范该环节课程共33节课,26个作业,每个作业题100分,总分值为2600,学习课程并完成实践作业。3.做作业:进入训练营入口,登录华为云账户,点击“作业”完成并提交。答题前建议大家先学习课程内容。注意:作业在答题截止时间前可多次提交(最多5次),系统计分以最后一次答题成绩为准。【参加大赛,享三大福利】一、官方Q群,交流学习更深入大赛交流答疑请务必加入QQ群,群里会不定时公布赛事重要信息、获奖名单、培训信息等内容。* 社群4大服务,等你解锁1. 专家答疑——作业遇难题,群内直接问专家2.班助服务——赛事答疑、作业提醒,学习每天有动力3.信息提醒——赛事信息、获奖名单信息提前知4.线上交流——同学线上交流,共同破解难题二、报名入群专享,内部公开课免费学报名并加入官方QQ群,立刻领取内部公开课三、学习奖励,知识奖品双丰收大赛设置三大奖项,完成任务,学习同时万元奖品等你拿。*{ 学霸奖 },数量有限,先到先得。参与方式及具体规则请见帖子>>>学霸奖*{ 学习激励奖 },数量有限,先到先得。参与方式及具体规则请见帖子>>>学习激励奖*{ 心得分享幸运奖 },数量有限,先到先得。参与方式及具体规则请见帖子>>>心得分享幸运奖
  • [技术干货] 2020-11-30:java中,卡表和记忆集的区别?
    2020-11-30:java中,卡表和记忆集的区别?#福大大架构师每日一题#
  • [赋能学习] MRS3.0.2版本 二次开发(21/27): 使用java命令提交spark任务样例
    # 视频在本帖二楼 ## 一、Spark简介 Spark是分布式批处理框架,提供分析挖掘与迭代式内存计算能力,支持多种语言(Scala/Java/Python)的应用开发。 适用以下场景: - 数据处理(Data Processing):可以用来快速处理数据,兼具容错性和可扩展性。 - 迭代计算(Iterative Computation):支持迭代计算,有效应对多步的数据处理逻辑。 - 数据挖掘(Data Mining):在海量数据基础上进行复杂的挖掘分析,可支持各种数据挖掘和机器学习算法。 - 流式处理(Streaming Processing):支持秒级延迟的流式处理,可支持多种外部数据源。 - 查询分析(Query Analysis):支持标准SQL查询分析,同时提供DSL(DataFrame), 并支持多种外部输入。 ## 二、样例背景 假定用户有某个周末网民网购停留时间的日志文本,基于某些业务要求,要求开发Spark应用程序实现如下功能: 1.统计日志文件中本周末网购停留总时间超过2个小时的女性网民信息。 2.周末两天的日志文件第一列为姓名,第二列为性别,第三列为本次停留时间,单位为分钟,分隔符为“,” log1.txt:周六网民停留日志 LiuYang,female,20 YuanJing,male,10 GuoYijun,male,5 CaiXuyu,female,50 Liyuan,male,20 FangBo,female,50 LiuYang,female,20 YuanJing,male,10 GuoYijun,male,50 CaiXuyu,female,50 FangBo,female,60 log2.txt:周日网民停留日志 LiuYang,female,20 YuanJing,male,10 CaiXuyu,female,50 FangBo,female,50 GuoYijun,male,5 CaiXuyu,female,50 Liyuan,male,20 CaiXuyu,female,50 FangBo,female,50 LiuYang,female,20 YuanJing,male,10 FangBo,female,50 GuoYijun,male,50 CaiXuyu,female,50 FangBo,female,60 ## 三、样例调试 1. 数据规划,前提:Linux环境有安装集群客户端,环境准备,参考第一课 本地新建两个文本文件input_data1.txt和input_data2.txt,将log1.txt中的内容复制保存到input_data1.txt,将log2.txt中的内容复制保存到input_data2.txt。 在HDFS客户端路径下建立一个文件夹,例如“/tmp/input”,并上传input_data1.txt,input_data2.txt到此目录,指令如下: 在HDFS客户端,执行如下命令获取安全认证,以下路径以实际hadoop客户端安装路径为准 cd /opt/hadoopclient kinit 用于认证的业务用户> 在Linux系统HDFS客户端使用命令hadoop fs -mkdir /tmp/input(hdfs dfs命令有同样的作用),创建对应目录。 进入到HDFS客户端下的“/tmp/input”目录,在Linux系统HDFS客户端使用命令hadoop fs -put input_data1.txt /tmp/input和hadoop fs -put input_data2.txt /tmp/input,上传数据文件。 2. 比对“本地时间和Linux机器时间”与集群时间误都不能超过5分钟 3. 检查linux环境的JDK版本为1.8 4. 配置linux环境的/etc/hosts文件 5. 检查 C:\Windows\System32\drivers\etc\hosts文件中是否包含所有集群节点的域名IP映射信息 6. 在IDEA打开样例代码的SparkJavaExample目录,检查SDK配置 7. 默认自动加载依赖,如未加载,则打开后选中pom.xml文件,右键点击“Add As Maven Project”后等待项目自动将依赖下载完毕 8. 在Linux环境新建目录,例如“/opt/sparktest” 9. 从Manager界面下载用户认证凭据后,解压缩获取秘钥文件user.keytab和krb5.conf,将这两个文件放到Linux环境新建的目录中例如“/opt/sparktest” 10. 修改src\main\java\com\huawei\bigdata\spark\examples\FemaleInfoCollection.java类中userPrincipal参数修改为实际用户名,userKeytabPath参数修改为user.keytab文件在linux环境的目录“/opt/sparktest/user.keytab”,krb5ConfPath参数修改为krb5.conf文件在linux环境的目录“/opt/sparktest/krb5.conf” 11. 在IDEA主页面,选择“View->Tool Windows->Maven”打开“Maven”工具窗口。 12. 在Maven工具窗口,选择clean生命周期,执行Maven构建过程。 13. 在Maven工具窗口,选择package生命周期,执行Maven构建过程。 14. 从IDEA项目目录下的target文件夹中获取到Jar包,拷贝到Spark运行环境下(即Spark客户端),如“/opt/sparktest”。 15. 进入Spark客户端目录,调用bin/spark-submit脚本运行代码,运行命令如下 ``` bin/spark-submit --class com.huawei.bigdata.spark.examples.FemaleInfoCollection --master yarn --deploy-mode client /opt/female/FemaleInfoCollection-1.0.jar <input path> ``` 其中input path,指HDFS文件系统中input的路径。 ## 四、问题互动渠道 FusonInsight 论坛入口 https://bbs.huaweicloud.com/forum/forum-1103-1.html
  • [技术干货] 2020-11-21:java中,什么是跨代引用?
    2020-11-21:java中,什么是跨代引用?#福大大#
  • [技术干货] Java 如何实现一个http服务器
    在Java中可以使用HttpServer类来实现Http服务器,该类位于com.sun.net包下(rt.jar)。实现代码如下:主程序类12345678910111213141516171819202122package bg.httpserver; import com.sun.net.httpserver.HttpServer;import java.io.IOException;import java.net.InetSocketAddress;import java.util.concurrent.Executors; public class HttpServerStarter {  public static void main(String[] args) throws IOException {    //创建一个HttpServer实例,并绑定到指定的IP地址和端口号    HttpServer httpServer = HttpServer.create(new InetSocketAddress(8080), 0);     //创建一个HttpContext,将路径为/myserver请求映射到MyHttpHandler处理器    httpServer.createContext("/myserver", new MyHttpHandler());     //设置服务器的线程池对象    httpServer.setExecutor(Executors.newFixedThreadPool(10));     //启动服务器    httpServer.start();  }}HttpServer:HttpServer主要是通过带参的create方法来创建,第一个参数InetSocketAddress表示绑定的ip地址和端口号。第二个参数为int类型,表示允许排队的最大TCP连接数,如果该值小于或等于零,则使用系统默认值。createContext:可以调用多次,表示将指定的url路径绑定到指定的HttpHandler处理器对象上,服务器接收到的所有路径请求都将通过调用给定的处理程序对象来处理。setExecutor:设置服务器的线程池对象,不设置或者设为null则表示使用start方法创建的线程。HttpHandler实现123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596package bg.httpserver; import com.sun.net.httpserver.Headers;import com.sun.net.httpserver.HttpExchange;import com.sun.net.httpserver.HttpHandler;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.OutputStream;import java.util.List;import java.util.Map;import java.util.stream.Collectors; /** * 处理/myserver路径请求的处理器类 */public class MyHttpHandler implements HttpHandler {  @Override  public void handle(HttpExchange httpExchange) {    try {      StringBuilder responseText = new StringBuilder();      responseText.append("请求方法:").append(httpExchange.getRequestMethod()).append("<br/>");      responseText.append("请求参数:").append(getRequestParam(httpExchange)).append("<br/>");      responseText.append("请求头:<br/>").append(getRequestHeader(httpExchange));      handleResponse(httpExchange, responseText.toString());    } catch (Exception ex) {      ex.printStackTrace();    }  }   /**   * 获取请求头   * @param httpExchange   * @return   */  private String getRequestHeader(HttpExchange httpExchange) {    Headers headers = httpExchange.getRequestHeaders();    return headers.entrySet().stream()                .map((Map.Entry<String, List<String>> entry) -> entry.getKey() + ":" + entry.getValue().toString())                .collect(Collectors.joining("<br/>"));  }   /**   * 获取请求参数   * @param httpExchange   * @return   * @throws Exception   */  private String getRequestParam(HttpExchange httpExchange) throws Exception {    String paramStr = "";     if (httpExchange.getRequestMethod().equals("GET")) {      //GET请求读queryString      paramStr = httpExchange.getRequestURI().getQuery();    } else {      //非GET请求读请求体      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(httpExchange.getRequestBody(), "utf-8"));      StringBuilder requestBodyContent = new StringBuilder();      String line = null;      while ((line = bufferedReader.readLine()) != null) {        requestBodyContent.append(line);      }      paramStr = requestBodyContent.toString();    }     return paramStr;  }   /**   * 处理响应   * @param httpExchange   * @param responsetext   * @throws Exception   */  private void handleResponse(HttpExchange httpExchange, String responsetext) throws Exception {    //生成html    StringBuilder responseContent = new StringBuilder();    responseContent.append("<html>")        .append("<body>")        .append(responsetext)        .append("</body>")        .append("</html>");    String responseContentStr = responseContent.toString();    byte[] responseContentByte = responseContentStr.getBytes("utf-8");     //设置响应头,必须在sendResponseHeaders方法之前设置!    httpExchange.getResponseHeaders().add("Content-Type:", "text/html;charset=utf-8");     //设置响应码和响应体长度,必须在getResponseBody方法之前调用!    httpExchange.sendResponseHeaders(200, responseContentByte.length);     OutputStream out = httpExchange.getResponseBody();    out.write(responseContentByte);    out.flush();    out.close();  }}运行HttpServerStarter,在浏览器中访问如下:
  • [技术干货] 2020-11-20:java中,听说过CMS的并发预处理和并发可中断预处理吗?
    2020-11-20:java中,听说过CMS的并发预处理和并发可中断预处理吗?#福大大#
总条数:2294 到第 页
上滑加载中