1.5 大数据相关工具

继云计算技术之后大数据时代快速来临,大数据充满世界的每个角落,发展势头盖过任何一门技术。以Hadoop大数据平台、Python和R语言等为首的相关工具掀起一场狂潮。

1.5.1 Hadoop

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序,充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的硬件上;而且它提供高吞吐量来访问应用程序的数据,适合那些有着超大数据集的应用程序。HDFS放宽了POSIX的要求,可以以流的形式访问文件系统中的数据。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,MapReduce则为海量的数据提供了计算框架。图1-7为Hadoop图标。

图1-7 Hadoop图标

Hadoop在大数据处理中的广泛应用得益于其自身在数据提取、变形和加载(ETL)方面上的天然优势。Hadoop的分布式架构,将大数据处理引擎尽可能地靠近存储,对例如像ETL这样的批处理操作相对合适,因为类似这样操作的批处理结果可以直接走向存储。Hadoop的MapReduce功能实现了将单个任务打碎,并将碎片任务(Map)发送到多个节点上,之后再以单个数据集的形式加载(Reduce)到数据仓库里。

Hadoop由许多元素构成。其最底部是HDFS,它存储Hadoop集群中所有存储节点上的文件。HDFS的上一层是MapReduce引擎,该引擎由JobTrackers和TaskTrackers组成。Hadoop分布式计算平台的核心技术包括分布式文件系统HDFS、MapReduce处理过程,以及数据仓库工具Hive和分布式数据库Hbase。

例1-2在Hadoop编辑器中输入下列代码

执行程序后可得到下列结果:

1.5.2 R语言

R语言诞生于1980年左右,是统计领域广泛使用的S语言的一个分支。可以认为,R语言是S语言的一种实现。而S语言是由AT&T贝尔实验室开发的一种用来进行数据探索、统计分析和作图的解释型语言。最初S语言的实现版本主要是S-Plus。S-Plus是一个商业软件,它基于S语言,并由MathSoft公司的统计科学部进一步完善。后来新西兰奥克兰大学的RobertGentleman和Ross Ihaka及其他志愿人员开发了一个R系统,由“R开发核心团队”负责开发。R可以看作贝尔实验室(AT&T BellLaboratories)的RickBecker,JohnChambers和AllanWilks开发的S语言的一种实现。当然,S语言也是S-Plus的基础。所以,两者在程序语法上可以说几乎是一样的,可能只是在函数方面有细微差别,程序十分容易地就能被移植到程序中,而很多的程序只要稍加修改也能运用于R。图1-8为R语言图标。

图1-8 R语言图标

R是一套由数据操作、计算和图形展示功能整合而成的套件,包括有效的数据存储和处理功能,一套完整的数组计算操作符;完整体系的数据分析工具,为数据分析和显示提供的强大图形功能;一套完善、简单、有效的编程语言(包括条件、循环、自定义函数、输入输出功能)。在这里使用“环境”是为了说明R的定位是一个完善、统一的系统,而非其他数据分析软件那样作为一个专门、不灵活的附属工具。

与其说R是一种统计软件,还不如说R是一种数学计算的环境,因为R并不是仅仅提供若干统计程序、使用者只需指定数据库和若干参数便可进行统计分析。R的思想是:它可以提供一些集成的统计工具,但更大量的是它提供各种数学计算、统计计算的函数,从而使使用者能灵活机动地进行数据分析,甚至创造出符合需要的新的统计计算方法。

该语言的语法表面上类似C,但在语义上是函数设计语言(Functional Programming Language)的变种,并且和Lisp以及APL有很强的兼容性。特别的是,它允许在“语言上计算”。这使得它可以把表达式作为函数的输入参数,而这种做法对统计模拟和绘图非常有用。

R是一个免费的自由软件,它有UNIX、Linux、MacOS和Windows版本,都是可以免费下载和使用的。在https://jingyan.baidu.com/article/647f0115d11aab7f20489875.html可以下载到R的安装程序。在R的安装程序中只包含了8个基础模块,其他外在模块可以通过CRAN获得。

R的功能能够通过由用户撰写的套件增强。增加的功能有特殊的统计技术、绘图功能,以及编程界面和数据输出/输入功能。这些软件包是由R语言、LaTeX、Java及C语言和Fortran撰写。下载的执行档版本会附加一批核心功能的软件包,而根据CRAN纪录有过千种不同的软件包。其中有几款较为常用,如用于经济计量、财经分析、人文科学研究以及人工智能。

例1-3在R语言编辑器中的提示符后输入下列代码然后按下回车即可看到结果

或输入下列指令,可得到结果:

1.5.3 Python语言

Python是一种广泛使用的高级编程语言,属于通用型编程语言,由吉多·范罗苏姆创造,第一版发布于1991年,可以视之为一种改良(加入一些其他编程语言的优点,如面向对象)的LISP(表处理语言)。作为一种解释型语言,Python的设计哲学强调代码的可读性和简洁的语法(尤其是使用空格缩进划分代码块,而非使用大括号或者关键词)。相比于C++或Java,Python让开发者能够用更少的代码表达想法。不管是小型还是大型程序,该语言都试图让程序的结构清晰明了。与Scheme、Ruby、Perl、Tcl等动态类型编程语言一样,Python拥有动态类型系统和垃圾回收功能,能够自动管理内存使用,并且支持多种编程范式,包括面向对象、命令式、函数式和过程式编程。其本身拥有一个巨大而广泛的标准库。图1-9为Python图标。

图1-9 Python图标

Python解释器本身几乎可以在所有的操作系统中运行。Python的正式解释器CPython是用C语言编写的、由社群驱动的自由软件,目前由Python软件基金会管理。

Python是完全面向对象的语言(函数、模块、数字、字符串都是对象),并且完全支持继承、重载、派生、多重继承,有益于增强源代码的复用性。Python支持重载运算符,因此Python也支持泛型设计。相对于LISP这种传统的函数式编程语言,Python对函数式设计只提供了有限的支持。有两个标准库提供了与Haskell和Standard ML中类似的函数式程序设计工具。虽然Python可能被粗略地分类为“脚本语言”,但实际上一些大规模软件开发项目(如Zope、Mnet、BitTorrent、Google)也广泛地使用它。

Python本身被设计为可扩充的。并非所有的特性和功能都集成到语言核心。Python提供了丰富的API和工具,以便程序员能够轻松地使用C、C++、Cython来编写扩充模块。Python编译器本身也可以被集成到其他需要脚本语言的程序内。Python的设计哲学是优雅、明确、简单。Python开发者的哲学是“用一种方法,最好是只有一种方法来做一件事”,也因此它和拥有明显个人风格的其他语言很不一样。在设计Python语言时,如果面临多种选择,Python开发者一般会拒绝华而不实的语法,而选择明确没有或者很少有歧义的语法。这些准则被称为“Python格言”。在Python解释器内运行“import this”可以获得完整的列表。

例1-4在Python编辑器内输入以下代码并得到结果

1.5.4 RapidMiner

RapidMiner是世界领先的数据挖掘解决方案,RapidMiner具有丰富的数据挖掘分析和算法功能,常用于解决各种商业关键问题,如营销响应率、客户细分、客户忠诚度及终身价值、资产维护、资源规划、预测性维修、质量管理、社交媒体监测和情感分析等典型商业案例。其解决方案覆盖了各个领域,包括汽车、银行、保险、生命科学、制造业、石油和天然气、零售业及快消行业、通信业、公用事业等各个行业。图1-10为RapidMiner图标。

图1-10 RapidMiner图标

1.5.5 Tableau

Tableau致力于帮助人们查看并理解数据。Tableau帮助用户快速分析、可视化并分享信息。超过42,000家客户通过使用Tableau在办公室或随时随地快速获得结果。数以万计的用户使用Tableau Public在博客与网站中分享数据。Tableau公司将数据运算与美观的图表完美地嫁接在一起。它的程序很容易上手,各公司可以用它将大量数据拖放到数字“画布”上,转眼间就能创建好各种图表。这一软件的理念是,界面上的数据越容易操控,公司对自己所在业务领域里的所作所为到底是正确还是错误就能了解得越透彻。图1-11为Tableau图标。

图1-11 Tableau图标