Elasticsearch数据迁移与备份

虽然ES提供了replicas shards的机制来保证数据的完整性不会因为几个节点的奔溃而被破坏,但是定期的数据备份以备不时之需依然重要。此外,通过备份与恢复也可实现数据在不同集群间的迁移(直接复制data目录下的索引文件的做法我尝试过,但没有成功)。

备份的方式在官方文档里有清楚的交代:先创建仓库(repository),再往仓库里添加一个快照(snapshot),查看备份状态,搞定。虽然官方文档很轻描淡写,但我在第一步就卡住了,创建仓库时需要一个共享文件系统(每个ES节点都需要能访问),我只是想把数据从线上集群迁移到线下进行更全面的测试,为了这么点事去找系统部走流程等待共享服务器是多么头疼啊…… 继续阅读Elasticsearch数据迁移与备份

CentOS 6安装Elasticsearch 1.7

我现在专注于公司的搜索项目,初期框架选择时最后范围缩小到Elasticsearch(简称ES)与Solr之间,但考虑到ES从诞生的第一天就是面向分布式架构的,因此最终敲定ES。接下来有空时会整理一系列的ES使用心得,今天正好要在新节点上部署ES,顺便把部署的完整过程同步到博客里供大家参考:

如上列表所示,ES的安装与环境配置,官方文档是散布在各处的,第一次部署的时候确实很头大,生怕错配了什么东西,现在汇总一下自己的经验:

1.安装Java

“Elasticsearch requires at least Java 7. Specifically as of this writing, it is recommended that you use the Oracle JDK version 1.8.0_25.”

因为ES 2.x版本刚正式发布不久, 继续阅读CentOS 6安装Elasticsearch 1.7

CentOS本地与跨服务器文件同步

最近,我的工作重心是搜索项目。我们选用的搜索框架是Elasticsearch,ES从诞生第一天起就是面向分布式而构造的,因此跨服务器的文件同步问题随之而来。

此外,我使用R语言作为主要的脚本语言来配合ES使用(测试搜索效果、生成同义词文件等等),习惯上我会把R项目生成的文件放在R相关的目录下,因此还需要将文件同步到ES相关的目录下,这就产生了本地文件同步的需求。

本地文件同步

通过链接文件可以实现文件同步,链接文件又分为硬链接软链接,硬链接相当于备份,删除源文件后硬链接文件仍然存在且保留了原有的内容,而软链接相当于快捷方式,源文件删除后软链接文件将链接到一个不存在的文件,这被称为断链。

虽然硬链接只能在同一个分区中做链接,但我希望ES项目中的文件是相对稳定的(不能因为R脚本误操作删除了源文件使得ES中的文件也不存在了),并且我可以把R的目录和ES相关配置文件的目录放在同一个分区,所以我选择了硬链接的方式进行文件同步: 继续阅读CentOS本地与跨服务器文件同步

从CentOS安装R中看yum、rpm、repo到底有什么关系

在图形界面下习惯了双击.exe(或者.dmg)安装软件,到了Linux服务端可能会有很大的不适。此前,我都是直接Google,然后不管三七二十一地直接把安装命令丢到bash里,期待顺利安装……

但今天当我要重装R语言的时候,由于以前是手工编译安装的,现在需要用yum来安装却总是出错(yum安装处理了一些依赖关系才能使得rstudio-server顺利运行)。再也不想忍受这种听天由命的感觉了,于是理解了一下yum、rpm、repo之间到底有什么关系:

软件包管理系统

首先yum、rpm、repo这三个词都是属于软件包管理系统下的。我今天遇到的重装R语言的问题就是血与泪的教训:不到万不得不以不要自己编译安装软件,否则时间久了管理起来会一团糟,大多数软件都能通过Linux的软件包管理系统进行统一安装与管理。Linux 发行版主要有两大包管理技术阵营: Debian 的.deb,和红帽的.rpm: 继续阅读从CentOS安装R中看yum、rpm、repo到底有什么关系

CentOS 6安装Java 1.8

首先更新服务器:

yum update

 

查看系统当前的java版本:

java -version

 

如果发现是老版本,可以进一步查询系统已经安装的JDK:

rpm -qa | grep -E '^(java|jdk)'

rpm -qa代表查询所有已安装的packages,grep -E ‘^(java|jdk)’为通过正则表达式来过滤输出中以java或者jdk开头的结果,输出可能是这样的: 继续阅读CentOS 6安装Java 1.8

博客能不停就不要停

由于SAE的各种不稳定,这个博客荒废了好久。最近由于工作需要开始鼓捣阿里云,学了一些Linux知识后,总算顺利把博客迁移了过来。在继续写技术博客之前,还是先记录一下这段时间的生活,给这半年一个交代吧。

arenacloud

首先,我的虎扑邮箱马上就不能用了(泪目),因为我们数据部门加入了虎扑系的子公司——动云(arenacloud),今天A股上市公司贵人鸟(603555)宣布重点投资以大数据为核心的体育生态圈之后,似乎股价又涨了。然后,具体干活的应该就是我们。

搜索

这几个月来我主要负责的项目是虎扑的全站搜索(包括主站与虎扑体育App),虎扑的论坛上真的沉淀了许多优质内容,希望尽快上线,找科普知识大家想到的会是知乎,找体育知识那肯定得是虎扑咯。

算法、服务端语言、Linux命令

继续阅读博客能不停就不要停

斯坦福CS229机器学习课程笔记七:算法诊断、误差分析以及如何开始一个机器学习问题

这一节是Andrew对应用机器学习给出的建议,虽然没有数学公式,但却是十分重要的一课。

Debugging Learning Algorithms

假设要做一个垃圾邮件分类的模型,已经从海量的词汇表中选出一个较小的词汇子集(100个单词)作为特征。
用梯度上升算法实现了贝叶斯逻辑回归,但测试集的错误率达到了20%,这显然太高了。

如何解决这个问题?

  • 收集更多的训练样本
  • 进一步减少特征数
  • 增加特征数
  • 改变特征(考虑邮件标题/正文)
  • 将梯度上升多运行几个迭代
  • 尝试牛顿方法
  • 使用不同的λ
  • 改用SVM

继续阅读斯坦福CS229机器学习课程笔记七:算法诊断、误差分析以及如何开始一个机器学习问题

斯坦福CS229机器学习课程笔记六:学习理论、模型选择与正则化

稍微了解有监督机器学习的人都会知道,我们先通过训练集训练出模型,然后在测试集上测试模型效果,最后在未知的数据集上部署算法。然而,我们的目标是希望算法在未知的数据集上有很好的分类效果(即最低的泛化误差),为什么训练误差最小的模型对控制泛化误差也会有效呢?这一节关于学习理论的知识就是让大家知其然也知其所以然。

学习理论

1.empirical risk minimization(经验风险最小化)

假设有m个样本的训练集,并且每个样本都是相互独立地从概率分布D中生成的。对于假设h,定义training error训练误差(或者叫empirical risk经验风险)为:h误分类样本占整个训练集的比重:

另外,定义generalization error泛化误差为:从生成训练集的概率分布D中生成新的样本,假设h误分类的概率

值得注意的是:假设训练集与新的样本都相互独立地由同一个分布D产生(IID独立同分布)是学习理论里重要的基础。
当我们选择模型参数时使用如下方法:

就是所谓的经验风险最小化(empirical risk minimization),经验风险最小化是一个非凸优化问题难以求解,而logistic回归与SVM可以看做这个问题的凸优化近似。 继续阅读斯坦福CS229机器学习课程笔记六:学习理论、模型选择与正则化

斯坦福CS229机器学习课程笔记五:支持向量机 Support Vector Machines

SVM被许多人认为是有监督学习中最好的算法,去年的这个时候我就在尝试学习。不过,面对长长的公式和拗口的中文翻译最终放弃了。时隔一年,看到Andrew讲解SVM,总算对它有了较为完整的认识,总体思路是这样的:1.介绍间隔的概念并重新定义符号;2.分别介绍functional margins与geometric margins;3.由此引出最大间隔分类器,同时将最优化问题转化为凸函数的优化问题;4.补充了拉格朗日对偶性的知识;5.利用拉格朗日对偶性,推导最大间隔分类器最优化的对偶问题,即SVM的最优化公式,并指明公式中的内积;6.由内积引出核函数的重要性——当特征向量维度极高时利用核函数大大缩短计算时间;7.利用正则化解决线性不可分与异常点的问题;8.介绍SMO算法以高效地解SVM。

最大间隔分类器

1.假设、模型、符号

我们先假设所有数据都是线性可分的(之后会去除这个假设),通过下图直观地感受一下这个分类器。

虽然A、B、C三个点被分到了同一类,但我们认为点A的分类是最有把握的,因为它距离分类线最远(即间隔最大)。因此,这个分类器最基础的部分就是如何计算间隔。不过,在介绍间隔之前我们先看一下模型及其符号: 继续阅读斯坦福CS229机器学习课程笔记五:支持向量机 Support Vector Machines