首页 文章 精选 留言 我的

精选列表

搜索[二次开发],共2353篇文章
优秀的个人博客,低调大师

借hbase-rdd二次开发谈如何在Spark Core之上扩建自己的模块

hbase-rdd是一个构建在SparkContext基础之上的用于对Hbase进行增删改查的第三方开源模块,目前最新版本为0.7.1。目前该rdd在操作hbase时,默认调用隐式方法。 implicitdefstringToBytes(s:String):Array[Byte]={ Bytes.toBytes(s) } 将RDD的key转换成字节b,然后调用Hbase的put(b)方法保存rowkey,之后将RDD的每一行存入hbase。 在轨迹图绘制项目数据计算中,我们考虑到hbase的rowkey的设计——尽量减少rowkey存储的开销。虽然hbase-rdd最终的rowkey默认都是采用字节数组,但这个地方我们希望按自己的方式组装rowkey。使用MD5(imei)+dateTime组成的字节数组作为rowkey。因此默认的hbase-rdd提供的方法是不满足我们存储需求的,需要对源代码进行修改。在toHbase方法中,有一个convert方法,该方法将对RDD中的每一行数据进行转化,使用RDD中的key生成Put(Bytes.toBytes(key))对象,该对象为之后存储Hbase提供rowkey。 在convert函数中,对其实现进行了改造,hbase-rdd默认使用stringToBytes隐式函数将RDD的String类型的key转换成字节数组,这里我们需要改造,不使stringToBytes隐式方法,而是直接生成字节数据。 protecteddefconvert(id:String,values:Map[String,Map[String,A]],put:PutAdder[A])={ valstrs=id.split(",") valimei=strs{0} valdateTime=strs{1} valb1=MD5Utils.computeMD5Hash(imei.getBytes()) valb2=Bytes.toBytes(dateTime.toLong) valkey=b1.++(b2) valp=newPut(key)//改造 varempty=true for{ (family,content)<-values (key,value)<-content }{ empty=false if(StrUtils.isNotEmpty(family)&&StrUtils.isNotEmpty(key)){ put(p,family,key,value) } } if(empty)NoneelseSome(newImmutableBytesWritable,p) } 这样就实现了使用自己的方式构建rowkey,当然基于此思想我们可以使用任意的方式构建rowkey。 在使用hbase-rdd插件的过程中,我在思考,默认的RDD上是没有toHbase方法的,那为什么引入hbase-rdd包之后,RDD之上就有toHbase方法了?经过查看源码,发现hbase-rdd包中提供了两个隐式方法: implicitdeftoHBaseRDDSimple[A](rdd:RDD[(String,Map[String,A])])(implicitwriter:Writes[A]):HBaseWriteRDDSimple[A]=newHBaseWriteRDDSimple(rdd,pa[A]) implicitdeftoHBaseRDDSimpleTS[A](rdd:RDD[(String,Map[String,(A,Long)])])(implicitwriter:Writes[A]):HBaseWriteRDDSimple[(A,Long)]=newHBaseWriteRDDSimple(rdd,pa[A]) 这两个方法在发现RDD上没有toHbase方法时会自动尝试调用,从隐式定义中尝试找到解决方案,尝试之后发现有定义toHBaseRDDSimple隐式方法,于是调用该隐式方法新建HBaseWriteRDDSimple类,返回hBaseWriteRDDSimple,而在hBaseWriteRDDSimple对象中是有toHbase方法的,因此在引入hbase-rdd之后,可以发现原本没有toHbase方法的RDD上有toHbase方法了。这一切都要归功于Scala强大的隐式转换功能。 那明白了原理,是否我们可以基于RDD写自己的模块,说干就干! 第一步:新建Trait traitHaha{ implicitdefgaga[A](rdd:RDD[String]):Hehe= newHehe(rdd) } 第二步:新建Hehe类 finalclassHehe(rdd:RDD[String]){ defwow(tableName:String,family:String):Unit={ println("---------------------------------------------") println("tableName:"+tableName+"-family:"+family) println("size:"+rdd.count()) rdd.collect().foreach(data=>println(data)) println("---------------------------------------------") } } 第三步:新建包对象 packageobjecttestextendsHaha 第四步:新建test类 objectTest{ defmain(args:Array[String]){ valsparkConf=newSparkConf().setAppName("Test") valsc=newSparkContext(sparkConf) sc.makeRDD(Seq("one","two","three","four")).wow("taskDataPre","T") } } 项目结构图: 运行效果图: 希望对大家以后的开发有帮助,同时借鉴本案例,在Spark Core之上构建自己的小模块。 作者:张敏 来源:51CTO

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

个人开源框架,技术点、封装、二次开发,涵盖全新 ORM、Excel、第三方组件监听

wu-framework-parent 介绍 wu-framework-parent是一款由Java语言开发的框架,目标不写代码单数却能完成功能。框架涵盖无赖ORM(wu-database-lazy-starter)、仿生组件、easy框架系列【Easy-Excel、easy-listener、easy-upsert】授权框架(wu-framework-authorization)、Web框架、平台操作组件、层组件抽象 仿生 模块 所属层级 描述 wu-bionic-language 语言模块 语言解析,tts wu-bionic-memory 记忆内存 记忆断点 wu-bionic-think 反思 反思模块 Easy系列 Excel导入导出、文件导入导出 基于第三方组件的upsert操作 模块 所属层级 描述 wu-easy-upsert-core sink sink基础模块 wu-easy-upsert-elasticsearch-sink sink es数据存储 wu-easy-upsert-h2-sink sink h2数据存储 wu-easy-upsert-hbase-sink sink hbase数据存储 wu-easy-upsert-influxdb-sink sink influxdb数据存储 wu-easy-upsert-kafka-sink sink kafka数据存储 wu-easy-upsert-mysql-sink sink mysql数据存储 wu-easy-upsert-pulsar-sink sink pulsar数据存储 wu-easy-upsert-redis-sink sink redis数据存储 wu-easy-upsert-redisearch-sink sink redisearch数据存储 wu-easy-upsert-spring-boot-autoconfigure sink sink配置文件 wu-easy-upsert-starter sink starter包 第三方组件监听 模块 所属层级 描述 wu-easy-kafka-listener listener kafka数据监听 wu-easy-listener-core 核心 核心模块 wu-easy-listener-spring-boot-autoconfigure 配置 配置 wu-easy-listener-starter listener starter wu-easy-mysql-binlog-listener listener binlog数据监听 wu-easy-mysql-listener listener mysql数据查询监听 wu-easy-pulsar-listener listener pulsar监听 wu-easy-redis-listener listener redis数据监听 wu-easy-rocketmq-listener listener rocket数据监听 授权 模块 所属层级 描述 wu-authorization-client-starter 客户端 客户端 wu-authorization-common 共用组件 共用组件 wu-authorization-server-simple 模版案例 模版案例 wu-authorization-server-starter 服务端 服务端 wu-authorization-spring-boot-autoconfigure 配置 配置

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

企业级java springcloud b2bc商城系统开源源码二次开发-负载均衡策略

简单轮询负载均衡以轮询的方式依次将请求调度不同的服务器,即每次调度执行i=(i+1) mod n 随机负载均衡随机选择状态为UP的server 加权响应时间负载均衡根据响应时间分配一个weight,响应时间越长,weight越小,被选中的可能性越低。 区域感知负载均衡区域感知负载均衡内置电路跳闸逻辑,可被配置基于区域同源关系(Zone Affinity,也就是更倾向于选择发出调用的服务所在的托管区域内,这样可以降低延迟,节省成本)选择目标服务实例。它监控每个区域中运行实例的行为,而且能够实时的快速丢弃一整个区域。这样在面对整个区域故障时,帮我们提升了弹性。 Ribbon自带负载均衡策略比较从现在开始,我这边会将近期研发的spring cloud微服务云架构的搭建过程和精髓记录下来,帮助更多有兴趣研发spring cloud框架的朋友,大家来一起探讨spring cloud架构的搭建过程及如何运用于企业项目。 JAVA ssm b2b2c多用户商城系统源码

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

【Ease UI】2026-04-16 组件更新:新增组件 xly-flow-designer 流程设计器 基于 warm-flow 二次开发

🚀 即插即用的 Vue 3 业务组件库,让中后台开发回归简单 Ease UI 是一套为「快速复制」而生的 Vue 3 业务组件库。每个组件都是独立的 .vue 单文件,不依赖任何外部样式或工具函数,直接复制到你的项目即可使用。它仅依赖 Element Plus,却解决了中后台开发中表格选择混乱、搜索表单代码臃肿、日期范围绑定繁琐等真实痛点,让组件复用像复制代码一样简单。 ✨ 新增 •xly-flow-designer(流程设计器组件)src/components/xly-flow-designer/index.vue • 基于LogicFlow+WarmFlow二次封装的可视化流程设计组件 • 支持两种画布模式:经典模式(CLASSICS)和仿钉钉模式(MIMIC),可通过flow.modelValue切换 • 支持通过flowprop 传入流程定义对象,内部自动初始化并渲染画布 • 支持@save事件,点击「保存」按钮后将流程 JSON 数据回传给父组件 • 工具栏:缩小 / 放大 / 自适应(经典模式)/ 上一步 / 下一步 / 下载流程图 / 下载 JSON / 保存 • 支持撤销/重做(Ctrl+Z / Ctrl+Y),基于 LogicFlow 历史快照 • 支持下载画布为 PNG 图片(Snapshot扩展) •节点类型:开始节点 / 中间节点(审批/办理/通知)/ 串行网关 / 并行网关 / 结束节点 / 跳转条件边 •经典模式(CLASSICS):标准 LogicFlow 节点样式,支持拖拽面板(DndPanel)、节点内联插入(InsertNodeInPolyline)、右键菜单(Menu) •仿钉钉模式(MIMIC):自定义节点视图(baseNode.vue),圆角卡片样式,支持点击边弹出操作浮层(EdgeTooltip),可从边中间快速插入节点或网关 • 节点属性面板(propertySetting.vue):点击节点弹出 XlyModal 侧抽屉,按节点类型动态渲染表单(开始/中间/网关/结束/跳转条件) • 中间节点属性:节点名称、节点类型(审批/办理/通知)、审批人配置(通过xly-user-picker选人)、监听器配置(类型/路径/变量) • 跳转条件属性:条件名称、条件类型(无条件/表达式/存在审批人员)、前置节点选择 • 网关节点属性:仅节点名称 • 支持获取前置节点列表(getPreviousNodes),跳转条件可关联任意前置审批节点 •common/js/tool.js:提供json2LogicFlowJson(WarmFlow → LogicFlow 格式转换)、logicFlowJsonToWarmFlow(LogicFlow → WarmFlow 格式转换)、isClassics、getPreviousNodes等工具函数 •common/vue/nodeExtList.vue:经典模式左侧节点拖拽面板 💡 项目初衷 在中后台系统开发中,我们频繁遇到这些问题: 痛点 现状 🔧组件库太重 引入一套组件库,需要学习整套 API、主题配置、构建配置,成本太高 📋复制粘贴难 想从项目 A 复用一个组件到项目 B,发现依赖了各种公共样式、工具函数,拆不出来 🧩Element Plus 不够用 基础组件有了,但业务组件(如带展开/收起的搜索表单、智能表格)还得自己写 🔄重复造轮子 每个项目都要重新实现表格选择、日期范围绑定、表单布局... 于是,Ease UI 诞生了。 打造一套极致轻量、即拷即用的业务组件,让开发者可以像复制一段代码一样简单地复用组件。 ✨ 核心优势 🎯 单文件组件,即拷即用 每个组件都是完全独立的.vue单文件,包含: • ✅ 完整的<template>模板 • ✅ 独立的<script setup>逻辑 • ✅ 自包含的<style scoped>样式 无需任何配置,直接复制.vue文件到你的项目即可使用! # 只需要这一个文件 src/components/xly-button/index.vue # 不需要: ❌ 额外的 CSS 文件 ❌ 公共样式依赖 ❌ 复杂的构建配置 ❌ 主题变量文件 🔌 仅依赖 Element Plus 本组件库仅依赖 Element Plus(及其图标库),不引入其他 UI 组件库: { "dependencies": { "element-plus": "^2.13.6", "@element-plus/icons-vue": "^2.3.2" } } 依赖说明: • 🎨Element Plus- 仅使用其图标组件(@element-plus/icons-vue) • 🚫无其他 UI 库- 不依赖 Ant Design Vue、Naive UI、Vuetify 等 • 🚫无样式库- 不依赖 Tailwind CSS、UnoCSS 等原子类框架 • 📝纯 Vue 3 + SCSS- 所有组件样式独立编写 这意味着: • 如果你的项目已经使用 Element Plus,可以无缝集成 • 如果你的项目没有 Element Plus,只需安装它即可 • 不会有多个 UI 库的样式冲突问题 如果你觉得这个项目还不错或对你有帮助,欢迎到 Gitee 或 GitHub 上点个 Star,这是对作者最好的支持~开源不易,且用且珍惜。 🔗 Gitee:https://gitee.com/yun_hua_admin/ease-ui 🔗 GitHub:https://github.com/Momingyun/ease-ui 🔗 预览地址:https://ease-ui.com

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

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等操作系统。

WebStorm

WebStorm

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

用户登录
用户注册