推荐算法r
㈠ 矩阵分解在协同过滤推荐算法中的应用
矩阵分解在协同过滤推荐算法中的应用
推荐系统是当下越来越热的一个研究问题,无论在学术界还是在工业界都有很多优秀的人才参与其中。近几年举办的推荐系统比赛更是一次又一次地把推荐系统的研究推向了高潮,比如几年前的Neflix百万大奖赛,KDD CUP 2011的音乐推荐比赛,去年的网络电影推荐竞赛,还有最近的阿里巴巴大数据竞赛。这些比赛对推荐系统的发展都起到了很大的推动作用,使我们有机会接触到真实的工业界数据。我们利用这些数据可以更好地学习掌握推荐系统,这些数据网上很多,大家可以到网上下载。
推荐系统在工业领域中取得了巨大的成功,尤其是在电子商务中。很多电子商务网站利用推荐系统来提高销售收入,推荐系统为Amazon网站每年带来30%的销售收入。推荐系统在不同网站上应用的方式不同,这个不是本文的重点,如果感兴趣可以阅读《推荐系统实践》(人民邮电出版社,项亮)第一章内容。下面进入主题。
为了方便介绍,假设推荐系统中有用户集合有6个用户,即U={u1,u2,u3,u4,u5,u6},项目(物品)集合有7个项目,即V={v1,v2,v3,v4,v5,v6,v7},用户对项目的评分结合为R,用户对项目的评分范围是[0, 5]。R具体表示如下:
推荐系统的目标就是预测出符号“?”对应位置的分值。推荐系统基于这样一个假设:用户对项目的打分越高,表明用户越喜欢。因此,预测出用户对未评分项目的评分后,根据分值大小排序,把分值高的项目推荐给用户。怎么预测这些评分呢,方法大体上可以分为基于内容的推荐、协同过滤推荐和混合推荐三类,协同过滤算法进一步划分又可分为基于基于内存的推荐(memory-based)和基于模型的推荐(model-based),本文介绍的矩阵分解算法属于基于模型的推荐。
矩阵分解算法的数学理论基础是矩阵的行列变换。在《线性代数》中,我们知道矩阵A进行行变换相当于A左乘一个矩阵,矩阵A进行列变换等价于矩阵A右乘一个矩阵,因此矩阵A可以表示为A=PEQ=PQ(E是标准阵)。
矩阵分解目标就是把用户-项目评分矩阵R分解成用户因子矩阵和项目因子矩阵乘的形式,即R=UV,这里R是n×m, n =6, m =7,U是n×k,V是k×m。直观地表示如下:
高维的用户-项目评分矩阵分解成为两个低维的用户因子矩阵和项目因子矩阵,因此矩阵分解和PCA不同,不是为了降维。用户i对项目j的评分r_ij =innerproct(u_i, v_j),更一般的情况是r_ij =f(U_i, V_j),这里为了介绍方便就是用u_i和v_j内积的形式。下面介绍评估低维矩阵乘积拟合评分矩阵的方法。
首先假设,用户对项目的真实评分和预测评分之间的差服从高斯分布,基于这一假设,可推导出目标函数如下:
最后得到矩阵分解的目标函数如下:
从最终得到得目标函数可以直观地理解,预测的分值就是尽量逼近真实的已知评分值。有了目标函数之后,下面就开始谈优化方法了,通常的优化方法分为两种:交叉最小二乘法(alternative least squares)和随机梯度下降法(stochastic gradient descent)。
首先介绍交叉最小二乘法,之所以交叉最小二乘法能够应用到这个目标函数主要是因为L对U和V都是凸函数。首先分别对用户因子向量和项目因子向量求偏导,令偏导等于0求驻点,具体解法如下:
上面就是用户因子向量和项目因子向量的更新公式,迭代更新公式即可找到可接受的局部最优解。迭代终止的条件下面会讲到。
接下来讲解随机梯度下降法,这个方法应用的最多。大致思想是让变量沿着目标函数负梯度的方向移动,直到移动到极小值点。直观的表示如下:
其实负梯度的负方向,当函数是凸函数时是函数值减小的方向走;当函数是凹函数时是往函数值增大的方向移动。而矩阵分解的目标函数L是凸函数,因此,通过梯度下降法我们能够得到目标函数L的极小值(理想情况是最小值)。
言归正传,通过上面的讲解,我们可以获取梯度下降算法的因子矩阵更新公式,具体如下:
(3)和(4)中的γ指的是步长,也即是学习速率,它是一个超参数,需要调参确定。对于梯度见(1)和(2)。
下面说下迭代终止的条件。迭代终止的条件有很多种,就目前我了解的主要有
1) 设置一个阈值,当L函数值小于阈值时就停止迭代,不常用
2) 设置一个阈值,当前后两次函数值变化绝对值小于阈值时,停止迭代
3) 设置固定迭代次数
另外还有一个问题,当用户-项目评分矩阵R非常稀疏时,就会出现过拟合(overfitting)的问题,过拟合问题的解决方法就是正则化(regularization)。正则化其实就是在目标函数中加上用户因子向量和项目因子向量的二范数,当然也可以加上一范数。至于加上一范数还是二范数要看具体情况,一范数会使很多因子为0,从而减小模型大小,而二范数则不会它只能使因子接近于0,而不能使其为0,关于这个的介绍可参考论文Regression Shrinkage and Selection via the Lasso。引入正则化项后目标函数变为:
(5)中λ_1和λ_2是指正则项的权重,这两个值可以取一样,具体取值也需要根据数据集调参得到。优化方法和前面一样,只是梯度公式需要更新一下。
矩阵分解算法目前在推荐系统中应用非常广泛,对于使用RMSE作为评价指标的系统尤为明显,因为矩阵分解的目标就是使RMSE取值最小。但矩阵分解有其弱点,就是解释性差,不能很好为推荐结果做出解释。
后面会继续介绍矩阵分解算法的扩展性问题,就是如何加入隐反馈信息,加入时间信息等。
㈡ 如何让Hadoop结合R语言做大数据分析
R语言和Hadoop让我们体会到了,两种技术在各自领域的强大。很多开发人员在计算机的角度,都会提出下面2个问题。问题1: Hadoop的家族如此之强大,为什么还要结合R语言?
问题2: Mahout同样可以做数据挖掘和机器学习,和R语言的区别是什么?下面我尝试着做一个解答:问题1: Hadoop的家族如此之强大,为什么还要结合R语言?
a. Hadoop家族的强大之处,在于对大数据的处理,让原来的不可能(TB,PB数据量计算),成为了可能。
b. R语言的强大之处,在于统计分析,在没有Hadoop之前,我们对于大数据的处理,要取样本,假设检验,做回归,长久以来R语言都是统计学家专属的工具。
c. 从a和b两点,我们可以看出,hadoop重点是全量数据分析,而R语言重点是样本数据分析。 两种技术放在一起,刚好是最长补短!
d. 模拟场景:对1PB的新闻网站访问日志做分析,预测未来流量变化
d1:用R语言,通过分析少量数据,对业务目标建回归建模,并定义指标d2:用Hadoop从海量日志数据中,提取指标数据d3:用R语言模型,对指标数据进行测试和调优d4:用Hadoop分步式算法,重写R语言的模型,部署上线这个场景中,R和Hadoop分别都起着非常重要的作用。以计算机开发人员的思路,所有有事情都用Hadoop去做,没有数据建模和证明,”预测的结果”一定是有问题的。以统计人员的思路,所有的事情都用R去做,以抽样方式,得到的“预测的结果”也一定是有问题的。所以让二者结合,是产界业的必然的导向,也是产界业和学术界的交集,同时也为交叉学科的人才提供了无限广阔的想象空间。问题2: Mahout同样可以做数据挖掘和机器学习,和R语言的区别是什么?
a. Mahout是基于Hadoop的数据挖掘和机器学习的算法框架,Mahout的重点同样是解决大数据的计算的问题。
b. Mahout目前已支持的算法包括,协同过滤,推荐算法,聚类算法,分类算法,LDA, 朴素bayes,随机森林。上面的算法中,大部分都是距离的算法,可以通过矩阵分解后,充分利用MapRece的并行计算框架,高效地完成计算任务。
c. Mahout的空白点,还有很多的数据挖掘算法,很难实现MapRece并行化。Mahout的现有模型,都是通用模型,直接用到的项目中,计算结果只会比随机结果好一点点。Mahout二次开发,要求有深厚的java和Hadoop的技术基础,最好兼有 “线性代数”,“概率统计”,“算法导论” 等的基础知识。所以想玩转Mahout真的不是一件容易的事情。
d. R语言同样提供了Mahout支持的约大多数算法(除专有算法),并且还支持大量的Mahout不支持的算法,算法的增长速度比mahout快N倍。并且开发简单,参数配置灵活,对小型数据集运算速度非常快。
虽然,Mahout同样可以做数据挖掘和机器学习,但是和R语言的擅长领域并不重合。集百家之长,在适合的领域选择合适的技术,才能真正地“保质保量”做软件。
如何让Hadoop结合R语言?
从上一节我们看到,Hadoop和R语言是可以互补的,但所介绍的场景都是Hadoop和R语言的分别处理各自的数据。一旦市场有需求,自然会有商家填补这个空白。
1). RHadoop
RHadoop是一款Hadoop和R语言的结合的产品,由RevolutionAnalytics公司开发,并将代码开源到github社区上面。RHadoop包含三个R包 (rmr,rhdfs,rhbase),分别是对应Hadoop系统架构中的,MapRece, HDFS, HBase 三个部分。
2). RHiveRHive是一款通过R语言直接访问Hive的工具包,是由NexR一个韩国公司研发的。
3). 重写Mahout用R语言重写Mahout的实现也是一种结合的思路,我也做过相关的尝试。
4).Hadoop调用R
上面说的都是R如何调用Hadoop,当然我们也可以反相操作,打通JAVA和R的连接通道,让Hadoop调用R的函数。但是,这部分还没有商家做出成形的产品。
5. R和Hadoop在实际中的案例
R和Hadoop的结合,技术门槛还是有点高的。对于一个人来说,不仅要掌握Linux, Java, Hadoop, R的技术,还要具备 软件开发,算法,概率统计,线性代数,数据可视化,行业背景 的一些基本素质。在公司部署这套环境,同样需要多个部门,多种人才的的配合。Hadoop运维,Hadoop算法研发,R语言建模,R语言MapRece化,软件开发,测试等等。所以,这样的案例并不太多。
㈢ 如何用R实现协同过滤的MapRece算法
在本文中矩阵用斜体大写字母表示(如:R),标量用小写字母表示(如:i,j)。给定一个矩阵R, Rij表示它的一个元素,Ri.表示矩阵R的第i行,R.j表示矩阵R的第j列,RT 表示矩阵R的转置。R-1 表示矩阵R的逆。在本文中给定的矩阵R表示具有m个用户
㈣ 如何评价一个好的推荐系统算法 – 我爱机器学习
如何更好地掌握机器学习Colorado是伯克利大学的在读博士,同时也是Metacademy的创始人。Metacademy是一个优秀的开源平台,许多专业人员共同在这个平台上编写wiki文章。目前,这些文章主要围绕着机器学习和人工智能这两个主题。在Colorado的建议中,更好地学习机器学习的方法就是不断的通过书本学习。他认为读书的目的就是让心中有书。一个博士在读生给出这样的建议并不令人惊讶,以前本站可能还推荐过类似的建议。这个建议还可以,但我不认为适用每个人。如果你是个开发者,想实现机器学习的算法。下面列出的书籍是一个很好的参考,可以从中逐步学习。机器学习路线图他的关于机器学习的路线图分为5个级别,每个级别都对应一本书必须要掌握的书。这5个级别如下:Level0(新手):阅读《DataSmart:》。需要了解电子表格、和一些算法的高级数据流。Level1(学徒):阅读《MachineLearningwithR》。学习在不同的情况下用R语言应用不同的机器学习算法。需要一点点基本的编程、线性代数、微积分和概率论知识。Level2(熟练工):阅读《》。从数学角度理解机器学习算法的工作原理。理解并调试机器学习方法的输出结果,同时对机器学习的概念有更深的了解。需要有算法、较好的线性代数、一些向量积分、一些算法实现经验。Level3(大师):阅读《ProbabilisticGraphicalModels:PrinciplesandTechniques》。深入了解一些高级主题,如凸优化、组合优化、概率论、微分几何,及其他数学知识。深入了解概率图模型,了解何时应该使用以及如何解释其输出结果。Leval4(宗师):随便去学吧,记得反馈社区。Colorado针对每个级别中列出的书中章节阅读建议,并给出了建议去了解的相关顶级项目。Colorado后来重新发布了一篇博客,其中对这个路线图做了一点修改。他移除了最后一个级别,并如下定义了新的级别:好奇者、新手、学徒、熟练工、大师。他说道,Level0中的机器学习好奇者不应该阅读相关书籍,而是浏览观看与机器学习有关的顶级视频。机器学习中被忽视的主题ScottLocklin也阅读了Colorado的那篇博客,并从中受到了启发,写了一篇相应的文章,名为“机器学习中被忽视的想法”(文中有BorisArtzybasheff绘制的精美图片)。Scott认为Colorado给出的建议并没有充分的介绍机器学习领域。他认为很少有书籍能做到这一点,不过他还是喜欢PeterFlach所着的《MachineLearning:》这本书,因为书中也接触了一些隐晦的技术。Scott列出了书本中过分忽视的内容。如下所示:实时学习:对流数据和大数据很重要,参见VowpalWabbit。强化学习:在机器人方面有过讨论,但很少在机器学习方面讨论。“压缩”序列预测技术:压缩数据发现学习模式。参见CompLearn。面向时间序列的技术。一致性预测:为实时学习精确估计模型。噪声背景下的机器学习:如NLP和CV。特征工程:机器学习成功的关键。无监督和半监督学习。这个列表很好的指出了机器学习中没有注意到的领域。最后要说明的是,我自己也有一份关于机器学习的路线图。与Colorado一样,我的路线图仅限于分类/回归类型的监督机器学习,但还在完善中,需要进一步的调查和添加所有感兴趣的主题。与前面的“读这些书就可以了”不同,这个路线图将会给出详细的步骤。
㈤ 大数据具体是学习什么内容呢主要框架是什么
首先,学习大数据是需要有java,python和R语言的基础。
1) Java学习到什么样的程度才可以学习大数据呢?
java需要学会javaSE即可。javaweb,javaee对于大数据用不到。学会了javase就可以看懂hadoop框架。
2) python是最容易学习的,难易程度:python java Scala 。
python不是比java更直观好理解么,因为会了Python 还是要学习java的,你学会了java,再来学习python会很简单的,一周的时间就可以学会python。
3) R语言也可以学习,但是不推荐,因为java用的人最多,大数据的第一个框架Hadoop,底层全是Java写的。就算学会了R还是看不懂hadoop。
java在大数据中的作用是构成大数据的语言,大数据的第一个框架Hadoop以及其他大数据技术框架,底层语言全是Java写的,所以推荐首选学习java
大数据开发学习路线:
第一阶段:Hadoop生态架构技术
1、语言基础
Java:多理解和实践在Java虚拟机的内存管理、以及多线程、线程池、设计模式、并行化就可以,不需要深入掌握。
Linux:系统安装、基本命令、网络配置、Vim编辑器、进程管理、Shell脚本、虚拟机的菜单熟悉等等。
Python:基础语法,数据结构,函数,条件判断,循环等基础知识。
2、环境准备
这里介绍在windows电脑搭建完全分布式,1主2从。
VMware虚拟机、Linux系统(Centos6.5)、Hadoop安装包,这里准备好Hadoop完全分布式集群环境。
3、MapRece
MapRece分布式离线计算框架,是Hadoop核心编程模型。
4、HDFS1.0/2.0
HDFS能提供高吞吐量的数据访问,适合大规模数据集上的应用。
5、Yarn(Hadoop2.0)
Yarn是一个资源调度平台,主要负责给任务分配资源。
6、Hive
Hive是一个数据仓库,所有的数据都是存储在HDFS上的。使用Hive主要是写Hql。
7、Spark
Spark 是专为大规模数据处理而设计的快速通用的计算引擎。
8、SparkStreaming
Spark Streaming是实时处理框架,数据是一批一批的处理。
9、SparkHive
Spark作为Hive的计算引擎,将Hive的查询作为Spark的任务提交到Spark集群上进行计算,可以提高Hive查询的性能。
10、Storm
Storm是一个实时计算框架,Storm是对实时新增的每一条数据进行处理,是一条一条的处理,可以保证数据处理的时效性。
11、Zookeeper
Zookeeper是很多大数据框架的基础,是集群的管理者。
12、Hbase
Hbase是一个Nosql数据库,是高可靠、面向列的、可伸缩的、分布式的数据库。
13、Kafka
kafka是一个消息中间件,作为一个中间缓冲层。
14、Flume
Flume常见的就是采集应用产生的日志文件中的数据,一般有两个流程。
一个是Flume采集数据存储到Kafka中,方便Storm或者SparkStreaming进行实时处理。
另一个流程是Flume采集的数据存储到HDFS上,为了后期使用hadoop或者spark进行离线处理。
第二阶段:数据挖掘算法
1、中文分词
开源分词库的离线和在线应用
2、自然语言处理
文本相关性算法
3、推荐算法
基于CB、CF,归一法,Mahout应用。
4、分类算法
NB、SVM
5、回归算法
LR、DecisionTree
6、聚类算法
层次聚类、Kmeans
7、神经网络与深度学习
NN、Tensorflow
以上就是学习Hadoop开发的一个详细路线,如果需要了解具体框架的开发技术,可咨询加米谷大数据老师,详细了解。
学习大数据开发需要掌握哪些技术呢?
(1)Java语言基础
Java开发介绍、熟悉Eclipse开发工具、Java语言基础、Java流程控制、Java字符串、Java数组与类和对象、数字处理类与核心技术、I/O与反射、多线程、Swing程序与集合类
(2)HTML、CSS与Java
PC端网站布局、HTML5+CSS3基础、WebApp页面布局、原生Java交互功能开发、Ajax异步交互、jQuery应用
(3)JavaWeb和数据库
数据库、JavaWeb开发核心、JavaWeb开发内幕
Linux&Hadoop生态体系
Linux体系、Hadoop离线计算大纲、分布式数据库Hbase、数据仓库Hive、数据迁移工具Sqoop、Flume分布式日志框架
分布式计算框架和Spark&Strom生态体系
(1)分布式计算框架
Python编程语言、Scala编程语言、Spark大数据处理、Spark—Streaming大数据处理、Spark—Mlib机器学习、Spark—GraphX 图计算、实战一:基于Spark的推荐系统(某一线公司真实项目)、实战二:新浪网(www.sina.com.cn)
(2)storm技术架构体系
Storm原理与基础、消息队列kafka、Redis工具、zookeeper详解、大数据项目实战数据获取、数据处理、数据分析、数据展现、数据应用
大数据分析—AI(人工智能)Data
Analyze工作环境准备&数据分析基础、数据可视化、Python机器学习
以上的回答希望对你有所帮助
㈥ 推荐算法如何提前划分制造同类目日志
做推荐算法的质量工作将近一年,这一年尝试了很多东西,踩了不少坑,也对推荐的评测工作稍微有了些自己的心得,现在分享出来,希望能和做这块工作的同学一起交流、探讨,也欢迎多拍砖,多提意见。
推荐系统
目前推荐技术的应用已经非常较普及了,新闻、商品、问答、音乐,几乎都会用到推荐算法来为你呈现内容。下面是淘宝、知乎、微博三个app的推荐模型,可以看到推荐都在非常重要的位置。
在介绍推荐算法评测之前,我先简单说下推荐系统,这里我以商品为例,简单描述下推流程,让大家更明白一些,一般推荐主要包含以下步骤:
召回->打分排序->透出
召回
召回阶段通常的手段是协同过滤比较场景的i2i,u2i等这种x2x(有兴趣可以看下我写的基于itembase的推荐),也有使用embedding的方式通过向量之间的距离进行召回。以i2i为例,假如现在要针对我推荐一个商品,那么首先要找到我感兴趣的物品 ,这些数据是通过我的历史行为来进行获取,比如拿到我最近一段时间内的点击、加购、收藏、购买的物品,将这些商品做为trigger进行召回,协同算法的具体就不再这里叙述了,有兴趣可以看下链接,最终我们按照协同过滤算法算出商品之间的相似分值,然后按照一定数量进行截断,因为这里截断也是依靠分数来进行的,所以一般这一步也称粗排。这样召回截断就完成了。
打分
召回完商品后,我们需要对这些商品进行再一次的精排,这里需要用模型来预估ctr,一般情况下LR、GBDT、FM用的比较多,这里深度网络相对用的少,主要为了考虑到性能,尤其是rt,因为绝大部分的精排都是需要实时预测的,所有对耗时有一定的要求。继续说下模型预测的步骤,首先针对召回的商品进行特征的补充,例如该商品的一级类目、叶子类目(一级类目代表比较,叶子类目代表最细分的类目)、被多少用户购买等,然后再加入人的特征,例如性别、年龄、收入、对类目的偏好等,然后将这些信息做为feature,用模型进行预测,然后根据模型预测的结果进行排序,输出。
模型
打分过程中的模型是需要提前训练和部署,训练集的来源就是用户的实时行为加上用户和商品的特征。feature的构成是用户的特征和商品的特征,label则是用户是否点击了该商品。
质量方案
接下来说下如何保证这块的质量。由于推荐系统最终对用户需要提供实时的服务化,因此免不了有工程端的技术需要一起配合。因此我这块主要分为两个维度来开展,一方面是工程端的质量保证,一方面是算法侧的质量保证。
工程端质量
这一块可以将算法当成一个黑盒子,只把他当成一个有结果返回的接口。针对这方面前人已经有了丰富的经验,我们可以做接口的单元测试和冒烟测试,另外就是压测,在预估的qps下看rt是否满足业务方的要求,load是否过大,超时和错误的比例是否符合一定的预期。这里就不细说了,重点说说第二部分。
算法端质量
这里我再进行细分一下,分为三部分介绍:算法数据、算法模型、算法效果;
算法数据:
大家都知道算法在做训练前数据的处理部分非常的重要,有兴趣可以看下特征工程相关的内容,数据的来源,特征的构造,数据抽取、加工整个的过程都有可能会出现错误,而且数据一般都是存储在分布式系统数据库里,因此需要借助类似hive这样的工具将sql转换成MapRece的任务去进行离线的计算,离线任务的产出通常会耗费不少的时间,而对于一些日更新的模型通过对数据对产出时间有一定的要求。因此数据这块最主要的保证点为:数据本身的质量,和数据的产出时间。数据本身的质量一般可以通过数据大小的整体抖动,以及关键字段是否为空,主键是否重复,做法比较简单可以通过简单sql或者udf来完成,然后借助工程能力做到预警、检查、出报表等。
算法模型:
模型的本身在迭代过程中也是需要关注的,不过通常算法同学的训练优化也是参考这些指标,所以我们也可以把这几个指标做为模型本身好坏的评估。具体为:准确率、召回率、AUC。
算法效果:
那么这个算法推荐出的效果究竟好不好呢,这个是一个非常主观的事情,每个人的感受也不是一样的,但是我们仍然要衡量它的好坏,这里我参考业内学者的推荐书籍以及自己的一些摸索,总结出下面一些方法,供大家参考。
人工评测:
顾名思义,邀请一帮人来对你的推荐系统的结果进行评测。这里想法来自于我在做翻译评测时期的经验,首先这个成本比较高,另外就是参杂了人的主观性非常的高,翻译的好坏我们可以通过制定一些细致的规则来进行约束,但是推荐的好坏我们却不好制定详细的规则,另外就是推荐之前的用户行为如何模拟,如何让评测者进行感知,这些都是比较难的,并且和基准的对比也不是很好做,所以这里不是很推荐用这个方法,但是还是要提一下。
指标评估:
指标化推荐结果,也就是将推荐的结果用不同的指标来进行说明,通过这些指标,你可以更加的了解你的推荐系统,部分指标不一定越高越好,但是你需要让它保持在一定的范围内。说到具体的例子的时候,我会提一下。下面我们看下这些指标。
覆盖率
定义:
推荐系统能够推荐出来的“商品/类目”占“总商品/类目”集合的比例。假设系统的用户集合为U,推荐系统给每个用户推荐一个长度为N的物品列表R(u) ,总物品为N。那么:
覆盖率 = ΣR(u)N
Σ
R
(
u
)
N
意义:
描述推荐结系统对物品长尾发掘能力;
举个例子,淘宝上商品千千万万,推荐系统能否保证让新的一些商品有足够的机会曝光出去呢?还是有些商品永远都无法得到推荐曝光的机会。这个指标反应的就是这个情况,显然物品的覆盖率是达不到100%的,但是我们可以看类目的覆盖率来进行衡量,假设全网所有的一级大类目一共2千个(和全网上亿的物品相比非常的少),那么推荐系统一天之内推荐出去的商品对应的一级类目,这个就是我们要衡量的标准。如果覆盖率
㈦ 大数据处理需要用到的九种编程语言
大数据处理需要用到的九种编程语言
随着大数据的热潮不断升温,几乎各个领域都有洪水倾泻般的信息涌来,面对用户成千上万的浏览记录、记录行为数据,如果就单纯的Excel来进行数据处理是远远不能满足的。但如果只用一些操作软件来分析,而不怎么如何用逻辑数据来分析的话,那也只是简单的数据处理。
替代性很高的工作,而无法深入规划策略的核心。
当然,基本功是最不可忽略的环节,想要成为数据科学家,对于这几个程序你应该要有一定的认识:
R若要列出所有程序语言,你能忘记其他的没关系,但最不能忘的就是R。从1997年悄悄地出现,最大的优势就是它免费,为昂贵的统计软件像是Matlab或SAS的另一种选择。
但是在过去几年来,它的身价大翻转,变成了资料科学界眼中的宝。不只是木讷的统计学家熟知它,包括WallStreet交易员、生物学家,以及硅谷开发者,他们都相当熟悉R。多元化的公司像是Google、Facebook、美国银行以及NewYorkTimes通通都使用R,它的商业效用持续提高。
R的好处在于它简单易上手,透过R,你可以从复杂的数据集中筛选你要的数据,从复杂的模型函数中操作数据,建立井然有序的图表来呈现数字,这些都只需要几行程序代码就可以了,打个比方,它就像是好动版本的Excel。
R最棒的资产就是活跃的动态系统,R社群持续地增加新的软件包,还有以内建丰富的功能集为特点。目前估计已有超过200万人使用R,最近的调查显示,R在数据科学界里,到目前为止最受欢迎的语言,占了回复者的61%(紧追在后的是39%的Python)。
它也吸引了WallStreet的注目。传统而言,证券分析师在Excel档从白天看到晚上,但现在R在财务建模的使用率逐渐增加,特别是可视化工具,美国银行的副总裁NiallO’Conno说,“R让我们俗气的表格变得突出”。
在数据建模上,它正在往逐渐成熟的专业语言迈进,虽然R仍受限于当公司需要制造大规模的产品时,而有的人说他被其他语言篡夺地位了。
“R更有用的是在画图,而不是建模。”顶尖数据分析公司Metamarkets的CEO,MichaelDriscoll表示,
“你不会在Google的网页排名核心或是Facebook的朋友们推荐算法时看到R的踪影,工程师会在R里建立一个原型,然后再到Java或Python里写模型语法”。
举一个使用R很有名的例子,在2010年时,PaulButler用R来建立Facebook的世界地图,证明了这个语言有多丰富多强大的可视化数据能力,虽然他现在比以前更少使用R了。
“R已经逐渐过时了,在庞大的数据集底下它跑的慢又笨重”Butler说。
所以接下来他用什么呢?
Python如果说R是神经质又令人喜爱的Geek,那Python就是随和又好相处的女生。
Python结合了R的快速、处理复杂数据采矿的能力以及更务实的语言等各个特质,迅速地成为主流,Python比起R,学起来更加简单也更直观,而且它的生态系统近几年来不可思议地快速成长,在统计分析上比起R功能更强。
Butler说,“过去两年间,从R到Python地显着改变,就像是一个巨人不断地推动向前进”。
在数据处理范畴内,通常在规模与复杂之间要有个取舍,而Python以折衷的姿态出现。IPythonNotebook(记事本软件)和NumPy被用来暂时存取较低负担的工作量,然而Python对于中等规模的数据处理是相当好的工具;Python拥有丰富的资料族,提供大量的工具包和统计特征。
美国银行用Python来建立新产品和在银行的基础建设接口,同时也处理财务数据,“Python是更广泛又相当有弹性,所以大家会对它趋之若鹜。”O’Donnell如是说。
然而,虽然它的优点能够弥补R的缺点,它仍然不是最高效能的语言,偶尔才能处理庞大规模、核心的基础建设。Driscoll是这么认为的。
Julia今日大多数的数据科学都是透过R、Python、Java、Matlab及SAS为主,但仍然存在着鸿沟要去弥补,而这个时候,新进者Julia看到了这个痛点。
Julia仍太过于神秘而尚未被业界广泛的采用,但是当谈到它的潜力足以抢夺R和Python的宝座时,数据黑客也难以解释。原因在于Julia是个高阶、不可思议的快速和善于表达的语言,比起R要快的许多,比起Python又有潜力处理更具规模的数据,也很容易上手。
“Julia会变的日渐重要,最终,在R和Python可以做的事情在Julia也可以”。Butler是这么认为的。
就现在而言,若要说Julia发展会倒退的原因,大概就是它太年轻了。Julia的数据小区还在初始阶段,在它要能够和R或Python竞争前,它还需要更多的工具包和软件包。
Driscoll说,它就是因为它年轻,才会有可能变成主流又有前景。
JavaDriscoll说,Java和以Java为基础的架构,是由硅谷里最大的几家科技公司的核心所建立的,如果你从Twitter、Linkedin或是Facebook里观察,你会发现Java对于所有数据工程基础架构而言,是非常基础的语言。
Java没有和R和Python一样好的可视化功能,它也不是统计建模的最佳工具,但是如果你需要建立一个庞大的系统、使用过去的原型,那Java通常会是你最基的选择。
Hadoop and Hive
为了迎合大量数据处理的需求,以Java为基础的工具群兴起。Hadoop为处理一批批数据处理,发展以Java为基础的架构关键;相较于其他处理工具,Hadoop慢许多,但是无比的准确和可被后端数据库分析广泛使用。和Hive搭配的很好,Hive是基于查询的架构下,运作的相当好。
Scala又是另一个以Java为基础的语言,和Java很像,对任何想要进行大规模的机械学习或是建立高阶的算法,Scala会是逐渐兴起的工具。它是善于呈现且拥有建立可靠系统的能力。
“Java像是用钢铁建造的;Scala则是让你能够把它拿进窑烤然后变成钢的黏土”Driscoll说。
Kafka andStorm说到当你需要快速的、实时的分析时,你会想到什么?Kafka将会是你的最佳伙伴。其实它已经出现五年有了,只是因为最近串流处理兴起才变的越来越流行。
Kafka是从Linkedin内诞生的,是一个特别快速的查询讯息系统。Kafka的缺点呢?就是它太快了,因此在实时操作时它会犯错,有时候会漏掉东西。
鱼与熊掌不可兼得,“必须要在准确度跟速度之间做一个选择”,Driscoll说。所以全部在硅谷的科技大公司都利用两个管道:用Kafka或Storm处理实时数据,接下来打开Hadoop处理一批批处理数据系统,这样听起来有点麻烦又会有些慢,但好处是,它非常非常精准。
Storm是另一个从Scala写出来的架构,在硅谷逐渐大幅增加它在串流处理的受欢迎程度,被Twitter并购,这并不意外,因为Twitter对快速事件处理有极大的兴趣。
MatlabMatlab可以说是历久不衰,即使它标价很高;在非常特定的利基市场它使用的相当广泛,包括密集的研究机器学习、信号处理、图像辨识等等。
OctaveOctave和Matlab很像,除了它是免费的之外。然而,在学术信号处理的圈子,几乎都会提到它。
GOGO是另一个逐渐兴起的新进者,从Google开发出来的,放宽点说,它是从C语言来的,并且在建立强大的基础架构上,渐渐地成为Java和Python的竞争者。
这么多的软件可以使用,但我认为不见得每个都一定要会才行,知道你的目标和方向是什么,就选定一个最适合的工具使用吧!可以帮助你提升效率又达到精准的结果。
以上是小编为大家分享的关于大数据处理需要用到的九种编程语言的相关内容,更多信息可以关注环球青藤分享更多干货
㈧ 网易云音乐的歌单推荐算法是怎样的
“这个只能说是理论基础。歌曲不考虑热门冷门,同时不考虑用户数和歌曲数计算复杂度的话第一一天内离线数据计算不完的(当然网易云音乐用户量小全量暴力计算当我没说),实际应用起来复杂很多了。现在的推荐系统并不存在一种算法通吃,除了算法上的问题,还需要考虑基础数据的影响因素,比如两张歌单有多少歌曲重合,歌单的质量是怎么样的。” 我上一帖也说了,'向量夹角余弦' 解决的是‘量化顾客口味相似度’的问题(是最经典的解法,也有别的解法),不是有了它就能轻易实现第一类算法的,难处在后面咯。继续第一类算法的话题,目标“每日歌曲推荐”(其实题主感兴趣的是这个吧,旁边‘根据你喜欢的xxx推荐的yyy歌单’我觉得不咋样)。首先就是如何定维度。 直接用‘歌’当维度是不行的,第一是太多了算不过来,第二维度数一直猛涨也不是个事。用‘歌单’或者‘专辑’,‘演唱/演奏者’呢?也有类似的困难。说到这里大家应该都意识到了,咱不是还有‘tag’嘛!云音乐初期,tag是可以由大家自己填的,我记得我填过‘莫扎特’,‘钢协’,‘交响’这样的tag,现在都不见了吧。一段时间之后,tag无法自填了,只能从云音乐给的tag lib中选,这肯定有原因的。我的推测就是,他们需要用tag来当作维度,所以不希望tag数经常变化。第一阶段,他们需要搜集用户的输入来做出tag lib,第二阶段,他们构建了多维度空间,就不希望再动维度了,因此关闭了自填tag的功能。假设就用tag做为维度,那么第二个难处在于,维度上的'刻度'必须有正有负才好使,用户没有机会直接表达对tag的好恶(不能收藏,播放,跳过一个tag),如何定刻度呢。我认为每一首歌背后是有其所属tags这个属性的,这个属性在UI上看不到很可能是因为比较容易引起口水。歌往往隶属于很多歌单,而那些歌单都是有tags的,根据那些歌单的播放数收藏数分享数可以决定其'权威性',取'权威性'高的歌单的tag,就可以得到每首歌的tag属性。然后用户在表达对一首首歌的好恶的时候,其实就不知不觉地影响了他在相应维度上的刻度。假设维度和刻度都这样解决,那么我们可以对每个用户做出‘口味向量’了,接下来的难处是,啥时候算/如何保存‘用户相似性’?所有用户两两算一下相似性,存为一个NxN的矩阵。
㈨ 技术解析Transwarp Inceptor是怎样炼成的
技术解析Transwarp Inceptor是怎样炼成的
当前Hadoop技术蓬勃发展,用于解决大数据的分析难题的技术平台开始涌现。Spark凭借性能强劲、高度容错、调度灵活等技术优势已渐渐成为主流技术,业界大部分厂商都提供了基于Spark的技术方案和产品。根据Databricks的统计,目前有11个商业的Spark版本。
在使用Spark作出计算平台的解决方案中,有两种主流编程模型,一类是基于SparkAPI或者衍生出来的语言,另一种是基于SQL语言。SQL作为数据库领域的事实标准语言,相比较用API(如MapReceAPI,SparkAPI等)来构建大数据分析的解决方案有着先天的优势:一是产业链完善,各种报表工具、ETL工具等可以很好的对接;二是用SQL开发有更低的技术门槛;三是能够降低原有系统的迁移成本等。因此,SQL语言也渐渐成为大数据分析的主流技术标准。本文将深入解析Inceptor的架构、编程模型和编译优化技术,并提供基准测试在多平台上的性能对比数据。
1.Inceptor架构
TranswarpInceptor是基于Spark的分析引擎,如图1所示,从下往上有三层架构:最下面是存储层,包含分布式内存列式存储(TranswarpHolodesk),可建在内存或者SSD上;中间层是Spark计算引擎层,星环做了大量的改进保证引擎有超强的性能和高度的健壮性;最上层包括一个完整的SQL99和PL/SQL编译器、统计算法库和机器学习算法库,提供完整的R语言访问接口。
TranswarpInceptor可以分析存储在HDFS、HBase或者TranswarpHolodesk分布式缓存中的数据,可以处理的数据量从GB到数十TB,即使数据源或者中间结果的大小远大于内存容量也可高效处理。另外TranswarpInceptor通过改进Spark和YARN的组合,提高了Spark的可管理性。同时星环不仅仅是将Spark作为一个缺省计算引擎,也重写了SQL编译器,提供更加完整的SQL支持。
同时,TranswarpInceptor还通过改进Spark使之更好地与HBase融合,可以为HBase提供完整的SQL支持,包括批量SQL统计、OLAP分析以及高并发低延时的SQL查询能力,使得HBase的应用可以从简单的在线查询应用扩展到复杂分析和在线应用结合的混合应用中,大大拓展了HBase的应用范围。
2.编程模型
TranswarpInceptor提供两种编程模型:一是基于SQL的编程模型,用于常规的数据分析、数据仓库类应用市场;二是基于数据挖掘编程模型,可以利用R语言或者SparkMLlib来做一些深度学习、数据挖掘等业务模型。
2.1SQL模型
TranswarpInceptor实现了自己的SQL解析执行引擎,可以兼容SQL99和HiveQL,自动识别语法,因此可以兼容现有的基于Hive开发的应用。由于TranswarpInceptor完整支持标准的SQL 99标准,传统数据库上运行的业务可以非常方便的迁移到Transwarp Inceptor系统上。此外Transwarp Inceptor支持PL/SQL扩展,传统数据仓库的基于PL/SQL存储过程的应用(如ETL工具)可以非常方便的在Inceptor上并发执行。另外Transwarp Inceptor支持部分SQL 2003标准,如窗口统计功能、安全审计功能等,并对多个行业开发了专门的函数库,因此可以满足多个行业的特性需求。
2.2数据挖掘计算模型
TranswarpInceptor实现了机器学习算法库与统计算法库,支持常用机器学习算法并行化与统计算法并行化,并利用Spark在迭代计算和内存计算上的优势,将并行的机器学习算法与统计算法运行在Spark上。例如:机器学习算法库有包括逻辑回归、朴素贝叶斯、支持向量机、聚类、线性回归、关联挖掘、推荐算法等,统计算法库包括均值、方差、中位数、直方图、箱线图等。TranswarpInceptor可以支持用R语言或者SparkAPI在平台上搭建多种分析型应用,例如用户行为分析、精准营销、对用户贴标签、进行分类。
3.SQL编译与优化
TranswarpInceptor研发了一套完整的SQL编译器,包括HiveQL解析器、SQL标准解析器和PL/SQL解析器,将不同的SQL语言解析成中间级表示语言,然后经过优化器转换成物理执行计划。SQL语言解析后经过逻辑优化器生成中间级表示语言,而中间表示语言再经过物理优化器生成最终的物理执行计划。从架构上分,逻辑优化器和物理优化器都包含基于规则的优化模块和基于成本的优化模块。
为了和Hadoop生态更好的兼容,Inceptor为一个SQL查询生成MapRece上的执行计划和Spark上的执行计划,并且可以通过一个SET命令在两种执行引擎之间切换。
3.1SQL编译与解析
TranswarpInceptor的SQL编译器会根据输入的SQL查询的类型来自动选择不同的解析器,如PL/SQL存储过程会自动进入PL/SQL解析器并生成一个SparkRDD的DAG从而在Spark平台上并行计算,标准SQL查询会进入SQL标准解析器生成Spark或MapRece执行计划。由于HiveQL和标准的SQL有所出入,为了兼容HiveQL,Transwarp Inceptor保留了HiveQL解析器,并可以对非标准SQL的Hive查询生成Spark或者Map Rece执行计划。
3.1.1SQL标准解析器
TranswarpInceptor构建了自主研发的SQL标准解析器,用于解析SQL99& SQL 2003查询并生成Spark和Map Rece的执行计划。词法和语法分析层基于Antlr语法来构建词法范式,通过Antlr来生成抽象语义树,并会通过一些上下文的语义来消除冲突并生成正确的抽象语义树。语义分析层解析上层生成的抽象语义树,根据上下文来生成逻辑执行计划并传递给优化器。首先Transwarp Inceptor会将SQL解析成TABLE SCAN、SELECT、FILTER、JOIN、UNION、ORDER BY、GROUP BY等主要的逻辑块,接着会根据一些Meta信息进一步细化各个逻辑块的执行计划。如TABLE SCAN会分成块读取、块过滤、行级别过滤、序列化等多个执行计划。
3.1.2PL/SQL解析器
PL/SQL是Oracle对SQL语言的模块化扩展,已经在很多行业中有大规模的应用,是数据仓库领域的重要编程语言。
为了让存储过程在Spark上有较好的性能,PL/SQL解析器会根据存储过程中的上下文关系来生成SQLDAG,然后对各SQL的执行计划生成的RDD进行二次编译,通过物理优化器将一些没有依赖关系的RDD进行合并从而生成一个最终的RDDDAG。因此,一个存储过程被解析成一个大的DAG,从而stage之间可以大量并发执行,避免了多次执行SQL的启动开销并保证了系统的并发性能。
解析并生成SQL级别的执行计划
3.2SQL优化器
TranswarpInceptor使用Spark作为默认计算引擎,并且开发了完善的SQL优化器,因此在大量的客户案例性能测试中,TranswarpInceptor的性能领先MapRece 10-100倍,并超越部分开源MPP数据库。SQL优化器对平台性能的提升居功至伟。
3.2.1基于规则的优化器(RuleBasedOptimizer)
目前为止,TranswarpInceptor共实现了一百多个优化规则,并且在持续的添加新的规则。按照功能划分,这些规则主要分布在如下几个模块:
文件读取时过滤
在文件读取时过滤数据能够最大化的减少参与计算的数据量从而最为有效的提高性能,因此TranswarpInceptor提供了多个规则用于生成表的过滤条件。对于一些SQL中的显示条件,TranswarpInceptor会尽量将过滤前推到读取表中;而对于一些隐式的过滤条件,如可以根据joinkey生成的过滤规则,Inceptor会根据语义保证正确性的前提下进行规则生成。
过滤条件前置
TranswarpInceptor能够从复杂的组合过滤条件中筛选出针对特定表的过滤规则,然后通过SQL语义来确定是否能将过滤条件前推到尽量早的时候执行。如果有子查询,过滤条件可以递归前推入最低层的子查询中,从而保证所有的冗余数据被删除。
超宽表的读取过滤
对一些列超多的表进行处理的时候,TranswarpInceptor首先会根据SQL语义来确定要读取的列,并在读取表的时候进行跨列读取减少IO和内存消耗。而如果表有过滤条件,Inceptor会做进一步优化,首先只读取过滤条件相关的列来确定该行记录是否需要被选择,如果不是就跳过当前行的所有列,因此能够最大程度上的减少数据读取。在一些商业实施中,这些优化规则能够带来5x-10x的性能提升。
Shuffle Stage的优化与消除
Spark的shuffle实现的效率非常低,需要把结果写磁盘,然后通过HTTP传输。TranswarpInceptor添加了一些shuffle消除的优化规则,对SQL的DAG中不必要或者是可以合并的shufflestage进行消除或者合并。对于必须要做Shuffle的计算任务,Inceptor通过DAGScheler来提高shuffle的效率:MapTask会直接将结果返回给DAGScheler,然后DAGScheler将结果直接交给Rece Task而不是等待所有Map Task结束,这样能够非常明显的提升shuffle阶段的性能。
Partition消除
TranswarpInceptor提供单一值Partition和RangePartition,并且支持对Partition建Bucket来做多次分区。当Partition过多的时候,系统的性能会因为内存消耗和调度开销而损失。因此,Inceptor提供了多个规则用于消除不必要的Partition,如果上下文中有隐式的对Partition的过滤条件,Inceptor也会生成对partition的过滤规则。
3.2.2基于成本的优化器(CostBasedOptimizer)
基于规则的优化器都是根据一些静态的信息来产生的,因此很多和动态数据相关的特性是不能通过基于规则的优化来解决,因此TranswarpInceptor提供了基于成本的优化器来做二次优化。相关的原始数据主要来自Meta-store中的表统计信息、RDD的信息、SQL上下文中的统计信息等。依赖于这些动态的数据,CBO会计算执行计划的物理成本并选择最有效的执行计划。一些非常有效的优化规则包括如下几点:
JOIN顺序调优
在实际的案例中,join是消耗计算量最多的业务,因此对join的优化至关重要。在多表JOIN模型中,TranswarpInceptor会根据统计信息来预估join的中间结果大小,并选择产生中间数据量最小的join顺序作为执行计划。
JOIN类型的选择
TranswarpInceptor支持Left-mostJoinTree 和 Bush Join Tree,并且会根据统计信息来选择生成哪种Join模型有最佳性能。此外,Transwarp Inceptor会根据原始表或者中间数据的大小来选择是否开启针对数据倾斜模型下的特殊优化等。此外,针对HBase表是否有索引的情况,Transwarp Inceptor会在普通Join和Look-up Join间做个均衡的选择。
并发度的控制
Spark通过线程级并发来提高性能,但是大量的并发可能会带来不必要的调度开销,因此不同的案例在不同并发度下会有最佳性能。TranswarpInceptor通过对RDD的一些属性进行推算来选择最佳并发控制,对很多的案例有着2x-3x的性能提升。
4.TranswarpHolodesk内存计算引擎
为了有效的降低SQL分析的延时,减少磁盘IO对系统性能的影响,星环科技研发了基于内存或者SSD的存储计算引擎TranswarpHolodesk,通过将表数据直接建在内存或者SSD上以实现SQL查询全内存计算。另外TranswarpHolodesk增加了数据索引功能,支持对多个数据列建索引,从而更大程度的降低了SQL查询延时。
4.1存储格式
TranswarpHolodesk基于列式存储做了大量的原创性改进带来更高的性能和更低的数据膨胀率。首先数据被序列化后存储到内存或SSD上以节省者资源占用。如图3所示,每个表的数据被存储成若干个Segment,每个Segment被划分成若干个Block,每个Block按照列方式存储于SSD或内存中。另外每个Block的头部都加上Min-MaxFilter和BloomFilter用于过滤无用的数据块,减少不必要的数据进入计算阶段。
TranswarpHolodesk根据查询条件的谓词属性对每个数据块的对应列构建数据索引,索引列采用自己研发的Trie结构进行组织存储,非索引列采用字典编码的方式进行组织存储。Trie不仅能对具有公共前缀的字符串进行压缩,而且可以对输入的字符串排序,从而可以利用二分查找快速查询所需数据的位置,从而快速响应查询需求。
HDFS2.6支持StorageTier让应用程序可以选择存储层为磁盘或者SSD,但是没有专用的存储格式设计是无法有效利用SSD的读写吞吐量和低延,因此现有的Text以及行列混合(ORC/Parquet)都不能有效的利用SSD的高性能。为此验证存储结构对性能的影响,我们将HDFS构建在SSD上并选用某基准测试来做了进一步的性能对比,结果如图4所示:采用文本格式,PCI-ESSD带来的性能提升仅1.5倍;采用专为内存和SSD设计的Holodesk列式存储,其性能相比较SSD上的HDFS提升高达6倍。
4.2性能优势
某运营商客户在12台x86服务器上搭建了TranswarpInceptor,将TranswarpHolodesk配置在PCIE-SSD上,并与普通磁盘表以及DB2来做性能对比测试。最终测试数据如图5所示:
在纯粹的count测试一项,Holodesk性能相对于磁盘表最高领先32倍;对于join测试一项,TranswarpHolodesk最高领先磁盘表多达12倍;在单表聚合测试中,Holodesk提升倍数达10~30倍。另外TranswarpHolodesk在和DB2的对比中也表现优秀,两个复杂SQL查询在DB2数据库中需要运行1小时以上,但是在使用TranswarpHolodesk均是分钟级和秒级就返回结果。
内存的价格大约是同样容量SSD的十倍左右,为了给企业提供更高性价比的计算方案,TranswarpHolodesk针对SSD进行了大量的优化,使得应用在SSD上运行具有与在内存上比较接近的性能,从而为客户提供了性价比更高的计算平台。
在对TPC-DS的IO密集型查询的测试中,无论上构建在PCI-ESSD还是内存上,Holodesk对比磁盘表有一个数量级上的性能提升;而SSD上的Holodesk性能只比内存差10%左右。
5.稳定的Spark执行引擎
企业目前应用开源Spark的主要困难在稳定性、可管理性和功能不够丰富上。开源Spark在稳定性上还有比较多的问题,在处理大数据量时可能无法运行结束或出现Outofmemory,性能时快时慢,有时比Map/Rece更慢,无法应用到复杂数据分析业务中。
TranswarpInceptor针对各种出错场景设计了多种解决方法,如通过基于成本的优化器选择最合适的执行计划、加强对数据结构内存使用效率的有效管理、对常见的内存出错问题通过磁盘进行数据备份等方式,极大提高了Spark功能和性能的稳定性,上述问题都已经解决并经过商业案例的考验。TranswarpInceptor能稳定的运行7*24小时,并能在TB级规模数据上高效进行各种稳定的统计分析。
6.SQL引擎效能验证
TPC-DS是TPC组织为DecisionSupportSystem设计的一个测试集,包含对大数据集的统计/报表生成/联机查询/数据挖掘等复杂应用,测试用的数据有各种不同的分布与倾斜,与真实场景非常接近。随着国内外各代表性的Hadoop发行版厂商以TPC-DS为标准测评产品,TPC-DS也就逐渐成为了业界公认的Hadoop系统测试准则。
6.1验证对比的平台和配置
我们搭建了两个集群分别用于TranswarpInceptor与ClouderaDataHub/Impala的测试。
6.2TranswarpInceptorVS Cloudera Impala
TranswarpInceptor由于有完善的SQL支持,能够运行全部所有的99个SQL查询。而由于Cloudera官方发布的TPC-DS测试集只包含19个SQL案例,因此我们只能运行这19个SQL,实验证明这部分查询在Impala上全部正常运行完成。
6.3TranswarpInceptorVS Map Rece
我们使用了同样的硬件和软件配置完成和开源的Hive执行效率相比,TranswarpInceptor能够带来10x-100x的性能提升。图8是TPC-DS的部分SQL查询在Inceptor和CDH5.1Hive的性能提升倍数,其中最大的提升倍数竟可达到123倍。
7.结语
随着在大数据领域国内外开始处于同一起跑线,我们相信像星环科技这样国内具有代表性的Hadoop发行版厂商将在中国的广阔市场空间中获得长足发展,并且由于中国市场激烈的竞争与磨练,逐步打磨出超越国外先进厂商的技术与实力。
刘汪根。2013年加入星环,作为早期员工参与了星环大数据平台的构建,现担任数据平台部研发经理,主要负责与管理星环大数据平台数据平台的研发工作,如SQL编译器,Spark执行引擎等工作,产品涵括TranswarpInceptor/TranswarpStream等软件。
【编者按】星环科技从2013年6月开始研发基于Spark的SQL执行引擎,在2013年底推出TranswarpInceptor1.0,并落地了国内首个7x24小时的商用项目。经过1年多的持续创新与改进,星环已经在国内落地了数十个Inceptor的商用项目。这是一篇星环Spark解决方案的技术解析,也是Spark用户可以效仿的优化之道。