下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

从算法原理,看数据

作者:课课家教育     来源: http://www.kokojia.com点击数:1035发布时间: 2017-10-19 16:00:05

标签: 大数据大数据应用数据分析

  欢迎各位阅读本篇文章,本篇文章讲述了CDH平台上物联网课课家教育平台提醒各位:本篇文章纯干货~因此大家一定要认真阅读本篇文章哦!

  随着在CDH平台上物联网(IoT)使用案例的不断增加,针对这些工作负载的安全性显得至关重要。本篇博文对如何以安全的方式在Spark中使用来自Kafka的数据,以及针对物联网(IoT)使用案例的两个关键组件进行了说明。

从算法原理,看数据_大数据_大数据应用_数据分析_课课家

  Cloudera Distribution of Apache Kafka 2.0.0版本(基于Apache Kafka 0.9.0)引入了一种新型的Kafka消费者API,可以允许消费者从安全的Kafka集群中读取数据。这样可以允许管理员锁定其Kafka集群,并要求客户通过Kerberos进行身份验证。此外,也可以允许客户在与Kafka brokers(通过SSL/TLS)通信时加密数据随后,在Cloudera Distribution of Apache Kafka 2.1.0版本中,Kafka通过Apache Sentry引入了支持授权功能。这样可以允许Kafka管理员锁定某些主题,并针对特定角色和用户授予权限,充分发挥基于角色的访问控制功能。

  而现在,从Cloudera Distribution of Spark 2.1的第一次发行版开始,我们已经具备了从Spark中的Kafka内安全读取数据的功能。

  要求

  Cloudera Distribution Spark 2.1第一次发行版或更高版本。

  Cloudera Distribution Kafka 2.1.0版本或更高版本。

  体系架构

  很显然,通过根据用户对历史图书的评分情况,可以得到用户对其的喜爱情况,在此基础上构建出用户特征向量,可以一定程度上判断两个用户在图书品味上的相似程度,进而我们可以认为,若A和B比较相似,可以认为A喜欢的书B也喜欢。

  在给A用户进行图书推荐时,找到与其相似度较高的其他用户,然后除去A用户已看过的图书,结合相似用户对某本图书的喜爱程度与该用户与A用户的相似度进行加权,得到的推荐指数越高的图书优先进行推荐。

  这应该也是豆瓣等图书社区上使用的推荐算法之一,利用用户之间的相似度来进行推荐。当然,电影推荐也同理。

  同理,反过来我们可以按照相似的方位,以用户为维度来构建item的特征向量。 当我们需要判断两本书是否相似时,就去看对这两本书进行过评价的用户构成是否相似,即是使用评价过一本书的用户向量(或数组)表示这本图书;也就是说,如果有两本书的评价中,用户重合度较高,即可认为该两本书相似度较高。其实借用的还是用户相似的基础中也提到过相似的推荐算法,感兴趣的同学可以找来看一下)。

  在音乐的推荐中同样用到了协同过滤算法,我们众所周知的使用个性化推荐的音乐app应该属「网易云音乐」比较典型了。

在音乐的推荐中同样用到了协同过滤算法,我们众所周知的使用个性化推荐的音乐app应该属「网易云音乐」比较典型了。

  那么我们就来yy一下网易云音乐的推荐算法,首先用户过去都会有听歌的历史,由于音乐中没有相关的评分机制,那么可以根据用户对音乐的行为来建立一个喜爱程度模型,例如:收藏-5分,加入歌单-4分,单曲循环-3分,分享-5分,听一遍就删-0分(本来想说负分滚粗的)。这样就大概有了一个喜欢程度列表,于是接下来就可以根据用户的听歌情况,建立用户的特征向量,接下来的推荐就顺利成章了。

  当然,基于协同过滤算法的用户相似度矩阵算法应该只是网易云采取的一种推荐方式,接下来还会说到另外的方式。

  值得注意的是,协同过滤的推荐算法虽然使用得很广且推荐效果也较好,但还是存在一些不足之处:

  协同过滤算法(CF)推荐中存在流行性偏差,因为协同过滤算法是基于惯性数据来进行推荐的,流行的物品由于关注的用户多,产生的数据也多,因此可以建立较为有效的推荐机制;而对于小众或长尾的产品(没人用过也没人评分过),则无法有效推荐;

  冷启动问题(又叫做新用户问题,或推荐新项问题),同样是由于惯性数据的缺失,导致一开始的推荐算法无法建立;这样的问题可以通过流行性算法进行一定程度的解决,当然也可以利用基于内容的推荐算法来进行解决(后面会提到)。

  基于内容的过滤算法

  简介部分已经提到了基于内容的过滤算法的基本原理,这里就不再重复了,直接说一下具体大概是怎么用的吧。

  基于内容的过滤方式与协同过滤中建立用户相似矩阵的方式类似,都是利用特征向量来进行余弦相似度计算,从而判断物品的相似性。

  首先, 利用分词技术对书籍的标题和内容进行处理,去掉权重为0的词(如的、得、地等);

  使用Spark中新的直接连接器可以支持从安全的Kafka集群中获取消息。直接连接器不使用单独的进程(亦称为接收器)读取数据。相反,Spark驱动程序将跟踪各种Kafka主题分区的偏移量,并将偏移量发送到从Kafka中直接读取数据的执行程序中。直接连接器的简单描述如下所示。

  Spark中的Kafka直接连接器

  Spark节点和Kafka 代理人(broker)不一定在同一地点。

  一个Spark分区对应一个Kafka主题分区。

  如果出于某种原因,多个主题分区位于单个Kafka节点上,则有多个Spark执行程序可能会命中该节点(不过没关系)。

  非常值得注意的一点是,Spark是以分布式的方式访问Kafka中的数据。Spark中的每一个任务都会从某个Kafka主题的特定分区中读取数据,该特定分区称为主题分区。主题分区理想地均匀分布在Kafka 代理人(broker)之间。

  但是,为了以分布式的方式从安全的Kafka中读取数据,我们需要在Kafka(KAFKA-1696)中使用Hadoop风格的授权令牌,在写本篇博文时(2017年春季)还不支持这一功能。

  我们已经考虑了各种解决这个问题的方法,但是最终决定采用从Kafka中安全读取数据的建议解决方案(至少应实现Kafka授权令牌的支持)将是Spark应用程序分发用户的keytab,以便执行程序可以访问。然后,执行程序将使用共享的用户密钥表,与Kerberos密钥分发中心(KDC)进行身份验证,并从Kafka 代理人(broker)中读取数据。YARN分布式缓存用于从客户端(即网关节点)向驱动程序和执行程序发送和共享密钥表。  当前解决方案(假设YARN集群模式)

  这种方法存在以下一些常见的问题:

这种方法存在以下一些常见的问题:

  a. 这不能被认为是发送钥匙表的最佳安全实践

  b.在具有大量Kafka主题分区的情况下,所有执行程序可能会同时尝试登录KDC,存在导致重送攻击的潜在风险(类似于DDOS攻击)。

  关于问题a),Spark已经使用分布式缓存将用户的密钥表从客户端(亦称为网关)节点发送到驱动程序,并且由于缺少授权令牌,所以没有办法绕过。管理员可以选择自己在Spark外部将密钥表分发到Spark执行程序节点(即YARN节点,因为Spark在YARN上运行),并调整优化共享的示例应用程序以缓解该问题。

  关于问题b),我们在Kafka主题中测试了1000多个主题分区,并且在增加分区数量后未见对KDC服务器产生不利影响。

  与Apache Sentry集成

  例应用程序假设没有使用任何Kafka授权。如果使用了Kafka授权的话(通过Apache Sentry),则必须确保应用程序中指定的消费者小组已经获得Sentry授权。例如,如果应用程序的消费者小组的名称是my-consumer-group,则必须同时对my-consumer-group和spark-executor-my-consumer-group授予访问权限(即您的消费者小组名称前缀为spark-executor-)。这是因为Spark驱动器使用是该应用程序指定的消费者小组,但spark执行程序在此集成中使用的是不同的消费者小组,该集成在驱动程序消费者小组的名称前指定的前缀是spark-executor-。

  简而言之,您可以使用Cloudera Distribution of Apache Kafka 2.1.0 版本(或更高版本)和Cloudera Distribution of Apache Spark 2.1第一次发行版(或更高版本),以安全的方式从Kafka中使用Spark内的数据——包括身份验证(使用Kerberos进行身份认证)、授权(使用Sentry进行授权)以及线上加密(使用SSL/TLS进行加密)。

  相信最后大家阅读完毕本篇文章,肯定学到了不少知识吧?其实大家私下还得多多自学,当然如果大家还想了解更多方面的详细内容的话呢,不妨关注课课家教育平台,在这个学习知识的天堂中,您肯定会有意想不到的收获的! 

赞(13)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程