2018-年中小记

在创业公司中,从零开始构建推荐系统,面对人员流动和技术挑战,团队如何共同努力克服困难,实现项目上线,并从中积累宝贵的技术管理经验。

不知觉已经2018年10月份,感觉没做什么,但又感觉过的并不那么轻松,最近变动比较多,趁记忆还在就记录点什么。

从7月到10月完成了人生中几件大事,分别是买房、结婚和换工作。连自己都没想到这几件事全部凑在一起,白天在创业公司忙碌加班,下班回来后准备婚礼的工作,还时不时要出去跑买房手续,不得不说真的很充实。

这三个月,于我而言,最大的挑战应该算尝试推荐算法领域和负责团队。一边是没什么算法实战经验,仅有两三年数据平台架构背景的我,一边是9个跟我差不多入职时间的实习生,很难想象这样一个团队组合在创业公司会发生什么化学反应。

因为推荐我来的团队负责人因个人原因8月初走了,就剩我一个社招独自挑梁带团队里9个实习生,内心一边惋惜难受朋友的离开,另一边自己要想着安抚实习生的心情,尽量留住实习生,稳定团队。老实说,朋友走的这几天,不仅整个团队,自己内心也是非常低落,但推荐1.0还没实现,只完成了部分召回源开发,排序还没上线,自己一方面不甘心项目没上线,另一方面不想团队这么就散了,于是带领团队继续干。

当初是第三个入职北京这边分公司,在这里,推荐系统真的是从0到1。刚来的时候,激情满满,尽管这里什么基础设施都没有,心理多少还是低落一段时间,但一切很快过去,每天干到晚上1、2点也不觉得累。

每天除了自己要开发,还需要抽时间指导实习生,刚开始会比较忙,好在实习生给力,上手了可以传帮带其他实习生。(可能有人纳闷为什么都是实习生,答案很简单,为了迎接公司年底C轮融资,8月中旬冲用户量,要实现推荐1.0,社招肯定来不及)

朋友走后,离目标时间有一周,还剩下排序层没做,需要训练模型和模型上线,在没有任何经验情况下,查阅网上的资料,选用比较成熟的方案用xgboost on spark离线训练模型。将在线特征存redis用户线上预测,离线特征跑模型,中间一度遇到阿里云EDAS环境问题,上线测试遇到PMML模型效率低问题,当问题一个个解决,推荐1.0终于在预期时间上线。

推荐服务上线后心里满是久违的开心和成就感,因为这是我们团队在专业人走了后没有指导的情况下,从零摸索共同完成从0到1的推荐系统。这里不得不说团队中能有几个给力实习生对目标完成有很大推动,也许这就是团队的力量吧,合力向一个方向走,会更快更好。

事情并没有结束,项目上线了,后面随之而来就是继续开发优化现有系统,但是团队的同学因为学业原因慢慢离开,直到有一天发现有3个人一起说要走,第一次当团队负责人的我听了表现的很淡定,但心里多少有些遗憾惋惜,可也不能耽误他们的好前程。

工作近三个月后,于个人而言积累了宝贵的技术管理经验,明白向上管理和向下管理的意义,也逐渐明白过去带自己主管的思考角度。通过这次推荐系统的研发,也明白很多事情并没有想象那么难,大家团结一心,明确方向,绝大多数创业公司面临的问题基本都能解决。

发现个人精力大多放在技术管理方面,比较容易陷入局部问题;另外,工作中明白到技术管理方向和格局对团队乃至公司发展更重要。经过反复考虑,还是决定离开这里,去更大的平台提升技术深度和格局。

PS:在这变动过程中,咨询了很多人,最后有个观点印象深刻:创业公司倾向于将一个人价值最大化,工作中技术接触范围会很广,短期也可能会带来很大前置溢价收益。但从技术人职业生涯长远考虑,前5年内从事技术会对深度和格局影响更长久,后置收益也更可靠。

(完)
创业不易,很多写的看似轻描淡写,但很多冷暖只有经历才自知。

关注公众号我们可以更方便沟通交流:水木之椿

### Kettle Scheduler 配置方法及最佳实践 Kettle Scheduler 是一款基于 Spring、Spring MVC 和 BeetlSQL 的调度监控平台,用于管理和调度由 Kettle 客户端创建的作业 (Job) 和转换 (Transformation)[^1]。以下是关于 Kettle Scheduler 的配置方法和最佳实践: #### 1. 环境准备 在开始配置之前,确保以下环境已正确安装并运行: - Java JDK 8 或更高版本。 - Maven 构建工具(如果需要从源码编译)。 - 数据库支持:MySQL 或其他兼容数据库。 - Tomcat 或其他支持 Servlet 的应用服务器。 #### 2. 下载与部署 可以从项目地址下载 Kettle Scheduler 的代码或直接获取预构建的 WAR 文件[^1]。将 WAR 文件放置到 Tomcat 的 `webapps` 目录下,并确保 Tomcat 的配置文件中包含以下内容以支持热加载和调试功能[^2]: ```xml <Context path="/kettle-scheduler" docBase="kettle-scheduler" reloadable="true" debug="0" privileged="true"> </Context> ``` #### 3. 数据库配置 编辑 `application.properties` 文件,配置数据库连接信息。例如: ```properties spring.datasource.url=jdbc:mysql://localhost:3306/kettle_scheduler?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=your_password spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver ``` 确保数据库已初始化,可以参考项目文档中的 SQL 脚本完成表结构的创建[^1]。 #### 4. Quartz 配置 Quartz 是 Kettle Scheduler 中的核心调度组件。可以通过修改 `quartz.properties` 文件调整调度器的行为。例如: ```properties org.quartz.threadPool.threadCount=10 org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate ``` #### 5. Kettle API 集成 Kettle Scheduler 使用 Kettle 提供的 API 来执行 Job 和 Transformation。确保项目的依赖中包含 Kettle 的相关 JAR 包。例如,在 `pom.xml` 中添加以下依赖项: ```xml <dependency> <groupId>pentaho-kettle</groupId> <artifactId>kettle-engine</artifactId> <version>9.1.0.0-324</version> </dependency> ``` #### 6. 启动与访问 启动 Tomcat 并通过浏览器访问 Kettle Scheduler 的管理界面。默认路径为 `http://localhost:8080/kettle-scheduler`。登录后即可进行作业和转换的调度与监控。 #### 7. 最佳实践 - **性能优化**:根据实际需求调整 Quartz 的线程池大小,避免因线程不足导致任务积压[^1]。 - **日志管理**:启用详细的日志记录以便排查问题,同时定期清理过期日志以节省存储空间。 - **安全性**:配置 HTTPS 访问以保护敏感数据传输,并使用强密码策略加强用户账户的安全性。 - **备份机制**:定期备份数据库和 Kettle 文件,防止数据丢失。 ```python # 示例:通过 Python 调用 Kettle API 执行一个简单的转换 from subprocess import Popen, PIPE command = [ "pan.bat", "-file=/path/to/your/transformation.ktr", "-level=Basic" ] process = Popen(command, stdout=PIPE, stderr=PIPE) stdout, stderr = process.communicate() if process.returncode == 0: print("Transformation executed successfully.") else: print(f"Error occurred: {stderr.decode('utf-8')}") ```
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值