《大数据架构和算法实现之路:电商系统的技术实战》——1.5 相关软件:R和Mahout

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介:

本节书摘来自华章计算机《大数据架构和算法实现之路:电商系统的技术实战》一书中的第1章,第1.5节,作者 黄 申,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.5 相关软件:R和Mahout

了解了机器学习和分类的基本知识之后,你会发现相关算法本身的实现也是需要大量的专业知识的,开发的门槛也比较高。如果一切从头开始,整个流程将包括构建算法模型、计算离线评估的指标、打造在线实时服务等内容,完成所有这些我们才有可能满足业务的需求,如此之长的战线,对于竞争激烈的电商而言是无法接受的。那么有没有现成的软件可以帮助我们完成这个艰巨的任务呢?答案是肯定的。这里将介绍两个常见的机器学习软件工具:R和Mahout。

1.5.1 R简介

R(https://www.r-project.org/ )提供了一套基于脚本语言的解决方案,协助没有足够计算机编程知识的用户进行机器学习的测试,并快速地找到适合的解决方案。R虽然只有一个字母,但是其代表了一整套的方案,包括R语言及其对应的系统工具。早在1980年左右诞生了一种S语言,它广泛应用于统计领域,而R语言是它的一个分支,可以认为是S语言的一种实现。相对于Java和稍后要介绍的Mahout而言,R的脚本式语言更加容易理解,而且它还提供了颇为丰富的范例供大家直接使用。此外R的交互式环境和可视化工具也极大地提高了生产效率,人们可以从广泛的来源获取数据,将数据整合到一起,并对其进行清洗等预处理,然后用不同的模型和方法进行分析,最后通过直观的可视化方式来展现结果。当然,还有一点非常关键:R是免费的,相对于价格不菲的商业软件而言,它的性价比实在是太高了。下面是R的几个主要功能。

  • 交互式的环境:R具有良好的互动性。它拥有图形化的输入输出窗口,对于编辑语法中出现的错误会马上在窗口中予以提示,还会记忆之前输入过的命令,可以随时再现、编辑历史记录以满足用户的需要。输出的图形可以直接保存为JPG、BMP、PNG等多种图片格式。
  • 丰富的包(Package):R提供了大量开箱即用的功能,称为包。你可以将其理解为R社区用户贡献的模块,从简单的数据处理,到复杂的机器学习和数据挖掘算法,都有所涵盖。截至本书撰写的时候,包的总数已经超过了1万,横跨多个领域。初次安装R的时候自带了一系列默认的包,会提供默认的函数和数据集,其他的扩展可根据需要下载并安装。
  • 直观的图示化:俗话说,“一图胜千言”,图形展示是最高效且形象的描述手段,巧妙的图形展示也是高质量数据分析报告的必备内容。因此一款优秀的统计分析软件必须具备强大的图形展示功能,R也不例外。同样,画图都有现成的函数可供调用,包括直方图(hist())、散点图(plot())、柱状图(barplot())、饼图(pie())、箱线图(boxplot())、星相图(stars())、脸谱图(faces())、茎叶图(stem())等。

1.5.2 Mahout简介

虽然R语言及其工具非常强大,但是由于脚本语言的限制,其性能往往不能达到大规模在线应用的要求。因此,还可以考虑Apache的Mahout(http://mahout.apache.org )。Mahout项来源于Lucene开源搜索社区对机器学习的兴趣,其初衷是希望实现一些常见的用于数据挖掘的机器学习算法,并拥有良好的可扩展性和维护性,达到帮助开发人员方便快捷地创建智能应用程序的目的。该社区最初基于一篇关于在多核服务器上进行机器学习的学术文章进行了原型的开发,此后在发展中又并入了更多广泛的机器学习方法。因此,Mahout除了提供最广为人知的推荐算法之外,还提供了很多分类、聚类和回归挖掘的算法。和其他的算法系统相比,Mahout通过Apache Hadoop将算法有效地扩展到了分布式系统中。随着训练数据的不断增加,非分布式的系统用于训练的时间或硬件需求并不是线性增加的,这点已经在计算机系统中被广泛验证。因为5倍的训练数据而导致100倍的训练时间,那将是用户无法接受的事情。Mahout可以将数据切分成很多小块,通过Hadoop的HDFS存储,通过Map-Reduce来计算。分布式的协调处理可将时间消耗尽量控制在线性范围之内。因此,当训练的数据量非常庞大的时候,Mahout的优势就会体现出来。按照其官方的说法,这个规模的临界点在百万到千万级,具体还要看每个数据对象和挖掘模型的复杂程度。

Mahout中的分类算法,除了常见的决策树、朴素贝叶斯和回归,还包括了支持向量机(Support Vector Machine)、随机森林(Random Forests)、神经网络(Neural Network)和隐马尔科夫模型(Hidden Markov Model),等等。支持向量机属于一般化线性分类器,特点是能够同时最小化经验误差和最大化几何边缘区。随机森林是一个包含多个决策树的分类器,在决策树的基础上衍生而来,其分类标签的输出由多个决策树的输出投票来决定,这在一定程度上弥补了单个决策树的缺陷。最近几年随着深度学习(Deep Learning)的流行,神经网络再次受到人们的密切关注。众所周知,人脑是一个高度复杂的、非线性的并行处理系统。人工建立的神经网络起源于对生物神经元的研究,并试图模拟人脑的思维方式,对数据进行分类、预测及聚类。隐马尔科夫模型更适合有序列特性的数据挖掘,例如语音识别、手写识别和自然语音处理等,其中文字和笔画的出现顺序对后面的预测都会很有帮助。

不难发现,R和Mahout都实现了主要的机器学习算法。那么,它们的定位是否会重复呢?其实,它们有各自的长处,并不矛盾。通常,在具体的算法还未确定之前,我们可以使用R进行快速测试,选择合适的算法,预估大体的准确率。参照R所给出的结果,就可以确定是否可以采用相关的学习算法,以及具体的模型。在此基础之上,我们再利用Mahout打造大规模的、在线的后台系统,为前端提供实时性的服务。在下面的实践部分,我们就将展示这样的工作流程。

1.5.3 Hadoop简介

既然提到了Mahout和并行的分布式学习,就需要介绍一下Apache Hadoop。Apache Hadoop是一个开源软件框架,用于分布式存储和大规模数据处理。2003年,Google发表了一篇论文描述他们的分布式文件系统(Google File System,GFS),为另一个开源项目Nutch攻克数十亿网页的存储难题提供了方向。Nutch和Lucene的创始人Doug Cutting受到此文的启发,和团队一起开发了Nutch的分布式文件系统(Nutch Distributed File System,NDFS)。2004年,Google又发表了一篇重量级的论文《MapReduce:在大规模集群上的简化数据处理》(“MapReduce: Simplif?ied Data Processing on Large Clusters”)。之后,Doug Cutting等人开始尝试实现论文所阐述的计算框架MapReduce。此外,为了更好地支持该框架,他们还将其与NDFS相结合。2006年,该项目从Nutch搜索引擎中独立出来,成为如今的Hadoop(http://hadoop.apache.org)。两年之后,Hadoop已经发展成为Apache基金会的顶级项目,并应用于很多著名的互联网公司,目前其最新的版本是2.x。

Hadoop发展的历史决定了其框架最核心的元素就是HDFS和MapReduce。如今的Hadoop系统已经可以让使用者轻松地架构分布式存储平台,并开发和运行大规模数据处理的应用,其主要优势如下。

  • 透明性:使用者可以在不了解Hadoop底层细节的情况下,开发分布式程序,充分利用集群的威力进行高速运算和存储。
  • 高扩展性:扩展分为纵向和横向,纵向是增加单机的资源,总是会达到瓶颈,而横向则是增加集群中的机器数量,获得近似线性增加的性能,不容易达到瓶颈。Hadoop集群中的节点资源,采用的就是横向方式,可以方便地进行扩充,并获得显著的性能提升。
  • 高效性:由于采用了多个资源并行处理,使得Hadoop不再受限于单机操作(特别是较慢的磁盘I/O读写),可以快速地完成大规模任务。加上其所具有的可扩展性,随着硬件资源的增加,性能将会得到进一步的提升。
  • 高容错和高可靠性:Hadoop中的数据都有多处备份,如果数据发生丢失或损坏,其能够自动从其他副本(Replication)进行复原。类似的,失败的计算任务也可以分配到新的资源节点,进行自动重试。
  • 低成本:正是因为Hadoop有良好的扩展性和容错性,所以没有必要再为其添置昂贵的高端服务器。廉价的硬件,甚至是个人电脑都可以称为资源节点。
  • 在使用HDFS的实践中,人们还发现其存在如下几个弱点。
  • 不适合实时性很强的数据访问。试想一下,对于一个应用的查询,其对应的数据通常是分散在HDFS中不同数据节点上的。为了获取全部的数据,需要访问多个节点,并且在网络中传输不同部分的结果,最后进行合并。可是,网络传输的速度,相对于本机的硬盘和内存读取都要慢很多,因此就拖累了数据查询的执行过程。
  • 无法高效存储大量小文件。对于HDFS而言,如果存在太多的琐碎文件,那就意味着存在庞大的元数据需要处理,这无疑大大增加了命名节点的负载。命名节点检索的效率明显下降,最终也会导致整体的处理速度放缓。

不过,整体而言,HDFS还是拥有良好的设计的,对Hadoop及其生态体系的流行起到了关键的作用。它所提供的对应用程序数据的高吞吐量访问,非常适合于存储大量数据,例如用户行为日志。在本书的第11章关于用户行为跟踪的内容中,我们将展示怎样结合使用HDFS与Flume。

而Hadoop的另一个要素MapReduce,其核心是哈希表的映射结构,其包含如下几个重要的组成模块。

  • 数据分割(Data Splitting):将数据源进行切分,并将分片发送到Mapper上。例如将文档的每一行作为最小的处理单元。
  • 映射(Mapping):Mapper根据应用的需求,将内容按照键-值的匹配,存储到哈希结构中。例如,将文本进行中文分词,然后生成<牛奶,1>这样的配对,表示“牛奶”这个词出现了一次。
  • 洗牌(Shuff?ling):不断地将键-值的配对发给Reducer进行归约。如果存在多个Reducer,则还会使用分配(Partitioning)对Reducer进行选择。例如,“牛奶”“巧克力”“海鲜”这种属于商品的单词,专门交给负责统计商品列表的Reducer来完成。
  • 归约(Reducing):分析所接受到的一组键值配对,如果是与键内容相同的配对,那就将它们的值进行合并。例如,一共收到12个<牛奶,1>({<牛奶,1>,<牛奶,1>}…<牛奶,1>}),那么就将其合并为<牛奶,12>。最终“牛奶”这个单词的词频就统计为12。

为了提升洗牌阶段的效率,可以减少发送到归约阶段的键-值配对。具体的做法是在映射和洗牌之间,加入合并(Combining)的过程,在每个Mapper节点上先进行一次本地的归约,然后只将合并后的结果发送到洗牌和归约阶段。

图1-4展示了MapReduce框架的基本流程和对应的模块。

screenshot

有了分布式文件系统(HDFS)和分布式计算框架MapReduce这两驾马车保驾护航,Hadoop系统近几年的发展可谓风生水起。不过,人们也意识到MapReduce框架的一些问题。比如,工作跟踪节点Job Tracker,它是MapReduce的集中点,完成了太多的任务,造成了过多的资源消耗,存在单点故障的可能性较大。而在任务跟踪(Task Tracker)节点端,用任务的数量来衡量负载的方式则过于简单,没有考虑中央运算器CPU、内存和硬盘等的使用情况,有可能会出现负载不均和某些节点的过载。Map和Reduce任务的严格划分,也可能会导致某些场合下系统的资源没有被充分利用。

面对种种问题,研发人员开始思考新的模式,包括Apache Hadoop YARN(Yet Another Resource Negotiator)等。Apache Hadoop YARN是一种新的资源管理器,为上层应用提供了统一的Hadoop资源管理和调度。YARN将工作跟踪(Job Tracker)节点的两个主要功能分成了两个独立的服务程序:全局的资源管理器(Resource Manager)和针对每个应用的主节点(Application Master)。如此设计是为了让子任务的监测进行分布式处理,大幅减少了工作跟踪节点的资源消耗。同时,这里所说的应用既可以是传统意义上的MapReduce任务,也可以是基于有向无环图(DAG)的任务。因此,在YARN的基础上,甚至还可以运行Spark和Storm这样的流式计算和实时性作业,并利用Hadoop集群的计算能力和丰富的数据存储模型,提升数据共享和集群的利用率。对于Hadoop更多细节感兴趣的读者,可以阅读《大数据架构商业之路》的第3章和第4章。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
员工上网行为监控软件中基于滑动窗口的C#流量统计算法解析​
在数字化办公环境中,员工上网行为监控软件需要高效处理海量网络请求数据,同时实时识别异常行为(如高频访问非工作网站)。传统的时间序列统计方法因计算复杂度过高,难以满足低延迟需求。本文将介绍一种基于滑动窗口的C#统计算法,通过动态时间窗口管理,实现高效的行为模式分析与流量计数。
19 2
基于 C# 深度优先搜索算法的局域网集中管理软件技术剖析
现代化办公环境中,局域网集中管理软件是保障企业网络高效运行、实现资源合理分配以及强化信息安全管控的核心工具。此类软件需应对复杂的网络拓扑结构、海量的设备信息及多样化的用户操作,而数据结构与算法正是支撑其强大功能的基石。本文将深入剖析深度优先搜索(Depth-First Search,DFS)算法,并结合 C# 语言特性,详细阐述其在局域网集中管理软件中的应用与实现。
51 3
基于SCA的软件无线电系统的概念与架构
软件通信体系架构(SCA)是基于软件定义无线电(SDR)思想构建的开放式、标准化和模块化平台,旨在通过软件实现通信功能的灵活配置。SCA起源于美军为解决“信息烟囱”问题而推出的联合战术无线电系统(JTRS),其核心目标是提升多军种联合作战通信能力。 上海介方信息公司的OpenSCA操作环境严格遵循SCA4.1/SRTF标准,支持高集成、嵌入式等场景,适用于军用通信、雷达等领域。 SCA体系包括目标平台资源层(TRL)、环境抽象层(EAL)、SRTF操作环境(OE)及应用层(AL)。其中,SRTF操作环境包含操作系统、运行时环境(RTE)和核心框架(CF),提供波形管理、资源调度等功能。
基于 PHP 语言深度优先搜索算法的局域网网络监控软件研究
在当下数字化时代,局域网作为企业与机构内部信息交互的核心载体,其稳定性与安全性备受关注。局域网网络监控软件随之兴起,成为保障网络正常运转的关键工具。此类软件的高效运行依托于多种数据结构与算法,本文将聚焦深度优先搜索(DFS)算法,探究其在局域网网络监控软件中的应用,并借助 PHP 语言代码示例予以详细阐释。
43 1
内网网管软件中基于 Node.js 的深度优先搜索算法剖析
内网网管软件在企业网络中不可或缺,涵盖设备管理、流量监控和安全防护。本文基于Node.js实现深度优先搜索(DFS)算法,解析其在网络拓扑遍历中的应用。通过DFS,可高效获取内网设备连接关系,助力故障排查与网络规划。代码示例展示了图结构的构建及DFS的具体实现,为内网管理提供技术支持。
61 11
解锁文件共享软件背后基于 Python 的二叉搜索树算法密码
文件共享软件在数字化时代扮演着连接全球用户、促进知识与数据交流的重要角色。二叉搜索树作为一种高效的数据结构,通过有序存储和快速检索文件,极大提升了文件共享平台的性能。它依据文件名或时间戳等关键属性排序,支持高效插入、删除和查找操作,显著优化用户体验。本文还展示了用Python实现的简单二叉搜索树代码,帮助理解其工作原理,并展望了该算法在分布式计算和机器学习领域的未来应用前景。
公司员工电脑监控软件剖析:PHP 布隆过滤器算法的应用与效能探究
在数字化办公的浪潮下,公司员工电脑监控软件成为企业管理的重要工具,它能够帮助企业了解员工的工作状态、保障数据安全以及提升工作效率。然而,随着监控数据量的不断增长,如何高效地处理和查询这些数据成为了关键问题。布隆过滤器(Bloom Filter)作为一种高效的概率型数据结构,在公司员工电脑监控软件中展现出独特的优势,本文将深入探讨 PHP 语言实现的布隆过滤器算法在该软件中的应用。
25 1
Cursor这类编程Agent软件的模型架构与工作流程
编程Agent的核心是一个强大的大语言模型,负责理解用户意图并生成相应的代码和解决方案。这些模型通过海量文本和代码数据的训练,掌握了广泛的编程知识和语言理解能力。
52 1
|
20天前
|
员工行为监控软件中的 Go 语言哈希表算法:理论、实现与分析
当代企业管理体系中,员工行为监控软件已逐步成为维护企业信息安全、提升工作效能的关键工具。这类软件能够实时记录员工操作行为,为企业管理者提供数据驱动的决策依据。其核心支撑技术在于数据结构与算法的精妙运用。本文聚焦于 Go 语言中的哈希表算法,深入探究其在员工行为监控软件中的应用逻辑与实现机制。
56 14
|
23天前
|
单位电脑监控软件中 PHP 哈希表算法的深度剖析与理论探究
数字化办公的时代背景下,单位电脑监控软件已成为企业维护信息安全、提升工作效率的关键工具。此类软件可全面监测员工的电脑操作行为,收集海量数据,故而高效管理和处理这些数据显得尤为重要。数据结构与算法在此过程中发挥着核心作用。本文将聚焦于哈希表这一在单位电脑监控软件中广泛应用的数据结构,并通过 PHP 语言实现相关功能,为优化单位电脑监控软件提供技术支持。
37 3

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等