工作
文章平均质量分 72
着凉的石头
持续学习持续成长
展开
-
Lucene采用自定义分词器
项目中用到了lucene构建索引,但是公司有自己的分词器,为了保持跟其它模块的一致性,必须将分词器整合进lucene中,其实网上这样的例子会比较多,不过很多都是不完整的,自己在这里贴出来个完整的,思想比较简单,基本就是按照自己的分词器分完词之后按照空格分隔,然后利用lucene的WhitespaceTokenizer来重新进行分隔。代码如下:其中PreProcess是分词服务的客户端,我们原创 2013-08-27 08:22:44 · 1031 阅读 · 0 评论 -
streaming kmean cluster 聚类算法实现和分析
主要介绍下streaming kmeans的算法思想,虽然项目中没有用到,但其中的思想还是很有借鉴意义的,感兴趣的可以搜论文原文看看。从streaming可以看出,算法是基于流式的,文件中的数据只参与计算一次,算法对加入一篇文档到新的类别和产生新类的代价分别进行评估,当满足一定的阈值才会将文档添加到聚类中去或者产生新的聚类。算法和常见的kmeans算法主要有如下区别:原创 2013-10-14 23:50:00 · 3991 阅读 · 0 评论 -
redis集群状态信息维护脚本
通常在redis机器数量多的时候,需要对redis的机器进行状态监控,可以采用Linux 的nc 来对多个shard进行状态查询和监测原创 2014-05-17 12:04:23 · 2084 阅读 · 0 评论 -
基于One-Class的矩阵分解方法
在矩阵分解中, 有类问题比较常见,即矩阵的元素只有0和1, 对应实际应用中的场景是:用户对新闻的点击情况,对某些物品的购买情况等。基于graphchi里面的矩阵分解结果不太理想,调研了下相关的文献,代码主要实现了基于PLSA的分解方法,详细请参考后面的参考文献 #!/usr/local/bin/python#-*-coding:utf-8-*-import sysimport math原创 2014-07-25 20:55:53 · 1628 阅读 · 0 评论 -
实时数据流处理简介
最近在组内作了次简单的分享,题目是实时数据流的处理,切入点主要是推荐系统中多种实时数据流的实时计算问题,当然像搜索的trends, 广告的实时计费等也可能会碰到类似的问题,PPT里面简单的介绍了下线上系统实际的结构和流程,系统上线运行近半年多,虽然没有出现过问题,其中有些问题还是值得修改和改善的,如果有业务相关的需求,这些问题会一并改善。 主要处理的问题:1. 乱序的问题,这个在多数原创 2015-03-29 16:04:30 · 2863 阅读 · 0 评论 -
spark 笔记(二) 参数设置和调优
在迁移相关的spark程序到yarn的过程中间,对有些地方的配置进行了调整和优化, 总结起来,常用的一些设置如下:1. spark.serializer 对象的序列化设置可以设置成spark的序列化类型,相对比较高效和紧凑,网络传输性能比较好2. spark.kryoserializer.buffer.mb 用来设置对象序列化占用空间大小,当对象比较大的时候需要设置这个选项3. spa原创 2015-06-26 10:17:14 · 4189 阅读 · 0 评论 -
mongo-kafka: mongodb 数据到kafka的实时传输
mongodb 作为文档型的NoSQL数据库,性能较传统的关系型数据库有较大提升,而且可以利用其自带的capped collection 来实现消息队列的功能,但是sharding方式是不支持capped collection的,来新公司刚接触mongo, 公司这边的运行状态大概有两种,一种是master-slave的方式,另外一种是sharding+replication方式,由于相当的数据都存原创 2015-09-01 17:13:14 · 13336 阅读 · 3 评论 -
聚类(一)pyspark 实现特征的ID化
项目中需要实现一个简单的聚类,初步衡量了下样本数量在2000W左右,第一次写spark还是14年的时候,而且都是基于java实现的模型算法,这次就简单用pyspark实现了特征的Id化, 即将字符串类型的特征转为数字表示的Id。这个在模型中相对比较常见, 比较主要的点应该是使用broadcast广播了特征和id的映射关系。 #!/usr/bin/env python#-*-coding:u原创 2016-04-25 21:16:21 · 2439 阅读 · 0 评论 -
nginx跨域设置
在做一个项目的时候,采用了前后端分离的结构设计,后台设计的rest风格的http接口既需要满足后台服务调用,也需要满足前端直接采用ajax调用,于是碰到了跨域问题, 后台采用的是spring mvc结构, HTTP方法支持get、post、put、delete、option等方法,由于在post调用的时候,前端http会先采用option到服务器端,204了之后再提交请求数据,除了在nginx层面原创 2016-04-24 23:55:36 · 4492 阅读 · 0 评论 -
nginx https配置以及 api接口版本号rewrite
在做APP的接口设计时,需要考虑不同版本会采用不同的接口API,调研了几种方式之后,采用了在http header里面增加application/json;version=vxx的方式来实现版本控制,这样做的好处是地址不用做变更,客户端只需要在header中增加声明使用的版本即可. 由于采用https是大势所趋,后台也增加了对https的支持, APP和后台的前端机器采用https通信, 前端机器原创 2016-04-25 00:08:55 · 4644 阅读 · 0 评论 -
Java 实现ES批量索引
项目中有部分数据通过Hadoop离线分析之后,需要将这部分数据的检索功能暴露出去,于是考虑搭建一套简单的索引服务。Lucene比较灵活, 可以自定义比较多的规则,比如分词,排序等,除了索引之外,服务化方面需要写一些代码,本着少开发,易维护的原则,采用了ES来搭建索引服务。ES的REST类型的接口还是比较容易上手的,把数据刷到ES之后,第三方可以直接调用ES的接口来进行检索,目前百万级别的时候性能还原创 2016-05-11 17:10:27 · 6149 阅读 · 0 评论 -
那些年,我使用过的轮子
背景 13年7月19日研究生毕业正式工作开始,到目前已经三年多了,接触和开发的业务线经历了后台+算法->大数据+算法+推荐(新闻,广告)->大数据+微服务(推荐,数据)这个过程,使用的缓存和存储的轮子基本包括了redis,memcached,couchbase,MongoDB,Aerospike,EhCache;既有Localized Cache,也有Distributed Cache;原创 2017-02-19 21:01:48 · 475 阅读 · 0 评论 -
AeroSpike 类Redis 接口封装实现
业务背景有个业务需要评估班级和学生的知识点能力,计算维度多,数据量大,目前按照redis cluster和sharding方式进行存储,然而无论cluster还是sharding方式,都存在扩容和迁移困难的问题,特别是在数据量大的情况下,存在较高的风险。另外,redis作为存储,为了提高可靠性,基本需要提供master-slave的方式,造成内存的利用率偏低,比较浪费服务器资源。AeroSpike原创 2017-02-13 23:06:31 · 955 阅读 · 0 评论 -
PHP 连接Mongo操作实例
工作之余,给内容做了个小工具,数据需要存储到mongo里面,简单的封装了相关的API, 方便查看,因为是内部工具,用户数不多,并没有考虑并发方面的性能,倒是根据连接的时候出现的remote connection closed的exception, 增加了retry的操作。<?phpclass MongoFactory { #const _uri = "mongodb://q原创 2017-02-25 14:07:36 · 862 阅读 · 0 评论 -
那些年,我使用过的轮子(二)--memcached+couchbased
背景 memcached 出现的比较早了,支持的数据类型比较简单,而且没有持久化,在绝大多数的应用场景中都作为缓存来使用,加上根据一致性Hash扩展成分布式的缓存集群也是互联网中常用的方案设计。couchbase 文档较少,国内用的公司应该不多, 它作为一种NoSQL的数据库,支持memcached协议,支持JSON的文档格式和索引,加上其天生的Auto-Sharding和P2P特性,在原创 2017-03-19 17:06:51 · 1046 阅读 · 0 评论 -
那些年,我使用过的轮子(一)--Redis
背景 最近面试准备加上工作交接有点小忙,导致原来的计划耽搁了蛮久,上午刚回京,偷个安静的下午来完成这篇文章。Redis 作为一个广泛使用NoSQL的存储工具,相信大家都比较熟悉了, 从工作至今3年的时间里面,对它的使用是比较多的,当然也一直把它当作工具用,没有涉及到底层源代码级别的改造。结合做过的业务,Redis有当作缓存来用的,也有当作存储系统来使用的,它支持的数据结构丰富,能满足原创 2017-03-12 16:29:56 · 685 阅读 · 0 评论 -
新闻去重算法的设计和实现
之前有介绍过大规模去重算法的设计,可惜没有办法付诸实现,主要是因为没有相应的应用场景,还是停留在纸上谈兵的阶段!这里简单的介绍下新闻去重算法的实现,客户端在基于yahoo shingle算法的基础上进行了封装,便于采用服务的方式来进行调用,这样比较容易进行复用和提高扩展性,利用thrift来进行跨语言的通信,客户端采用Java实现,原有的设计是服务端既提供计算的接口,即根据文本计算它的shingl原创 2014-02-25 22:09:21 · 2990 阅读 · 0 评论 -
基于情感词库和PMI互信息的情感分类
情感分类在数据挖掘领域应该是一个比较细分而且难做的部分,之前在研究生阶段了解了一点,印象中有研究把twitter的情感可以分为21类,情感分析在观点预测、市场营销都有一定的用处,刚好项目中有需要区分用户情感的部分,就花了点时间实现了一个比较简单的demo,效果不是很好,大概65%左右的准确率,需要进一步细化。原创 2014-02-23 22:23:49 · 9369 阅读 · 3 评论 -
chrome插件-新闻推荐评测插件开发
在实现新闻推荐的过程中,需要对推荐算法进行评测来衡量推荐的效果。前期一般通过人工去评测,但是因为是根据网页来推荐的,为了满足随机性和提高效率,开发了基于chrome的插件来对网页的推荐效果进行评测,前期主要是为了解决一些比较明显的问题,比如标题长度,乱码符号等,后期可以切一部分流量进行a/b test来看效果。原创 2014-02-23 18:02:14 · 1281 阅读 · 0 评论 -
基于mpich搭建MPI集群
临毕业前,想把NMF算法基于MPI实现,申请了16台4核心的机器作为实验环境,利用mpich进行集群的搭建,步骤记录如下:安装mpich 1. 下载之后,mv mpich.tgz /home/ 2. tar zxvf mpich.tgz 3. ./configure -rsh=ssh -prefix=/usr/local/mpich 4. make&&make install原创 2013-09-20 12:04:35 · 1870 阅读 · 0 评论 -
关于推荐系统
推荐系统实践和系统接触了一些,偶然读到百分点推荐系统设计一文,有些感想总结如下:1.推荐的行业差异性1)行业共有的:实时性,高可用性等主要体现在架构上2)差异性主要体现在推荐的内容上:有的购买重复性高,具有周期性,有的产品就不能重复购买,例如相同款式的包包等,这里需要对行业进行细分,这个差异主要区别在特征上,时间特性,内容特性等。例如在不同的时间如节假日相关的物品,话题。原创 2013-10-08 10:57:29 · 1270 阅读 · 0 评论 -
Thrift 中以GBK传输中文字符和分词服务搭建
项目中需要将分词做成线上服务形式,服务后端用c++实现,客户端用java实现,来调用分词的服务。由于分词程序默认是以GBK编码为准,但是JAVA读写字符串的固定编码为utf-8,需要在数据传输的时候以GBK编码方式传输,Thrift 的JAVA库中不支持以GBK方式传输字符串,而且预期不会增加如此功能(Support non-UTF-8 in Java and C#),原因参考Support原创 2013-10-08 12:05:23 · 2725 阅读 · 0 评论 -
一致性哈希算法的简单实现和在redis集群的应用
项目中需要搭建一个简单的redis集群,用来存储系统中的算法模型产生的特征值,利用到了一致性哈希算法,简介可以看一致性哈希算法,本文简单实现了下一致性哈希的算法,主要阐述下应用场景和一些感想。原创 2013-10-09 10:58:27 · 3064 阅读 · 0 评论 -
基于Map-Reduce的大规模分词服务搭建
目前项目中,分词的主要工作方式可以分为online和offline,online的方式主要是提供服务接口供应用程序来进行调用,比较侧重并发和速度,offline的工作方式主要是一次性的,调用完成就释放,适合一次处理大量文章,较online的工作方式,省去了网络传输的代价,效率要高一些,但是不是很灵活,不能实现良好的易用性。 在数据挖掘任务中,在语料库庞大的条件下,比如千万或者亿级别的文档原创 2013-09-23 08:58:25 · 1226 阅读 · 0 评论 -
大规模网页去重系统的简单设计和实现
网页去重算法应用到了很多领域,例如:spam,推荐系统等,目前工作中需要用到网页的去重算法,量级大概是每天60W左右,但是由于是线上的系统,对系统能快速查找重复文章的性能要求较高,这里简单记下我们的思路和方法。算法调研:其实网页去重算法本质上都是提取网页的特征集合,然后根据这些特征来计算网页的相似度,我们主要调研了以下两种方法:1.yahoo的shingle算法:来源于yahoo的一篇论文原创 2013-08-26 23:01:58 · 1854 阅读 · 0 评论 -
Hadoop & Hadoop Streaming 自定义输出格式
在用Hadoop处理大量的日志文件的时候,有时候会将错误的或者不符合要求的日志输出到另外一个目录,以备后来进行查验,这里给出个简单的例子,并简单说明下如何在Hadoop Streaming中使用这种方法将错误格式的日志输出到自定义的路径。原创 2013-09-23 22:30:17 · 2313 阅读 · 0 评论 -
中文字符串的编码转换(c实现)
中文字符串在c/c++中表示为字节序列,在分词的时候需要根据不同的编码方式进行分词,一般分词器需要转换成统一的编码方式再进行转换,有些分词器如ICTCLAS在分词的时候可以不显示定义编码方式,可以检测字符串的编码方式再进行转换,本文就项目中用到的几种编码转换方式进行总结,主要利用了iconv进行编码转换。原创 2013-10-08 18:41:26 · 3407 阅读 · 0 评论 -
非负矩阵分解中基于L1和L2范式的稀疏性约束
L1 norm使得求得的解更趋近于0,即产生更多的0解,确保稀疏性,L2 norm防止over-fitting原创 2013-09-21 11:23:17 · 4133 阅读 · 3 评论 -
非负矩阵分解算法基于hadoop streaming的实现
非负矩阵分解是一种较新的矩阵分解方法,分解得到的矩阵元素是非零元素,主要应用在图像处理领域,将其应用在语义概念扩展中,对概念进行语义扩展。原创 2013-09-20 11:31:22 · 1847 阅读 · 2 评论 -
KMean聚类算法及其改进
KMean聚类算法是一种比较简单而且常用的聚类算法,该算法有以下特点:聚类数目的一定的;选择一个样本的最近聚类时,需要将所有聚类的距离都计算一遍,然后选择最近的聚类作为该样本所属的类别,考虑到以上特点,会存在以下问题:首先,如果对数据样本集合不了解,K的选择会有一定的随机性,K的选择关乎聚类质量和计算效率,其次,与所有聚类集合都进行计算,这原创 2013-09-15 12:33:31 · 2557 阅读 · 0 评论 -
Hadoop Streaming shell 脚本命令汇总
在编写JOB相关的脚本中,都会涉及集群输入和输出地址的定义,一般都是按照年月日并且按照文件大小进行切割,如果输入的路径下都是需要的文件,这个时候只需要定义路径的变量即可,可以利用正则匹配的方式来定义变量,如果路径下的文件需要筛选和拼接,可能会稍微麻烦点,但是Hadoop Streaming的命令对拼接的文件个数有限制,比如在map输入的时候,可以利用","将文件进行拼接,但是这里文件个数有限制,太长的话提交的时候会报错,具体数值我记不清了,大概不到2000个文件,一般情况下,当文件个数较原创 2013-10-18 23:03:29 · 2367 阅读 · 0 评论 -
Shell 中mysql 查询以及shell字符串数组的使用
利用shell既可以读取本地文件进行文本处理,也可以很方便的操作远程数据库,两者结合起来用可以实现一些较为复杂的统计逻辑。原创 2013-11-09 18:06:33 · 5767 阅读 · 0 评论 -
倒排索引-Indexing Boolean Expressions
在搜索领域,索引是一项非常重要的技术,直接影响到查询的效率,其基本的流程是:文章先进行分词、计算权重,然后利用词和文档的信息建立倒排索引,在查询的时候,得到符合条件的文档的id集合,然后利用正排索引返回文档的详细信息,在计算广告中,广告主通常会定义广告投放的条件,这些条件时通过布尔表达式来定义的。原创 2013-11-11 08:33:42 · 4179 阅读 · 1 评论 -
高负载下Nginx,Node.JS和网络的优化
Nginx和Node.JS通常一起使用,在高吞吐量的Web应用程序中是一对完美的组合。它们都基于事件驱动原则设计,并且能够越过困扰传统Web服务器如Apache的C10K限制扩展到更高的水平。即插即用的配置可以使你的应用工作的足够好,但是当你需要在商业硬件上支撑每秒上千的请求时,你必需作一些针对性的优化最大程度的提高服务器的性能。 这篇文章假设你使用Nginx的HttpProxyModule模块将负载均衡一个或更多的upstream Node.JS服务器,主要涉及Ubuntu 10.04下调整sy翻译 2014-02-09 14:01:15 · 2427 阅读 · 0 评论 -
hbase和es在搜索场景的应用
背景 最近有个简单的需求,离线数据挖掘得出的标签需要支持online的查询,查询场景比较简单,支持按照单个id或者多个id批量查询,tp99需要在200ms,批量的时候id 集合的大小不会超过1000,平均下来不会超过200的样子。这种场景直接上ES相对来说比较省事,不过ES占用资源较多,想尝试用hbase来解决这种场景,下面记录下具体的过程。 为何要考虑HBase?原创 2017-08-02 01:04:46 · 15043 阅读 · 0 评论