Author: AWS Team


新增 – 适用于 Amazon Simple Queue Service (SQS) 的服务器端加密

作为 AWS 服务家族最老牌的成员, Amazon Simple Queue Service (SQS) 是许多应用程序的重要组成部分。Amazon SQS,实现更好的架构利用 Amazon SQS 和 Amazon DynamoDB 进行大规模消息处理等演示文稿说明了如何使用 SQS 构建恢复能力强且高度可扩展的应用程序。如今,我们为 SQS 增加了服务器端加密支持,使它变得更加有用。现在,您可以选择使用  AWS Key Management Service (KMS) 提供的加密密钥,将 SQS 加密消息存储于标准队列和 FIFO 队列中。您可以在创建队列时选择此选项,还可以为现有队列设置此选项。SSE 会加密消息正文,但不会影响队列元数据、消息元数据或队列指标。在现有队列中添加加密不会加密任何积压消息。同样,删除加密时也会将积压消息保持加密。

创建加密队列

最新版本的 AWS管理控制台 允许您使用方便的图形选择标准队列或 FIFO 队列:

您可以针对队列和可选的死信队列设置属性:

现在,您可以选中使用 SSE 并选择所需的密钥:

您可以使用由 AWS 托管的客户主密钥 (CMK),每个客户在每个区域只拥有唯一的客户主密钥;您还可以创建并管理您自己的密钥。如果您选择使用自己的密钥,不要忘了更新您的 KMS 密钥策略,允许对消息进行加密和解密。您还可以配置数据重用周期。此间隔控制 SQS 刷新来自 KMS 的加密信息的频率,范围在 1 分钟到 24 小时之间。使用较短的间隔可以改善安全性,但会提高 KMS 成本。要了解更多详情,请参阅 SQS SSE 常见问题服务器端加密的文档。

现已推出

服务器端加密现已在 美国西部(俄勒冈)和 美国东部(俄亥俄) 区域推出,支持运行中的其他内容。使用加密不收费,但 SQS 对 KMS 的调用需要收费。要了解与此有关的更多信息,请参阅我如何估算客户主密钥 (CMK) 使用成本

-Jeff

AWS 热门初创公司 – 2017 年 4 月

春天到了,花朵绽放,Tina Barr 也为您带来了更多非常棒的初创公司!-Ana


欢迎回来,了解这个月介绍的由 AWS 提供支持的初创公司!今天我们要介绍三家振奋人心的初创公司:

  • Beekeeper – 简化员工在工作场所的沟通方式。
  • Betterment – 让每个人的投资变得更简单。
  • ClearSlide – 领先的销售促成平台。

不要错过三月热门初创公司,请来看看吧。

Beekeeper (瑞士,苏黎世)

Beekeeper 徽标Flavio PfaffhauserChristian Grossmann 都是苏黎世联邦理工学院的毕业生,他们充满热情地希望通过技术促进人们互相联系。最开始只是供学生使用的社交社区很快变身成为 Beekeeper – 这一适用于工作场所的沟通平台可以帮助身处各地的员工进行互动。由于 Flavio 和 Christian 了解如何构建一个吸引人们参与的社交平台,企业开始要求他们提供适应其特定流程和需要的平台。开始打造平台时的概念是要帮助人们感觉到他们是在并肩工作,不管是在办公桌前还是在现场。Beekeeper 成立于 2012 年,专注于改善信息共享、沟通和同事间的协作。公司坚信倾听员工的声音对组织而言至关重要。这款“移动设备第一,桌面友好”的平台具有简单直观的界面,可以将多种操作系统轻松集成到一个生态系统中。界面可以根据公司的品牌和标识改变风格并进行自定义。员工可以随时随地通过私人聊天和群聊与同事联系,进行视频、文件共享和反馈调查。领导团队可以借助 Beekeeper 的分析控制面板发现热门讨论主题,并实时跟踪员工的参与情况和应用使用情况。Beekeeper 目前帮助 137 个国家/地区的用户实现互联,涉及的行业包括酒店业、建筑业、交通业等等。Beekeeper 喜欢使用 AWS,因为工程师可以专注于最重要的事务,那就是解决客户的问题。公司使用 Amazon EC2Amazon S3Amazon RDS 等服务构建其基础设施,使技术团队摆脱了管理任务。Amazon Elastic TranscoderAmazon QuickSight 用于构建分析控制面板,Amazon Redshift 用于数据仓库。查看 Beekeeper 博客,了解他们的最新资讯!

Betterment (纽约州纽约市)
Betterment 徽标
Betterment 的使命是让每个人的投资变得更加容易、更加方便,无论他们有什么样的财务目标。2008 年,Jon Stein 成立了 Betterment,希望彻底改变这一行业,让未来的投资者不要再犯他曾经犯过的常见错误。那时,大多数人的投资渠道非常有限 – 要么自己进行投资,要么雇人帮自己进行投资。不过,有时人们花钱雇来的财务顾问推荐的投资却并不是最适合客户的。Betterment 只选择最符合客户利益和他们的财务目标的投资。如今,他们是规模最大的独立在线投资顾问公司,管理着超过 80 亿美元的资产,客户数量超过 240,000 名。Betterment 运用技术使投资更加简单高效,同时还有助于提高税后收益。他们还提供广泛的金融规划服务,根据客户的人生目标进行个性化的规划。客户输入他们的年龄、是否退休和年收入就可以开始进行投资规划,Betterment 会建议投资金额,以及应该选择哪种投资方式。他们能够以更低的成本提供许多传统投资服务机构无法提供的投资和管理服务。Betterment 的工程师一直在以最快的速度构建变革整个行业的技术,帮助客户实现资金收益最大化。AWS 为 Betterment 提供了轻松预配基础设施的灵活性,将原来需要整个团队进行管理的职责转移给了各项服务。Betterment 最开始使用云时,使用了 Amazon EC2Amazon RDS Amazon S3 的标准实施。随着他们与 AWS 的全面合作,逐步开始利用 Amazon RedshiftAWS LambdaAWS Database Migration ServiceAmazon KinesisAmazon DynamoDB 等服务。如今,他们在使用超过 20 种 AWS 服务,用于日常开发、测试和部署各种功能和增强。点击此处了解有关 Betterment 的更多信息

ClearSlide (加利福尼亚州旧金山)
ClearSlide 是当下领先的销售促成平台,提供完整的整合工具,促进每一次客户交互获得成功。ClearSlide 在 2009 年成立之初,就寻求通过各种方式改善客户体验,还开发了适用于销售部门领导和团队、市场推广、客户支持团队及其他用户的各种能力提升工具。这一平台将内容、沟通渠道和真知灼见聚合到客户的指尖,推动客户进行更好的决策,还能用于管理机会。ClearSlide 为数千家公司提供服务,包括 Comcast、Sacramento Kings、The Economist;目前他们的客户已产生超过 7.5 亿分钟的参与时间。ClearSlide 为销售流程的所有环节提供解决方案。对于销售部门的领导,ClearSlide 提供参与控制面板,以改善交易可见性、对销售代表进行更好地指导,并提高销售预测的准确度。对于市场推广和销售提升团队,他们指导销售员在适当的时间和环境中使用适当的内容进行销售,并提供将内容的 ROI 最大化所需的见解。对于销售代表,ClearSlide 将沟通、内容和分析集成于统一的平台体验中。可以通过电子邮件、面对面、在线会议、Web 或社交媒体等方式进行沟通。如今,ClearSlide 客户完成的交易实现了 10-20% 的增长,新销售代表的入职熟悉时间减少了 25%,销售成本降低了 50-80%。ClearSlide 使用一系列 AWS 服务,但 Amazon EC2Amazon RDS 对他们的业务影响最大。EC2 使他们可以轻松扩展计算容量,这一点对于快速成长的初创公司而言至关重要。它还可提供部署一致性 – 从开发、集成到推出和生产。RDS 降低了开销,允许 ClearSlide 扩展其数据库基础设施。有了 AWS 负责耗时的数据库管理任务,ClearSlide 降低了运营成本,可以专注于向客户提供更具战略意义的服务。观看这个视频,了解使用 ClearSlide 如何使 LiveIntent 的销售周期缩短 22%。在 Twitter 上关注他们,获取所有最新的更新!感谢您了解这个月介绍的由 AWS 提供支持的非常棒的初创公司!

-Tina

利用全新的 Samsung DeX,在您的 Samsung Galaxy S8/S8+ 上使用 Amazon WorkSpaces

技术的不断进步和改进是一件非常有趣的事情。例如,如今的手机屏幕分辨率已经可以匹敌高端台式机,还具备多种连接选项,并且非常轻便。这周的早些时候,我有机会亲自体验了最新款的 Samsung Galaxy S8+ 手机和一种独特的全新配套设备,Samsung DeX Station。我在手机上安装了适用于 Android 平板电脑的 Amazon WorkSpaces 客户端,输入了我的 WorkSpace 注册代码并登录。您可以在我的新视频中观看所有操作:DeX 包含适用于键盘和鼠标的 USB 接口,还可以使用蓝牙与它们通信。它还包含一个冷却风扇、一个手机快速充电器,外加 HDMI 和以太网端口(您还可以使用手机的移动网络或 Wi-Fi 连接)。将所有功能集中起来,您即可随时随地访问云端桌面。在轻装出差时,您可以使用酒店房间中的电视/显示器,完全访问公司网络、文件和其他资源。

-Jeff

对了,如果您希望进一步了解我的工作环境,请查看我爱 Amazon WorkSpace

Amazon Chime 更新 – 使用您的现有 Active Directory,建立您自己的域

我最早介绍 Amazon Chime 是在今年二月 (Amazon Chime – 统一通信服务),并且介绍了我如何与世界各地的人联系并开展协作。自发布以来,Amazon Chime 很快成为了 AWS 团队的首选通信工具。在一天中,我会多次与个人聊天以及参与团队聊天,并经常通过“Chime In”方式参与采用 Amazon Chime 功能的会议来讨论即将进行的发布和演讲。今天,我们向 Amazon Chime 增加了两项新功能:建立您自己的域的功能以及支持您现有的 Active Directory。

建立域

通过建立域,您有权管理该域中所有用户的 Amazon Chime 使用情况。您可以确保员工出于工作目的而登录 Amazon Chime,也可以停用离开组织的员工的账户。要建立域,您需要声明自己拥有特定域名,然后将 TXT 记录输入到您的域的 DNS 条目来支持这一声明。您必须为组织用于电子邮件地址的每个域和子域执行这一操作。下面演示了我如何建立我自己的一个域:

单击“Verify this domain”之后,Amazon Chime 向我提供了我的 DNS 的记录:

执行此操作后,域的状态将更改为 Pending Verification。Amazon Chime 确认新记录按照期望的那样存在后,状态将更改为 Verified,并且团队账户将成为企业账户。

Active Directory 支持

此功能允许用户使用其现有 Active Directory 身份和凭证登录 Amazon Chime。在您设置该功能之后,您可以启用并利用高级 AD 安全功能,例如密码轮换、密码复杂性规则以及多重身份验证。您还可以控制各个组的 Amazon Chime 的 Plus 和 Pro 许可证分配 (请查看计划和定价以了解各种许可证类型的更多信息)。要使用此功能,您必须具有 Amazon Chime 企业账户。如果您使用团队账户,则在继续前,请按照创建企业账户的说明执行操作。然后,您需要使用 AWS Directory Service 设置目录。此时您有两个选项:

  1. 使用 AWS Directory Service AD Connector 连接到您现有的内部 Active Directory 实例。
  2. 使用配置供独立使用的 Microsoft Active Directory。有关此选项的更多信息,请阅读如何创建 Microsoft AD 目录

在设置目录之后,您可以单击 SettingsActive directory,并在下拉列表中选择您的目录,从 Amazon Chime 控制台连接到该目录。

完成此操作之后,您可以选择目录中的各个组,逐个组分配合适的订阅 (Plus 或 Pro)。根据需要设置所有内容之后,您的用户可以使用其现有目录凭证登录 Amazon Chime。这些新功能现已提供,您可以立即开始使用!如果您要了解有关 Amazon Chime 的更多信息,可以观看最新的 AWS 技术讲座:通过 Amazon Chime 打造现代化会议这是讲座的演示文档:-Jeff

EC2 降价 – 预留实例和 M4 实例

随着 AWS 的发展,我们不断寻求方法来让它更好地提供价值。我们与供应商合作降低成本,并且不断地探索能够以更加高效、更具成本效益的方式来构建硬件和软件的方法。除了定期和经常性的减价之外,我们还向客户提供了各种选项,可以帮助他们优化对 AWS 的使用。例如,预留实例 (首次发布于 2009 年) 与按需定价相比,使得 Amazon EC2 用户能够获得显著的折扣,并且在特定可用区中使用时可预留容量。我们的客户使用多种战略来购买和管理其预留实例。一些客户偏好进行预付从而得到更高的折扣;一些客户则偏好无预付款,不过折扣较低 (折扣仍然很可观)。介于这两者之间的客户则对只需部分预付款,即可享受到介于这两种选项的折扣感到非常满意。为了满足各种各样的偏好,我们为大部分最新一代的实例类型增加了 3 年无预付标准预留实例。我们还降低了无预付保留实例、可转换预留实例和通用 M4实例 (包括按需实例和预留实例) 的价格。这是我们的第 61 次 AWS 降价。详细信息见此处 (所有更改和降价都立即生效):

最新 3 年标准预留实例的无预付款选项-我们以前提供的无预付款选项为 1 年期的标准预留实例。现在,我们面向 C4、M4、R4、I3、P2、X1 和 T2 标准预留实例增加了 3 年期的无预付选项。

无预付预留实例降价-我们降低了 C4、M4、R4、I3、P2、X1 和 T2 实例类型的无预付 1 年标准实例和 3 年可转换预留实例的价格,根据实例类型、操作系统和区域,降幅最高可达 17%。下面提供了在多个代表性区域中面向 Linux 的无预付预留实例的平均降价:

美国东部 (弗吉尼亚北部) 美国西部 (俄勒冈) 欧洲 (爱尔兰) 亚太地区 (东京) 亚太地区(新加坡)
C4 -11% -11% -10% -10% -9%
M4 -16% -16% -16% -16% -17%
R4 -10% -10% -10% -10% -10%

可转换预留实例降价-使用可转换预留实例时,您可以随时更改实例系列以及与预留实例关联的其他参数;这让您可以随着应用程序的演变和需求变化来调整预留实例清单。我们降低大部分最新一代实例 (C4、M4、R4、I3、P2、X1 和 T2) 的 3 年可转换预留实例价格,最高可达 21%。下面提供了在多个代表性区域中面向 Linux 的可转换预留实例的平均降价:

美国东部 (弗吉尼亚北部) 美国西部 (俄勒冈) 欧洲 (爱尔兰) 亚太地区 (东京) 亚太地区(新加坡)
C4 -13% -13% -5% -5% -11%
M4 -19% -19% -17% -15% -21%
R4 -15% -15% -15% -15% -15%

类似的降价在几乎所有其他区域中也将实施。

M4 实例降价 – 我们将 M4 Linux 实例的价格最多减少 7%。请访问“EC2 预留实例定价”页面“EC2 定价”页面,或者参考 AWS 价格表 API 来了解所有新价格。

了解更多:以下博客帖子包含有关我们对 EC2 预留实例模型所做的改进的更多信息:

您还可以阅读 AWS 定价预留实例常见问题来了解更多信息。

-Jeff

Cloud Directory 更新 – 对类型化链接的支持

今年早些时候,我谈论了 Cloud Directory – 用于分层数据的云原生目录以及它如何存储大量强类型分层数据。由于 Cloud Directory 可扩展到数亿个对象,因此它非常适合许多云和移动应用程序。在我的原始博客文章中,我已经说明每个目录如何具有一个或多个架构,以及每个架构如何又具有一个或多个分面。每个分面为对象定义所需的和允许的属性集。

类型化链接简介

现在,我们通过增加对类型化链接的支持,来增强 Cloud Directory 模型的表现力。您可以使用这些链接在层次结构中创建对象-对象关系。可以为每个目录定义多种链接 (每种链接类型均是与目录关联的其中一个架构中的单独分面)。除了类型之外,每个链接还可具有一组属性。类型化链接可帮助确保不会无意中删除目前与其他对象有关系的对象,从而保持参考数据的完整性。假定您具有包含位置、工厂、楼层、房间、机器和传感器的目录。上述每个项均可表示为 Cloud Directory 中的一个维度,它在层次结构中具有丰富的元数据信息。您可以定义和使用类型化链接以通过各种方式将对象联系在一起,并创建导致维护要求、服务记录、担保和安全信息的类型化链接,以及链接上用于存储有关源对象和目标对象之间的关系的其他信息的属性。随后,您可以根据链接类型和链接中的属性值来运行查询。例如,您可以找到过去 45 天内未清除的所有传感器,或已超过保修期的所有电机。您可以查找指定楼层的所有传感器,也可以查找给定类型的传感器所在的所有楼层。

使用类型化链接

要使用类型化链接,您只需使用 CreateTypedLinkFacet 函数将一个或多个类型化链接分面添加到架构。然后,调用 AttachTypedLink,并传入源对象和目标对象、类型化链接分面和链接的属性。其他有用函数包括 GetTypedLinkFacetInformationListIncomingTypedLinksListOutgoingTypedLinks。要了解更多信息和查看完整函数列表,请查看 Cloud Directory API 参考。就像为对象执行的操作一样,您可以使用属性规则来约束属性值。您可以约束字符串和字节数组的长度、将字符串限定为一组指定的值并将数目限定为特定范围。我的同事分享了一些示例代码来说明如何使用类型化链接。以下是 ARN 和分面名称:

String appliedSchemaArn   = "arn:aws:clouddirectory:eu-west-2:XXXXXXXXXXXX:directory/AbF4qXxa80WSsLRiYhDB-Jo/schema/demo_organization/1.0";
String directoryArn       = "arn:aws:clouddirectory:eu-west-2:XXXXXXXXXXXX:directory/AbF4qXxa80WSsLRiYhDB-Jo";
String typedLinkFacetName = "FloorSensorAssociation";

第一个代码段按以下顺序创建名为 FloorSensorAssociation 的类型化链接分面,带有 sensor_typemaintenance_date 属性 (属性名和值是链接标识的一部分,因此顺序很重要):

client.createTypedLinkFacet(new CreateTypedLinkFacetRequest()
                                .withSchemaArn(appliedSchemaArn)
                                .withFacet(
                                      new TypedLinkFacet()
                                          .withName(typedLinkFacetName)
                                          .withAttributes(toTypedLinkAttributeDefinition("sensor_type"),
                                                          toTypedLinkAttributeDefinition("maintenance_date"))
                                          .withIdentityAttributeOrder("sensor_type", "maintenance_date")));

private TypedLinkAttributeDefinition toTypedLinkAttributeDefinition(String attributeName) {
 return new TypedLinkAttributeDefinition().withName(attributeName)
 .withRequiredBehavior(RequiredAttributeBehavior.REQUIRED_ALWAYS)
 .withType(FacetAttributeType.STRING);
}

下一个代码段创建两个对象 (sourceFloortargetSensor) 之间的链接,带有 sensor_type watermaintenance_date 2017-05-24

AttachTypedLinkResult result = 
    client.attachTypedLink(new AttachTypedLinkRequest()
                               .withDirectoryArn(directoryArn)
                               .withTypedLinkFacet(
                                   toTypedLinkFacet(appliedSchemaArn, typedLinkFacetName))
                                   .withAttributes(
                                        attributeNameAndStringValue("sensor_type", "water"),
                                        attributeNameAndStringValue("maintenance_date", "2017-05-24"))
                                   .withSourceObjectReference(sourceFloor)
                                   .withTargetObjectReference(targetSensor));

private TypedLinkSchemaAndFacetName toTypedLinkFacet(String appliedSchemaArn, String typedLinkFacetName) {
   return new TypedLinkSchemaAndFacetName()
              .withTypedLinkName(typedLinkFacetName)
              .withSchemaArn(appliedSchemaArn);
}

最后一个代码段枚举了 sensor_type watermaintenance_date 的所有传入类型化链接,范围为 2017-05-202017-05-24

client.listIncomingTypedLinks(
    new ListIncomingTypedLinksRequest()
        .withFilterTypedLink(toTypedLinkFacet(appliedSchemaArn, typedLinkFacetName))
        .withDirectoryArn(directoryArn)
        .withObjectReference(targetSensor)
        .withMaxResults(10)
        .withFilterAttributeRanges(attributeRange("sensor_type", exactRange("water")),
                                   attributeRange("maintenance_date", 
                                                  range("2017-05-20", "2017-05-24"))));

private TypedLinkAttributeRange attributeRange(String attributeName, TypedAttributeValueRange range) {
   return new TypedLinkAttributeRange().withAttributeName(attributeName).withRange(range);
}

private TypedAttributeValueRange exactRange(String value) {
   return range(value, value);
}

要了解更多信息,请参阅 Cloud Directory 管理指南中的对象和链接

现已推出

类型化链接现已提供,您可以立即开始使用!

-Jeff

如何使用Apache Mahout在 Amazon Elastic Mapreduce上构建推荐系统

本篇博文首先简单介绍了机器学习,并给出了Apache Mahout项目的背景情况以及推荐系统中需要注意的一些细节,然后我们会构建一个电影推荐系统并写一个简单的web服务来提供给客户端查询结果。最后我们会列出学习和参与到Mahout社区中的一些方法。

机器学习

机器学习植根于人工智能,这意味着机器学习工具具有对数据问题的认知和自动决策能力,但是目前的机器学习算法并不包含真正意义上的计算思想。尽管如此,机器学习经常采用某种类型的自动化决策,并采用迭代的方式来最大化或最小化与模型性能相关的特征值。

机器学习领域包含许多主题和方法,通常有分类、聚类以及推荐等。

分类是基于其他已知(独立)变量的组合来预测未知(从属)变量的过程,例如预测银行的客户流失或某项音乐服务的订阅者数量。在这两种情况下,我们使用关于客户的已知变量来预测他们停止使用相关服务的趋势。 下表列出了几个可能的已知变量:

变量类型 例子
用户信息 城市、州、年龄、性别
行为方式 银行客户消费习惯、用户播放特定艺术家音乐的频率
环境因素 银行客户的费用评估、用户播放音乐时遭遇缓冲的频率

在进行分类工作时,我们通常针对包含从属变量真实取值的数据进行训练,然后通过比较留存测试数据的预测值和真实值的差距来评估模型的性能。

聚类是寻找事物集合和分组的过程。在几何学中,我们经常讨论N维空间中的聚类向量。举个例子,下面图中在二维空间中展示了四对由向量代表的人,每一个维度是一种支出类别,在本例中是娱乐支出和杂项支出。

左上角图中显示两人的支出数量是相近的,但是消费习惯则完全指向了不同的方向,所以这两人是不相似的。基于同样的原因,左下图中的两人就拥有相近的消费习惯。当然通常我们在分类时引入的维度是多于两个的,甚至是成千上万的维度,并且从数学上可以推广到任意有限的维度空间。

聚类的关键在于我们用来定义相似性的距离度量或者测量方法。一些常用的方法如欧几里德距离、余弦相似度(相似向量间的夹角的余弦值接近0,反之则接近1)以及Tanimoto系数(两个向量相同点占两个向量所有点的比例)。

推荐系统通常接收数据输入,通常是基于行为的数据,然后预测用户最终会倾向于哪个选项。过去十年推荐系统的流行很大程度上得益于Netflix Prize的推广,它在2006年到2009年间奖励给那些击败Netflix现有推荐系统的人。

推荐系统的性能以预测值和真实值之间的比较来得出,在生产系统中通常还结合A/B测试来进行优化。

Apache Mahout

大多数的Hadoop发行版本都包含了Apache Mahout,这其中就有Apache Bigtop和EMR。本质上Apache Mahout是一个机器学习的算法库,包含分类、聚类以及推荐等多种工具,可以被用于计算相似性和生成用户推荐等目的。Mahout使用Hadoop的Mapreduce框架来执行具体的计算过程,现在也支持新的计算框架,比如UC Berkeley’s AMPLab的Spark。

Mahout第一次bug修复发生在2008年1月,直到本篇博文写就之时,总共有1700个Jira tickets,其中54个依然是open状态。时至今日,社区中的贡献者和用户仍然在不停地针对代码和文档进行优化工作。

推荐系统

大多数人感觉到推荐系统的存在是从网页开始的,后台推荐系统会将结果显示在用户浏览网页的某一部分之上。这些包含推荐结果的网页帮助用户找到想买的商品、想听的音乐、想看的电影、想雇佣的人,甚至是约会的对象。

GroupLens研究团队于上个世纪90年代早期构建了USENET文章推荐系统,自此推荐系统技术开始了快速发展。随着时间的推移,推荐对象本身也发生了变化,除了新的文章,还有大量的在线行为值得分析,比如用户在网页上的点击链接行为;点赞和档案浏览;购物行为以及听音乐和看电影。

这些发展提供了基于用户行为进行推荐的可能性,能够帮助我们进一步改进推荐系统。 在USENET示例中,用户扫描作者和主题的文章列表,点击,阅读和关闭文章。 在线零售网站,购物者搜索产品,浏览产品页面,点击照片放大,阅读评论,并将产品添加到购物车。 在流媒体音乐网站上,音乐消费者搜索艺术家或专辑,播放曲目,通过曲目快速播放,并将艺术家添加到收藏夹,流媒体视频网站的工作方式类似。 在专业或个人联系的社交网站上,用户搜索并与其他人互动。 每个示例包括用户以某种方式与某些类型的项目进行交互的用户。

构建推荐系统

为了说明如何在EMR上通过Mahout建立分析型作业,我们决定构建一个电影推荐系统。我们会使用用户打分的电影评分数据,这些数据由GroupLens团队提供。推荐系统最终会为每一位用户推荐自己最感兴趣的电影。

1.  登录AWS账户

2.  配置EMR ruby客户端

3.  启动EMR集群

./elastic-mapreduce --create --alive --name mahout-tutorial --num-instances 4
--master-instance-type m1.xlarge --slave-instance-type m2.2xlarge --ami-version 3.1 --ssh

4.  获取电影评分数据

wget http://files.grouplens.org/datasets/movielens/ml-1m.zip

unzip ml-1m.zip

处理rating.dat文件,用”,”替换”::”,取出每一行的前3列

cat ml-1m/ratings.dat | sed 's/::/,/g' | cut -f1-3 -d, > ratings.csv

上传处理后的评分数据到HDFS

hadoop fs -put ratings.csv /ratings.csv

5.  启动推荐作业

mahout recommenditembased --input /ratings.csv --output recommendations --numRecommendations 10
--outputPathForSimilarityMatrix similarity-matrix --similarityClassname SIMILARITY_COSINE

6.  查看结果数据

hadoop fs -ls recommendations

hadoop fs -cat recommendations/part-r-00000 | head

你应该看到类似下面文件的输出结果

User ID           (Movie ID : Recommendation Strength) Tuples

35        [ 2067:5.0, 17:5.0, 1041:5.0, 2068:5.0, 2087:5.0, 1036:5.0, 900:5.0, 1:5.0, 2081:5.0, 3135:5.0 ]

70        [ 1682:5.0, 551:5.0, 1676:5.0, 1678:5.0, 2797:5.0, 17:5.0, 1:5.0, 1673:5.0, 2791:5.0, 2804:5.0 ]

105     [ 21:5.0, 3147:5.0, 6:5.0, 1019:5.0, 2100:5.0, 2105:5.0, 50:5.0, 1:5.0, 10:5.0, 32:5.0 ]

140     [ 3134:5.0, 1066:5.0, 2080:5.0, 1028:5.0, 21:5.0, 2100:5.0, 318:5.0, 1:5.0, 1035:5.0, 28:5.0 ]

175     [ 1916:5.0, 1921:5.0, 1912:5.0, 1914:5.0, 10:5.0, 11:5.0, 1200:5.0, 2:5.0, 6:5.0, 16:5.0 ]

210     [ 19:5.0, 22:5.0, 2:5.0, 16:5.0, 20:5.0, 21:5.0, 50:5.0, 1:5.0, 6:5.0, 25:5.0 ]

245    [ 2797:5.0, 3359:5.0, 1674:5.0, 2791:5.0, 1127:5.0, 1129:5.0, 356:5.0, 1:5.0, 1676:5.0, 3361:5.0 ]

280     [ 562:5.0, 1127:5.0, 1673:5.0, 1663:5.0, 551:5.0, 2797:5.0, 223:5.0, 1:5.0, 1674:5.0, 2243:5.0 ]

每一行的第一个数字是用户ID,后面的键值对是每一部电影的ID以及它的推荐得分。本例中推荐得分是5分制,从结果集(10个推荐结果)可以看出针对每位用户的推荐电影都是满分,所以我们应该进一步计算超过10个推荐结果的情况。

构建推荐服务

接下来我们要通过一个web服务来查看特定用户的推荐结果

1.  安装Twisted,Klein和Redis的Python模块

sudo easy_install twisted

sudo easy_install klein

sudo easy_install redis

2.  安装Redis并启动服务

wget http://download.redis.io/releases/redis-2.8.7.tar.gz

tar xzf redis-2.8.7.tar.gz

cd redis-2.8.7

make

./src/redis-server &

3.  构建一个web服务负责加载推荐结果数据到Redis并响应查询需求

把下面的代码放入一个文件内,如“hello.py”

from klein import run, route

import redis

import os

 

# Start up a Redis instance

r = redis.StrictRedis(host='localhost', port=6379, db=0)

 

# Pull out all the recommendations from HDFS

p = os.popen("hadoop fs -cat recommendations/part*")

 

# Load the recommendations into Redis

for i in p:

 

# Split recommendations into key of user id

# and value of recommendations

# E.g., 35^I[2067:5.0,17:5.0,1041:5.0,2068:5.0,2087:5.0,

#       1036:5.0,900:5.0,1:5.0,081:5.0,3135:5.0]$

k,v = i.split('t')

 

# Put key, value into Redis

r.set(k,v)

 

# Establish an endpoint that takes in user id in the path

@route('/<string:id>')

 

def recs(request, id):

# Get recommendations for this user

v = r.get(id)

return 'The recommendations for user '+id+' are '+v

 

 

# Make a default endpoint

@route('/')

 

def home(request):

return 'Please add a user id to the URL, e.g. http://localhost:8080/1234n'

 

# Start up a listener on port 8080

run("localhost", 8080)

4.  启动web服务

twistd -noy hello.py &

5.  使用用户ID 37测试服务

curl localhost:8080/37

6.  你应该看到如下的类似输出

针对37号用户的推荐结果是

[7:5.0,2088:5.0,2080:5.0,1043:5.0,3107:5.0,2087:5.0,2078:5.0,3108:5.0,1042:5.0,1028:5.0]

7.  当你完成所有操作时,别忘了关闭EMR集群

./elastic-mapreduce --list

 

j-UNIQUEJOBID      WAITING        ec2-AA-BB-CC-DD.compute-1.amazonaws.com         mahout-tutorial

 

./elastic-mapreduce --terminate j-UNIQUEJOBID

8.  确认是否关闭

./elastic-mapreduce --list

 

j-UNIQUEJOBID     SHUTTING_DOWN     ec2-AA-BB-CC-DD.compute-1.amazonaws.com         mahout-tutorial

几分钟之后

./elastic-mapreduce --list

 

j-UNIQUEJOBID     TERMINATED     ec2-AA-BB-CC-DD.compute-1.amazonaws.com         mahout-tutorial

总结

恭喜!你已经构建了一个简单的推荐系统,其中包含了开发更复杂推荐系统的关键模块:

  • 采集原始数据
  • 进行数据预处理
  • 运行分析作业
  • 分析结果数据
  • 通过web服务发布结果数据

你可以从以下几个途径进一步探索本示例,比如替换SIMILARITY_COSINE为VectorSimilarityMeasure中的另外一个度量,以此来通过不同的距离度量而不是余弦相似性来判断两个用户是否喜欢同一类型的电影。当然你还可以让推荐结果变得更容易解读,将电影ID和电影名字以及介绍关联在一起返回给查询请求是一个不错的主意。

Mahout还包含了其他的推荐算法,其中还包括和Netflix奖相关的算法:交替最小二乘法(ALS)。该项目还包含了用于分类和聚类的算法,这些算法被封装为一个个的工具,从命令行就能访问和使用。

Mahout社区倡导积极与用户和开发人员合作。 您可以通过在EMR上尝试使用Mahout,或者通过下载自己的副本并在本地或在自己的集群上运行Mahout。 您可以提交有关如何使用工具的问题,并向用户邮件列表中提出可能的错误,您还可以在这里讨论开发人员邮件列表中的问题,从而为开发做出贡献。 如果您遇到要更正的错误或者新的功能要更新到项目中,请您在项目Jira页面上提供故障单并说明具体问题。如果您想要在页面顶部看到创建问题按钮,请确保创建一个帐户。

 

作者介绍

刘磊,曾供职于中国银联电子支付研究院,期间获得上海市科技进步一等奖,并申请7项国家发明专利。现任职于AWS中国专业服务团队,致力于为客户提供基于AWS服务的专业大数据解决方案、项目实施工作以及咨询服务。

AWS 连续 7 年在 Gartner 的基础设施即服务 (IaaS) 魔力象限中被评为领导者

在 AWS,每个新产品的规划环节都是围绕客户展开的。我们竭尽全力倾听和学习,利用我们了解到的信息构建未来发展的路线图。在路线图中,有大约 90% 的项目源于客户的要求,专为满足客户与我们分享的特定需求和要求而设计。我坚信,正是这种由客户推动的创新帮助我们连续 7 年锁定 Gartner 云基础设施即服务 (IaaS) 魔力象限中领导者象限的右上角位置,实现最高的执行能力以及最充分的愿景完成度:要了解更多信息,请阅读完整报告。其中包含了大量细节,很好地总结了我们的客户在挑选云提供商时所考虑的功能和因素。

-Jeff

 

 

新增 – Amazon WorkSpaces 托管设备身份验证

Amazon Workspaces 允许您通过 Web 和各种桌面和移动设备访问云中的虚拟桌面。WorkSpaces 的这种灵活性使它非常适用于用户能够使用现有设备 (即 BYOD,也称为自带设备) 的环境。在这些环境中,组织有时需要对访问 WorkSpaces 的设备进行管理。例如,他们可能需要根据客户端设备的操作系统、版本或补丁级别控制这些设备的访问,从而满足合规性或安全性策略要求。

托管设备身份验证

今天我们发布了 WorkSpaces 的设备身份验证。现在,您可以使用数字证书管理 Apple OSX 和 Microsoft Windows 客户端访问。您还可以选择允许或阻止 iOS、Android、Chrome OS、Web 和零客户端设备的访问。您可以实施策略,控制您希望允许和阻止的设备类型,这种控制可以一直细化到补丁一级。访问策略是针对每个 WorkSpaces 目录设置的。设置策略后,会评估客户端设备连接 WorkSpaces 的请求,并进行阻止或允许。要利用此功能,您需要使用 Microsoft System Center Configuration Manager 或移动设备管理 (MDM) 工具将证书分发到您的客户端设备。

以下是通过 WorkSpaces 控制台设置访问控制选项的方式:

以下是客户端未授权连接的情况:

现已推出

此功能现已在支持 WorkSpaces 的所有区域推出。

-Jeff

Amazon Lightsail 更新 – 另外 9 个区域和全球控制台

借助 Amazon Lightsail,您只需单击几次即可在 AWS 上启动虚拟私有服务器。[ls_i] 的价格为每月 5 美元起,它可处理繁重工作并使您能够轻松构建和托管应用程序。正如我的 re:Invent 博客文章 (Amazon Lightsail – 兼具 AWS 的强大功能与 VPS 的简易性) 中所述,您可以从菜单中选择配置,并启动预先配置了基于 SSD 的存储、DNS 管理功能和静态 IP 地址的虚拟机。

自我们在 11 月推出 Lightsail 以来,许多客户都使用它来启动虚拟私有服务器。举例来说,莫纳什大学借助 Amazon Lightsail 以简单且经济高效的方式快速为大量 CMS 服务重新建立一个平台。他们已迁移 50 种工作负载,并且目前正在考虑创建基于 Lightsail 的内部 CMS 服务,以允许全体教职员工和学生通过自助方式创建自己的 CMS 实例。如今,我们正在将 Lightsail 扩展到另外 9 个 AWS 区域,并推出了新的全球控制台。

新区域

在 re:Invent 大会上,我们宣布在 美国东部(弗吉尼亚北部)区域提供 Lightsail。在5月早些时候,我们增加了对美国和欧洲的其他几个区域的支持。现在,我们在亚太地区中的 4 个区域推出了 Lightsail,从而将区域总数增加到了 10 个。下面是完整列表:

  • 美国东部(弗吉尼亚北部)
  • 美国西部(俄勒冈)
  • 美国东部(俄亥俄)
  • 欧洲(伦敦)
  • 欧洲(法兰克福)
  • 欧洲(爱尔兰)
  • 亚太地区(孟买)
  • 亚太地区(东京)
  • 亚太地区(新加坡)
  • 亚太地区(悉尼)

全球控制台

利用更新后的 Lightsail 控制台,您可以在一个或多个区域内轻松创建和管理资源。我仅选择在创建新实例时所需的区域:

我可以在同一页面上查看我所有的实例和静态 IP 地址,而无论它们在哪个区域内:

我可以跨我的所有资源和区域执行搜索。我所有的 LAMP 堆栈:

或我在 欧洲(爱尔兰) 区域内的所有资源:

我可以在 Snapshots 选项卡上执行类似搜索:

利用新的 DNS zones 选项卡,我可以查看我的现有区域和创建新区域:

现在,SSH 密钥对的创建过程是特定于区域的:

我可以按区域管理我的密钥对:

静态 IP 地址也是特定于某个特定区域的:

现已推出

现在,您可以使用新的 Lightsail 控制台并在所有 10 个区域中创建资源!

-Jeff