首页 文章 精选 留言 我的

精选列表

搜索[过拟合],共10002篇文章
优秀的个人博客,低调大师

Agent渡劫48关-第41关-怎么判断模型已经过拟合了?

我是老李,负责一套多租户全球智能客服 Agent 平台。平台同时服务几十家企业,每家企业下面又有多个项目,入口覆盖 IM、电话、邮件和企业数字人,背后连着 CRM、订单、支付、物流、工单和知识库。Agent Runtime 收到一条用户消息,第一件事是判断这句话想干什么、属于哪个租户域,再决定调哪个 Tool、召回哪个知识库、走不走人工兜底。

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

Flink 1.4.2 版本踩过的坑

0x1 摘要 最近业务要实时统计半小时维度的UV、PV数据,经过调研准备用Flink时间窗来实现,主要是Flink对eventTime的支持,可以做到更精准的统计,由于第一次尝试使用Flink,所以过程中遇到不少问题,记录下来方便后续查阅。 0x2 执行计划输出JSON问题 Flink对执行计划分析提供了支持,可以通过代码将执行计划打出来,并利用官网提供的图生成工具可以方便分析,通过env.getExecutionPlan()方法可以获取JSON格式的执行计划,将JSON字符串拷贝到http://flink.apache.org/visualizer/网站文本框就可以查看。但我们在项目中调用env.getExecutionPlan()方法后报以下异常信息: Caused by: java.lang.IllegalArgumentException: Comparison method violates its general contract! at java.util.TimSort.mergeLo(TimSort.java:777) at java.util.TimSort.mergeAt(TimSort.java:514) at java.util.TimSort.mergeForceCollapse(TimSort.java:457) at java.util.TimSort.sort(TimSort.java:254) at java.util.Arrays.sort(Arrays.java:1512) at java.util.ArrayList.sort(ArrayList.java:1454) at java.util.Collections.sort(Collections.java:175) at org.apache.flink.streaming.api.graph.JSONGenerator.getJSON(JSONGenerator.java:61) at org.apache.flink.streaming.api.graph.StreamGraph.getStreamingPlanAsJSON(StreamGraph.java:663) ... 2 more 通过异常信息可以知道问题发生在TimSort排序算法,意思就是比较方法违反约束,具体约束规范大家可以自行网上查阅:自反性、传递性、对称性。我们来看一下Flink的源码,只要看JSONGenerator类61行就可以: public String getJSON() throws JSONException { JSONObject json = new JSONObject(); JSONArray nodes = new JSONArray(); json.put("nodes", nodes); List<Integer> operatorIDs = new ArrayList<Integer>(streamGraph.getVertexIDs()); Collections.sort(operatorIDs, new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { // put sinks at the back if (streamGraph.getSinkIDs().contains(o1)) { return 1; } else if (streamGraph.getSinkIDs().contains(o2)) { return -1; } else { return o1 - o2; } } }); visit(nodes, operatorIDs, new HashMap<Integer, Integer>()); return json.toString(); } 从源码可以看在对操作ID做排序时Flink自己实现compare方法,具体这个方法的实际意义不是很明白,有明白的赐教一下。后来通过网上查阅已经有人提过此issues,地址:https://issues.apache.org/jira/browse/FLINK-8498,但状态是关闭的,也没有回复什么时候解决,但我们通过查看Flink GitHub源码发现,此处实现已经发生变更,源码地址https://github.com/apache/flink/blob/master/flink-streaming-java/src/main/java/org/apache/flink/streaming/api/graph/JSONGenerator.java新实现源码: public String getJSON() { ObjectNode json = mapper.createObjectNode(); ArrayNode nodes = mapper.createArrayNode(); json.put("nodes", nodes); List<Integer> operatorIDs = new ArrayList<Integer>(streamGraph.getVertexIDs()); Collections.sort(operatorIDs, new Comparator<Integer>() { @Override public int compare(Integer idOne, Integer idTwo) { boolean isIdOneSinkId = streamGraph.getSinkIDs().contains(idOne); boolean isIdTwoSinkId = streamGraph.getSinkIDs().contains(idTwo); // put sinks at the back if (isIdOneSinkId == isIdTwoSinkId) { return idOne.compareTo(idTwo); } else if (isIdOneSinkId) { return 1; } else { return -1; } } }); visit(nodes, operatorIDs, new HashMap<Integer, Integer>()); return json.toString(); } 我猜测是因为违反了自反性导致的错误,那这个问题怎么解决呢?有两种方案: 方案一:去掉env.getExecutionPlan()不打印执行计划 方案二:设置JVM参数-Djava.util.Arrays.useLegacyMergeSort=true 0x3 不能连续split问题 场景描述,直接看拓扑图:希望达到上图的流拆分,但我开开心心把代码写后发布线上运行没有任何异常,等到验证数据时才发现最终统计数据不准A-1和A-2的结果都是一样的,issues地址:https://issues.apache.org/jira/browse/FLINK-5031 0x4 不能先process操作再split 在发现不能连续split后,只能想其他办法,将拓扑图改为:改为此方案后,线下运行直接报错,异常信息: Exception in thread "main" java.lang.NullPointerException at org.apache.flink.streaming.api.graph.StreamGraph.addOutputSelector(StreamGraph.java:444) at org.apache.flink.streaming.api.graph.StreamGraphGenerator.transformSplit(StreamGraphGenerator.java:267) at org.apache.flink.streaming.api.graph.StreamGraphGenerator.transform(StreamGraphGenerator.java:176) at org.apache.flink.streaming.api.graph.StreamGraphGenerator.transformSelect(StreamGraphGenerator.java:282) at org.apache.flink.streaming.api.graph.StreamGraphGenerator.transform(StreamGraphGenerator.java:178) at org.apache.flink.streaming.api.graph.StreamGraphGenerator.transformPartition(StreamGraphGenerator.java:241) at org.apache.flink.streaming.api.graph.StreamGraphGenerator.transform(StreamGraphGenerator.java:184) at org.apache.flink.streaming.api.graph.StreamGraphGenerator.transformOneInputTransform(StreamGraphGenerator.java:527) at org.apache.flink.streaming.api.graph.StreamGraphGenerator.transform(StreamGraphGenerator.java:166) at org.apache.flink.streaming.api.graph.StreamGraphGenerator.generateInternal(StreamGraphGenerator.java:132) at org.apache.flink.streaming.api.graph.StreamGraphGenerator.generate(StreamGraphGenerator.java:124) at org.apache.flink.streaming.api.environment.StreamExecutionEnvironment.getStreamGraph(StreamExecutionEnvironment.java:1528) at org.apache.flink.streaming.api.environment.StreamExecutionEnvironment.getExecutionPlan(StreamExecutionEnvironment.java:1540) ... 2 more 网上查阅发现存在issues,地址:https://issues.apache.org/jira/browse/FLINK-9141最终改为先split再process方法搞定,拓扑图如下:

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

HBase踩过的坑——持续更新

1.HBase数据热点问题 问题描述: 在某一个时刻,电池数据表的以某些规则开头的数据,比如M12******,这些电池一直在上报数据,由于HBase的存储是按照字典顺序排序的,所有某一时刻,相似规则的数据落在了同一个region上,造成了数据热点。 解决方法: 我们采取的是rowkey散列+预分区的方式:http://student-lp.iteye.com/blog/2309075 在建表的时候,按照字典顺序,随机生成一批startkey和endkey的集合,这些集合按照字典顺序排列,写入数据的时候,将要写入的【key_时间戳】前面加上哈希前缀,形成【三位哈希值_key_时间戳】方式,将写入数据的压力分散开。 2.HBase插入数据过慢问题 问题描述: 历史数据的消费过程,就是把数据写入HBase的过程,但是写入HBase过慢,容易造成消费不过来,产生数据堆积,由于数据堆积,会影响Kafka拉取数据消费发送心跳的超时。 解决方法: 1, HBase写操作尽量采用批量写入操作; 2, 禁用预写日志:put.setDurability(Durability.SKIP_WAL);//禁用hbase的预写日志功能(但是禁用预写日志的方式不够安全) 3, 禁止autoflush:table.setAutoFlushTo(false); 并配置write buff: <property> <name>hbase.client.write.buffer</name> <value>5000000</value> </property> 4,消费过程采用线程池写入:最开始用的可回收线程池,但是观察GC发现,FGC太多,而且数据量大了,CUP占用过高,最后还是采用固定的数目的线程池,多开几个客户端进行消费; 3.HBase分区过多问题 问题描述: 采用了固定线程池持续运行一段时间之后,观察GC发现: 导出对内存情况观察: 发现有写对象在持续增长,后来观察写入HBase的监控,发现Hbase每秒写入数据操作在0.001次这样子,通过对象分析,发现线程池在执行任务时候,会有个LinkedBlockingQueue的队列,由于HBase写入阻塞,导致队列持续递增,FGC持续进行,判断问题处在了HBase上面。 观察HBase目前配置:memstore:256M,hbase.hregion.max.filesize:10G (一个region最多管理10G的HFile),当写入的数据总量超过一定数量(1T)时,写入速度变慢。写入方式rowkey前加hash。 能源站对表预建了20个Region,随着数据量膨胀分裂到了160个 由于写入方式是完全随机写入到各个region中,因为region数量过多,大量时间浪费在等待region释放资源,获取region连接,释放连接。。 车联网的某些表虽然也有100多个region。但是由于写入的数据不是完全随机的,所以每次都是client只连接一个region去写,所以压测时没出现此问题。 解决方案: 禁用表的自动分期策略,如果日后有需要,手动分区。 alter'batteryData',{METADATA=>{'SPLIT_POLICY'=>'org.apache.hadoop.hbase.regionserver.DisabledRegionSplitPolicy'}},{NAME=> 't'}

资源下载

更多资源
Mario

Mario

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

腾讯云软件源

腾讯云软件源

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

Spring

Spring

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

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册