Apache Spark和Apache Storm的区别

一、Apache Spark和Apache Storm的区别

Apache Spark和Apache Store的区别是什么?他们各自适用于什么样的应用场景?这是stackoverflow上的一个问题,这里整理简要版回答如下:

Apache Spark是基于内存的分布式数据分析平台,旨在解决快速批处理分析任务、迭代机器学习任务、交互查询以及图处理任务。其最主要的特点在于,Spark使用了RDD或者说弹性分布式数据集。 RDD非常适合用于计算的流水线式并行操作。RDD的不变性(immutable)保证,使其具有很好的容错能力。如果您感兴趣的是更快地执行Hadoop MapReduce作业,Spark是一个很好的选项(虽然必须考虑内存要求)。Spark相对于hadoop MR来说,除了性能优势之外,还有大量丰富的API,这使得分布式编程更高效。

Spark架构图如下,总体结构非常简洁,没什么需要多说的,这里对spark的几个细节补充解读如下:

每个spark应用程序有自己的执行进程,进程以多线程的方式执行同一个应用的不同任务(tasks)。

因为不同的spark应用是不同进程,所以无论是在driver端还是executor端,不同用程序都是互相隔离的,在没有集群外存储的情况下,应用之间不能共享数据。

Spark对底层集群管理器是不可知的。通常能做集群进程管理的容器,都可以管理spark程序。例如Mesos / YARN这样的集群管理也可以用于spark。当前在各大互谅网公司比较常用的就是基于yarn的spark。

driver端必须在整个应用的生命周期内存在,并且是可寻址(固定在某个机器或者说IP上),因为executor都要跟driver建立连接并通讯。

由于是driver端来负责任务的调度(指应用具体操作的输入输出控制,区别于yarn的集群管理),所以driver端最好跟executor端最好在同一个局域网(比如同一个机房),从而避免远距离通信。实时上driver端即使不做大的返回集合collect的话,如果任务分片(partitions)很多,也会有大量通信开销。

二、未来希望从事机器学习的方向,有必要学习linux吗

可以把重点放在机器学习的模型和算法上,应用场景和申请专利也很重要。机器学习是一门交叉学科,可以解决许多实际中的问题,Linux是操作系统。一般机器学习的程序可以在windows、linux、mac等系统上,但是大规模并行的机器学习程序一般在基于linux的分布式系统中。

三、学习分布式系统需要怎样的知识

1. 硬件&底层软件的失效与高可用性高性能的矛盾。硬盘,交换机,进程,甚至OS本身都有失败/崩溃的可能,在包含很多机器(比如>1000)的廉价(使用非企业级硬件)集群中,这个问题表现为“你的系统总有一部分处于故障状态,如何保证高可用性?”,它的另一半是“如何在尽量少系统开销的前提下,保证此可用性?”。一个简单的例子是,为防止单点故障,数据通常都有备份。备份越多,可用性通常越好,但需要更多的磁盘空间和网络带宽,导致性能降低。那么多少备份合适?如何将这些备份分散到集群上(例如跨硬盘,跨机器,跨交换机,等等要求)? 2. 编程模型与单机不同,如何克服习惯带来的影响。一个最简单的例子是关于“锁”的。在单机上,如果进程A和进程B都想修改数据D(例如做一个D++操作),有很多种方法可以避免冲突。但分布式系统就要面临选择:要么用单机管理数据D(并忍受由此带来的低可用性,因为单机失效将造成整个集群不可用),要么用多机共同管理数据D(并忍受复杂的协议,一大堆代码,还有性能开销)。Paxos就是以上问题的经典解决方案(分布式的),发明者即Leslie Lamport。 3. 工业级的分布式系统意味着一整套工具集,除了那些运行在生产系统上的集群软件,还有庞大的部署、运维、诊断软件群,数量巨大的硬件(服务器、交换机、机架、电源,这些都很可能是定制的),甚至包括建筑物(数据中心的规划、设计、内部结构等)。已经超出我的经验范围,作为一个引子,题主可自行了解。

四、搜索引擎的 Query 分析有哪些小技术点

您好:

Query的数据分析

Query即用户在搜索引擎输入查询条件。在通用搜索引擎中,一般是指输入的关键词。而在各类行业或者垂直搜索引擎,还可以输入类目,如优酷网站中可以选择“电影”、“电视剧”这样的类目。在电子商务网站中,各种产品品牌、型号、款式、价格等也是常见的查询条件。

要分析query中每个term的内容,分词是必不可少的工具。分词算法从最简单的最大正向、最大反向分词算法,到复杂的隐马尔科夫、CRF模型。CRF模型是一种序列标注的机器学习方法。分词算法最关键的是如何得到足够的标注准确的语料库,足够的训练语料是模型成功的基础条件。

Query按照PV从高到低排序之后。横坐标为query编号,纵坐标是query的PV。从下图可以明显看出,query的PV分布是一个长尾分布。

每种搜索引擎的query

都有自己的特点。根据query的特点来设计自己的算法和相应产品是非常必要的。例如:百度有很多查询“从A到B怎么走”,“××怎么样”。相信百度正是研究了这些查询,才力推百度“贴吧”和“知道”,“百科”等产品的。通用搜索引擎和电子商务网站的query区别一定很大。例如joyo当当一定有大量书籍名称的查询。而在电子商务网站,有大量类目+属性的查询方式。如何组合的输入条件,准确分析用户意图,保证搜索引擎结果的召回率和准确率是一个挑战。

20-80定律:query 和cache

我们发现20%的top query,占据了80%的PV流量。如果解决了这20%的query的分析和排序问题,我们就解决了绝大多数流量的问题。

针对20%的query,我们可以优化搜索引擎的索引结构,尽量直接返回用户需要的信息。在query分析的模块,我们可以存储query的分词、词性标注以及query分类等结果。总之高效利用内存,用内存换取性能的极大提升。

query的分类和“框计算”

query分类是目前通用搜索引擎必须解决的问题。当你在百度或者google上面输入“××市天气”,会显示天气状态图片、温度等;输入“中石油”直接显示出中石油的股价;输入“航班”直接从航班起点和终点的选择。这也是百度所谓的“框计算”,也就是直接在搜索框完成解析,直达具体的应用。

如何做分类呢?

假设搜索引擎已经对网页分类,那么统计每个query下点击的页面分类,把页面类别的概率按照从高到低排列,也就是query的分类。也就可以知道这个query的分类。但是这种只能用在当query的点击数量足够的时候。

另外一种办法是通过页面分类,用贝叶斯的方法,反推每个query可能属于那些类别。

query的导航

query的分类其实是导航的一个基本条件。只有当你对query的分类准确,对query中每个term的词性理解准确的时候,导航才真正开始。

在电子商务网站,如Amazon、京东等网站。准确的导航是非常必要的。

而准确的导航是第一步。根据用户输入,在导航中体现相关热门推荐,或者个性化推荐,是对导航的更进一步的要求。

在淘宝搜索产品上,当用户输入关键词,会自动提示相应的类目和属性,并且把热门的类目属性展示在前面,而把相对冷门的类目和属性折叠起来。最大利用网页有限的展示空间。

query suggestiong

query与个性化

说到个性化,必然涉及到对用户数据的收集。根据用户的行为或者设置,分析用户的年龄、性别、偏好等。同样是搜索“咖啡馆”,你在北京和上海搜索得到结果可能差异很大。

而这些分析数据来源于对每个用户在搜索引擎的行为日志。搜索引擎都会分析每个用户的搜索和点击等行为。存储的时候存在在分布式key-value内存数据库中。

用户行为不仅仅对个别用户本身有用。大量用户的行为日志,被广泛用于推荐系统的数据挖掘。例如用户在当当joyo上面购买的书籍,就来自于大量用户的购买和浏览记录。推荐系统从常见的关联规则分析,已经进化到各种复杂的图关系分析算法。

详情参考: