1、Hadoop套件和朋友们
Hadoop在过去的几年里,几乎成为大数据的代名词。这是数据科学家的兵器库中的主要支撑。知道 Hadoop不只是一个程序是非常重要的,它更像一组工具(类似于微软的Office)。这个套件被用于传输,保存和处理大数据。它还包含有一个调度器 (Oozie)、元数据和表格管理架构(HCatalog)。所有在Hadoop中处理数据的任务都是分布在安装了Hadoop的所有机器集群中的,这些 任务可以是面向对象程序(OOP)代码、数据分析程序、数据图形化脚本以及其他具有有限处理时间(finite process time)特征和对数据分析有用的任务。Hadoop会确保不管你对数据做什么样的操作都能以高效的方式完成,并以直观的方式呈现。
Hadoop套件由以下几个组件组成,所有的组件都很重要。
MapReduce 由Google创建,并且是Hadoop的主要组件。正如在之前的部分我们曾提到过的那样,这是任何大数据技术的核心。尽管这是Hadoop固有的特性, 但它也可以在其他的大数据程序,例如MPP和NoSQL数据库(例如,MongoDB)。MapReduce最初是具有商业所有权的,但随着Yahoo在 2006年提供了慷慨的资金支持,它以Hadoop的开源形式出现,并在两年内迅速受到广泛欢迎。作为一个著名的并行计算算法,它得以让数据库的查询建立 在一个计算机集群上,任务可以分拆成小份,并跨越整个集群的节点。
HDFS是Hadoop 分布式文件系统的简称,这是Hadoop系统所使用的文件系统。被Hadoop所处理的数据必须先导入到HDFS中,并备份在运行了Hadoop的计算机网络中。它的数据极限大约在30PB。
Pig是针对Hadoop进行计算的一个高级编程语言(High-level programming language)。你可以将它视为Hadoop生态系统中各种操作的控制元件。它的性能是可扩展的。
Hive是一个数据仓库程序,是以“类-SQL”语言进行访问使用的,他是为横跨Hadoop集群的数据设计的。并且它的性能是可扩展的。
HBase、 Sqoop以及Flume是Hadoop的数据库组件。HBase是一个可以运行在Hadoop环境上的列式数据库。它是基于Google的 BigTable设计的,并且数据极限约为1PB。另外,它比直接在HDFS上访问数据要慢一些。这对于处理存在HBase里面的数据来说不是很好,对 HBase对于归档和时间系列数据的计数很合适。Sqoop是一个将关系型数据库中的数据导入到HDFS中的程序。Flume与此类似,它关注于收集和导 入各种数据源的日志和任务数据。
Mahout是一个机器学习和数据挖掘算法的函数库,用于对存储在HDFS的数据进行处理。
Zookeeper服务于Hadoop有一“群”各种各样功能的组件,所以调试管理以及协调程序是十分必要的。Zookeeper保证了整个套件的整合以及相对得简便操作。
Hadoop套件还有一些其他的组件用来补充以上这些核心组件。而熟悉它们最好的方法是去下载一个Hadoop玩一下。当需要确定基准(Benchmark)的时候,你可以选择去读一下教程(或者,如果你能读一下用户手册则更好)。
Hadoop 并不是进入大数据技术的唯一选择。另有一个也很有意思但并不那么有名的备选方案是Storm(被Twitter、阿里巴巴、Groupon以及其他许多公 司所使用)。Storm显著快于Hadoop,同样也是开源,而且使用起来相对简单,是一个值得选用的Hadoop备选方案。不像Hadoop, Storm 不执行MapReduce任务,而是运行topology(拓扑)。核心的差异在于MapReduce最终会将任务结束,而topology会永远运行或 直到它被用户终止。(你可以将它类比为操作系统后台一直运行的进程)。topology可以被画成计算图,用以处理数据流。这些数据流的源被称为 spout(形象化为“水龙头”),而它们会被接入bolt(形象化为“闪电”)。一个bolt可以使用任意数量的输入源,做一些处理,并输出新的数据 流。
对数据使用Topology方法可以确保即使在出现故障的情况下也能处理出正确的结果(因为topology会持续地运行),也就是说 如果计算机集群中的某一台计算机发生了问题也不会危害到在运行在整个集群上任务的一致性。需要注意的是,Storm topology 一般是由Java、Ruby、Python和Fancy语言编写而成。Storm软件则是由Java和Clojure(一个与Java配合良好的函数型语 言)编写,同时它的源代码也是这个类型技术中最为流行的项目。
这个软件的优势在于它处理数据的实时性、简单的API、可扩展性、容错性、简单部署、免费且开源并能够确保数据处理,以及可以在其上使用各种编程语言。它有横跨美国东西海岸、伦敦以及其他地区,并持续壮大的用户社区。
除了Storm这个非常流行并且提供了灵活和简单地操作还很有前景的Hadoop的替代品之外,还有一些其他软件同样宣称自己具有类似特性并尝试挑战Hadoop在大数据世界的支配权。最值得推荐的几个软件(在编写本书的时候)有如下几个。
Spark 由加利福尼亚大学伯克利分校的AMP Lab开发而成。Spark是MapReduce领域的最新玩家,它的目标是数据分析在写入和运行端的速度更加快速。不像许多在这个领域的系 统,Spark使用内存查询数据,替代了磁盘的读写。这样,Spark在许多迭代算法上比Hadoop的表现更为优越。它是由Scala实现的(参见一下 部分),在写作本书的时候,它的主要用户是UC Berkeley的研究者和Conviva公司。
BashReduce作为一个脚本工 具,BashReduce可以用标准UNIX命令(如sort、awk、grep、join等执行MapReduce,成为了Hadoop的另一个备选工 具。它支持映射/分割、规约以及合并等功能命令。尽管它根本没有一个分布式文件系统,BashReduce还是将文件分布到了工作节点中,但不可避免地缺 少容错。它没有Hadoop那么复杂,同时可以进行快速开发。除了容错的问题之外,它还缺乏灵活性,因为BashReduce只能工作在特定的UNIX命 令环境中。BashReduce是由Erik Frey(在线电台last.fm)以及他的助手们开发。
Disco Project最初是由诺基亚(Nokia)研究院开发,Disco已经默默无闻了很多年。MapReduce作业由简单的Python编写,而 Disco的后端是以Erlang编写的,一个可扩展的函数型语言,内置支持并发、容错以及分布,使得它成为一个理想的MapReduce系统。与 Hadoop类似,Disco分布并复制存放数据,但它没有自己的文件系统。由于它的高效,在作业调度方面也是值得称道的。
GraphLab 由卡内基梅隆大学开发,为机器学习应用服务而设计,GraphLab旨在提高并行机器学习算法设计的执行效率和正确性。GraphLab拥有它自己版本的 映射(map)阶段,称为更新阶段。不像MapReduce,更新阶段可以读取和修改数据的交集。它基于图的方法使得在图形的机器学习上更具可控性,同时 提升了动态迭代算法。
HPCC 系统以它自己的大规模数据分析架构,HPCC试图用Enterprise Control Language语言(ECL)更近编写并行工作流,ECL语言是一个声名式语言,以数据为中心的语言(有些类似于SQL、Datalog和Pig)。 HPCC是用C++写成的,根据一些人的说法,这样使得内存查询更快。HPCC由于拥有自己的分布式文件系统而也成为Hadoop一个有力地备选工具。
Sector/Sphere 以C++开发,这个系统承诺了比Hadoop快2~4倍的性能。它由两部分组成:Sector,安全且可扩展的分布式文件系统,以及Sphere,在存储 节点上可以通过简单的API接口处理Sector数据文件的并行数据处理引擎。它具有不错的容错性,支持广域网同时兼容旧系统(需要做一些修改)。从 2006年诞生起,它就是一个不错的Hadoop替代方案。
还有一些并行于这些系统的项目,可以免费便利地开展Hadoop环境下的工作。所以,如果你想学Hadoop,并且把基础的部分都掌握以后可以看看这些工具。这些项目中最著名的有以下几个。
Drill 是一个Hadoop插件,专注于提供一个存储在Hadoop集群环境下的数据集的交互分析接口。它常常利用MapReduce来执行Hadoop下的大数 据的批量分析,并通过Dremel以更快的速度来处理更大规模的数据集。凭借它可以扩展到大规模服务器上的能力(它的设计目标是10000个服务器),使 它成为处理真正的大数据的好选择。如果你计划使用Hadoop,那么它是一个值得你去研究的工具。
D3.js是数据驱动文档(Data Driven Documents)的缩写,D3.js是一个开源JavaScript函数库,可以让你编辑大数据的展示文档。这个工具可以让你利用网页技术(例如 HTML5、SVG以及CSS)来创建动态图形。另外,它还提供可视化方法,例如和弦图、气泡图、树状图以及节点连接树。由于它是开源的,因此这个列表还 在持续地扩展着。D3.js设计的目标是运行快速和兼容于跨硬件平台的程序。尽管它不一定会替代完全成熟的数据可视化程序(见4节),但这是一个你值得留 意的好工具。D3.js是由纽约时报的图形编辑Michael Bostock开发的。
Kafka是最早由LinkedIn所开发的消息系 统,作为社交媒体活动流和数据处理管道的基础。从那以后,它的用户群便逐渐扩大,涵盖了各种使用数据管道和消息服务的公司。它非常高效,同时与 Hadoop生态系统集成良好,此外,它是运行在Java环境中的,是可以跨平台的。
Julia事实上,它不只是一个数据分析工具,而是被 设计为运行在诸如Hadoop这样的分布式计算环境中。它很稳健,易于使用,类似于Matlab和R(见3节),同时又非常快速。它是与Hadoop套件 相衬的扩展工具,如果你倾向于编写程序,那么这是一个可以加入你技能树中的好语言。
Impala是一个分布式查询执行引擎,是为原生存储在 Apache HDFS 和Apache HBase的数据而设计的。由Cloudera开发,它聚焦于数据库而且不会使用到MapReduce。因为它避免了MapReduce作业的额外开销, 所以可以实时地返回结果。
2、面向对象编程语言
数据科学家需要能够熟练处理面向对象编程(OOP),但比较各种面向对象编程 语言已超出了本书所要讨论的范围,所以如果非要举个例子的话,Java是这一节中主要会讨论的语言,因为它被业界熟知。像大多数面向对象一样,Java不 包含用户图形界面(GUI),这就是那么多人更爱用Python(它的开发者确实为它编写了一个体面的GUI)的原因。然而,Java运行快而优雅,同时 不管是线上还是线下都有大量的学习资源。
注意,部分字句的颜色和高亮显示是由编辑器自动实现的(尽管不总是这样,例如当使用记事本工具打开程序时)。同样,间距也是可选的,用来帮助用户编写语句。注意大多数程序会比这段简单的例子要长一些,也更复杂一些,但它们也可以像例子中一样,被拆散成简单的语句块。
如 果你花了大量的时间在编写脚本上面(通常如果你使用文本编辑器,例如Notepad++或者Textpad),编程会让你劳累不堪。为了减轻这种影响,在 过去的许多年里,众多集成开发环境(Integrated development environments,IDE)被开发出来。这些IDE为编程语言提供了额外环境,将它的引擎、编译器以及其他组件和舒适的图形界面以更加友好的方式 呈现。一个在Java世界里非常著名的IDE就是Eclipse,同时也可以作为其他语言的运行环境,甚至是像R一样的数据分析包(Data analysis packages)。
其他可供你参考的的面向对象语言包括:
C++是与Java齐名的编程语言,快速而流行
Ruby是强大的面向对象编程的备选语言
JavaScript是可与Java配合使用的基于网页的编程语言
Python是优秀的面向对象语言,特别适合初学编程的人
C#是由微软开发的业界知名的编程语言
所有这些都是免费而且可以通过免费教程学习的(C#的IDE是Visual Studio,它是商业软件[1])。另外,它们都有一些共同点,如果你对面向对象编程(OOP)的概念很熟悉的话,例如封装、继承以及多态,你就能够处 理它们中的任何一个。注意,所有这些编程语言都是命令型语言(相对于最近逐渐出名的声明/函数型编程语言而言)。这个类型编程语言的语句基本上都是在命令 计算机采取什么样的行动。而声明/函数型语言,相对来说更多的关注最后的结果而对下一步采取什么动作的具体细节并不关心。
尽管在写作本书 时,面向对象编程语言在专业编程领域是一个基本配置,但目前还是有一些向函数型语言变化的趋势(例如Haskell、Clojure、ML、Scala、 Erlang、OCaml、Clean等)。这些语言基于另一种哲学,关注函数式表达式的求值而不是变量的使用或者实现它们命令的具体执行。
函 数型语言的一个大加分项就在于它便捷的可扩展性(这对于处理大数据极有帮助)以及避免出错,因为它们不使用全局工作空间。不过,它们相比于面向对象编程语 言,在大多数数据科学应用下要慢一些。尽管它们中有几个语言(例如OCaml和Clean)在做数值运算时,可以和C语言[2]一样快。如果未来峰回路转 之后,函数型语言的情况逐渐好转,为了稳妥起见,那么你可能会希望把函数型语言添加到你的技能树中去。注意函数型语言和我们之前提到的一些传统的面向对象 编程语言会有交叉的部分。例如,Scala就是一个函数型面向对象编程语言,这个语言值得大家好好研究。
3、数据分析软件
如 果数据科学家耗费时间所参与的编程工作到最后得不到任何认同,或干脆就毫无意义,那数据科学家还有什么可当的?于是,数据分析软件就在此时登场了。在众多 选择中,最有名的当属Matlab和R。它们都很棒,但是没有必要去计较谁比谁更好,因为用那一种工具更多是基于个人偏好。有趣的是,这两者之间的语法和 功能函数非常相近,以至于如果你精通了其中任意一种,那么学习另一种的时间也就是2~3个星期。
由于R在某种程度上来说更受欢迎,主要由于 它免费开源,庞大的用户群体定期地向其贡献新内容,因此,我们在本书中会更关注R。所以希望那些倾向于Matlab,并了解Matlab在哪些地方优于R 和其他数据分析工具的人,理解我们的选择并保持开放的心态。R同样有优于其他数据分析工具的地方,并且它在编写和运行程序上都很直观,通常不使用循环结构 (一种程序结构,一般来说会拖慢高级程序语言的分析时间),而是利用运用向量的一些操作,而且它还可以延展到矩阵,这种特性被称为向量化,向量化使得数据 分析脚本易于阅读和理解(面向对象编程语言通常运行速度很快,因此循环对于它们并不是问题)。
R语言的运行环境十分简单(在某种方面上与Python类似),对用户使用来说也足够友好,特别是一些小程序。
R作为一款数据分析工具来说是十分强大的,而它的GUI(图形用户界面)也做得很好。然而,如果你真的想用这款软件,还是需要花点时间学习并调试一下IDE。市面上有很多款R语言的IDE(大多数是免费的),但其中有一个佼佼者,叫做RStudio
R语言之外的其他数据分析工具还有。
Matlab/Octave 在R成名业界之前就已存在,并且Matlab就已经称王于数据分析领域。尽管Matlab是有商业所有权的软件(需要付费使用),他还是有几个开源的小伙 伴们,其中最好的当属Octave。Matlab和Octave对于初学者而言都是很好的工具,它们有大量的应用,并且像R那样实现了向量化。但 是,Matlab的工具箱(函数库)稍有些昂贵,而Octave则没有这些。
SPSS是现有最好的统计程序之一,而且广泛适用于研究领域。学习起来很简单,它可以做任何数据分析,尽管不像R语言那样高效。此外,和Matlab一样,它也是有商业所有权的,为学界与业界所推崇。
SAS是一个流行的统计程序,特别是在企业当中。学习起来相对简单,它也有一个不错的脚本语言工具,可以帮助创建更为复杂的数据分析。但是,它也是有商业所有权的。
Stata是选择统计程序包时的好选择。Stata 是最受统计学家所喜欢的工具之一,也是具有商业所有权的。自从R语言在数据分析世界变得广受欢迎以来,Stata就不再像以前那么受宠了。
注 意,上面所提及的软件(除Octava以外),都是具有商业所有权的,所以他们并不像R那样能吸引巨量的用户群。如果你对统计和编程都很熟悉,那么对你来 说,它们就会很容易学习。在Matlab的帮助下,你不需要为了使用而去熟悉很多统计学知识。我们会在10.5节再探讨R语言,那时,我们会讨论如何在机 器学习架构中使用它。
4、可视化工具
数据分析结果可视化的重要性显而易见,这也就是增加一些可视化软件可以充实你的软件兵器库的原因。尽管所有的数据分析程序都能提供一些像样的可视化工具,但增加一些专用的工具总是好的。例如Tableau,它可以使整个处理过程都更加直观以及高效。
很 遗憾地说,因为Tableau是一个具有商业所有权的软件,所以它有些贵。然而,他可以实现快速的数据可视化,混合以及图像导出。它的使用界面十分友好, 易于学习,在网上有大量的资源,空间使用相当小(小于100MB)。另外,它的开发者们也乐于通过教程与实践来指导用户学习。它在Windows(XP之 后的任何版本)上运行,同时还有两周的试用期。有趣的是,它是华盛顿大学“数据科学导论”的教学大纲的一部分。
图7Tableau的界面
图7所示为Tableau,它是一款出色的可视化程序。正如你所见,它十分直观而且提供了各种各样的特性。
在业界,Tableau较其他可视化程序取得了领跑者的地位。尽管它更适合于商业智能应用,但它还可以被用在任何数据可视化任务中,同时它实现了通过邮件和在线的图像简易共享。它也提供了交互式的映射以及能够同时处理不同来源的数据。
如果你对这款软件的同类产品感兴趣,你可以看看以下几款程序。
Spotfire是由TIBCO开发的优秀产品,可视化分析的理想工具。它可以与地理信息系统,建模及分析软件良好集成,同时具有无限的可扩展性,其价格与Tableau保持同一水平。
Qlikview 是一款良好的备选工具,对数据可视化和深入钻取任务是理想的工具。它速度很快并且提供了出色的交互可视化及仪表盘支持。它有很棒的用户界面和视觉控制,而 且还有在内存中处理大数据集的出色能力。然而,它受到内存大小的限制(具有扩展性问题),而且价格相对较高。
Prism是一款直观的商业智能(BI)软件,可以轻松地实施任务和学习。它主要专注于商业数据,除去一般类型的图表以外,它可以生成数据仪表盘、积分板、查询报告等。
InZite是一款有趣的替代方案,提供了吸引人的可视化及仪表盘特性,快速而且直观。
Birst是一个好选择,提供了大量交互性可视化以及分析工具。它可以生成透视表,还可以用精细直观的报表工具深入钻取数据。
SAP Business Objects提供了指向并点击数据可视化功能,以便能够生成交互并可分享的可视化图像和交互仪表盘,它直接集成了SAP的其他产品。
一般来说,数据可视化程序使用起来相对轻松,所以在你的“数据兵器库”中加入它们并不是个问题。在倾注大量时间掌握其中任何一个工具之前,确保它能与你使用的其他工具集成良好。此外,看看大部分你所感兴趣的软件广告中都包含了哪些其他的可视化软件。
5、集成大数据系统
尽 管并不是必须的,但能够熟悉至少一个集成大数据系统是很好的。IBM的BigInsights平台就是其中一个很不错的例子,尽管事实上它还处于初期版 本。它的设计思路是将Hadoop的大部分功能封装到一个对用户友好,并且有像样的图形界面的软件包中去。它的加分项是它还能执行数据的可视化和调度,类 似这种“多合一”的套件包相当贴心,这样你就可以专注于数据科学工作的其他部分了。BigInsights运行在一个集群/服务器中,可以通过网页浏览器 来访问。
集成大数据系统的一个巨大优势在于它图形化的用户界面,与优秀的文档结合在一起之后,使整个系统变得十分友好、直观,而且可以轻松 地学会操作。此外,图形界面会很好地结合Hadoop相关操作命令,它可以让你专注于数据科学中更高级别的方面,将你从原本不得不做的大量底层编程中解放 出来。
与BigInsights类似的另一个选择是Cloudera,它同样驰名于业界,同时更加稳健。其他值得你了解的软件还包括 Knime、Alpine数据实验室套件、Pivotal套件,等等。在你读到这里的时候,很可能已经发布了其他一些集成大数据系统,所以请确保你了解它 们是什么,以及它们都提供了哪些功能。
6、其他一些程序
如果不加上一些辅助工具的话,上面这个程序列表就显得不完整。因为发 布的公司不同,这些程序可能也会各不相同,但当你需要优化你的“软件兵工厂”的时候,它们是一个好的起步。举个例子,Git版本控制程序绝对值得吸引你的 目光,因为你很可能会需要用到它,特别是当你与其他人(通常是程序员)一起参与一个大型项目的时候。
Git版本控制程序不算是最直观的可用程序,但具有丰富的功能和高效的工作能力。
注 意,Git有很多在主流操作系统下的图形界面的插件。有一个在Windows操作系统下非常好的开源图形界面插件叫Git扩展(Git Extensions),除此以外也还有许多在其他操作系统下运行得很好的Git图形界面。这个特别的图形界面插件让Git变得更加直观而且保留了它的命 令提示行(但并不是每个Git图形界面都提供这个功能)。
如果在这里忽略了Oracle SQL开发软件,就简直是有悖神明,因为它经常用于访问公司Oracle数据库中的结构化数据。尽管这个特别的软件由于大数据技术的迅速扩张,在接下来的几年内可能会不胜从前,但在做数据科学任务时,它仍然十分重要。
这个软件最关键的部分就是SQL,所以为了使用它的全部潜力,你需要让自己熟悉这种查询语言。正如我们在前几章中看到的那样,这对数据科学家来说是一个非常有用的语言,即使你用得机会并不太多。这是因为它会以其他形式被使用到大数据的数据库程序中。
当你从事数据科学工作时,一些其他需要熟悉的程序如下。
MS Excel是微软Office套件中知名的电子表单应用。与其他的数据分析程序相比,Excel以其简单到不可思议的特性,一直沿用到今天,并且在检视 csv(逗号分隔值,一组以逗号作为分隔符的数据值)文件形式的原始数据时迟早会派上用处(例如,创建分析结果报告的总结)。就像Office套件中的其 他应用一样,它是具有商业所有权的,尽管还有很多具有类似功能的免费替代方案(例如,Open Office 的Calc应用)。
MS Outlook是微软Office套件中另一个同样知名的程序,它被设计用来处理电子邮件、日历、待做事宜以及联系人信息。当然也有很多免费的备选程序, 但经常被用于工作场合。如果你每天都要处理内部和外部通信、预约等,它会显得非常有用。它也是具有商业所有权的软件。
Eclipse如早先提及的那样,这是面向对象语言以及其他编程语言(甚至是R)中最具人气的IDE。它非常稳健直观,使得编程的过程更加友好和高效。它是开源而且跨平台的。
Emcien能够处理复杂数据集,特别是半结构化数据和非数值类型时所使用的优秀的图像分析程序。如果你对更高级的数据分析,特别是基于图的分析感兴趣的话,这是一个不容错过的程序。它并不是一款其他数据分析程序的替代者,不过,它是具有商业所有权的。
Filezilla(或者其他的FTP客户端程序)能够传输大型文件或者在跨Internet进行文件传输时提供某一级别的安全性保障,此时这个程序就显得非常有用。它是一个开源软件。
7、要点
数据科学家在日常工作中会利用各类工具,本章介绍了其中最具有代表性的,包括:Hadoop/Spark、面向对象编程语言(例如Java)、数据分析平台(例如R)、可视化软件以及一些辅助工具(例如GIT和Oracle)。此外还有一些公司和行业所需求的特定程序。
Hadoop 是大数据软件界的凯迪拉克,它的套件由几类组件组成,包括文件系统(HDFS)、将数据分布到计算机集群的方法(MapReduce)、机器学习程序 (Mahout)、编程语言(Pig)、数据库程序(Hive、HBase等)、调度器(Oozie)、元数据和数据表管理框架(HCatalog)以及 调试管理器和协同程序(Zookeeper)等。
Hadoop套件有很替代方案,例如Storm、Spark、BashReduce、Disco project,等等。
有几款可以并行帮助Hadoop开展工作的程序:Drill、Julia、D3.js、以及Impala等。
作为数据科学家,你应该能处理至少一个面向对象语言,例如Java、C++、Ruby、Python、C#等。面向对象语言目前是分布最广的编程语言范式,尽管最近有一股面向函数型语言的风潮涌动。
函数型编程语言(例如Clojure、OCaml、Clean、ML、Scala和Haskell)都是很优秀的资产,特别是如果你擅长编程而且想要扩展你的编程技能。
你必须对至少一种现下流行的分析工具极为熟悉,R、Matlab/Octave、SPS、SAS、Stata。其中只有R与Octave是开源的,而前者(R)是时下最为流行的选择。
Tableau则是数据可视化软件中的最好的选项,尽管还有类似于Spotfire、Qlikview、Brist、inZite、Prism和SAP Business Objects的工具。
集成大数据系统(例如IBM的BigInsights平台)同样值得去研究,因为它们使整体的数据科学流程更高效,同时将你从MapReduce所需的低层编程中解放出来。
其 他一些程序值得你花时间去了解,GIT(或者其他的版本控制工具)、Oracle、MS Excel、MS Outloo、Eclipse、Emcien以及Filezilla(或者其他的FTP客户端程序)。很自然地,你会的程序越多(即使没有在本章中列 举),也就越牛,只要你对它们掌握得足够好,它们也会在商业应用中展现出更大的价值。
from http://geek.csdn.net/news/detail/80962
Hadoop在过去的几年里,几乎成为大数据的代名词。这是数据科学家的兵器库中的主要支撑。知道 Hadoop不只是一个程序是非常重要的,它更像一组工具(类似于微软的Office)。这个套件被用于传输,保存和处理大数据。它还包含有一个调度器 (Oozie)、元数据和表格管理架构(HCatalog)。所有在Hadoop中处理数据的任务都是分布在安装了Hadoop的所有机器集群中的,这些 任务可以是面向对象程序(OOP)代码、数据分析程序、数据图形化脚本以及其他具有有限处理时间(finite process time)特征和对数据分析有用的任务。Hadoop会确保不管你对数据做什么样的操作都能以高效的方式完成,并以直观的方式呈现。
Hadoop套件由以下几个组件组成,所有的组件都很重要。
MapReduce 由Google创建,并且是Hadoop的主要组件。正如在之前的部分我们曾提到过的那样,这是任何大数据技术的核心。尽管这是Hadoop固有的特性, 但它也可以在其他的大数据程序,例如MPP和NoSQL数据库(例如,MongoDB)。MapReduce最初是具有商业所有权的,但随着Yahoo在 2006年提供了慷慨的资金支持,它以Hadoop的开源形式出现,并在两年内迅速受到广泛欢迎。作为一个著名的并行计算算法,它得以让数据库的查询建立 在一个计算机集群上,任务可以分拆成小份,并跨越整个集群的节点。
HDFS是Hadoop 分布式文件系统的简称,这是Hadoop系统所使用的文件系统。被Hadoop所处理的数据必须先导入到HDFS中,并备份在运行了Hadoop的计算机网络中。它的数据极限大约在30PB。
Pig是针对Hadoop进行计算的一个高级编程语言(High-level programming language)。你可以将它视为Hadoop生态系统中各种操作的控制元件。它的性能是可扩展的。
Hive是一个数据仓库程序,是以“类-SQL”语言进行访问使用的,他是为横跨Hadoop集群的数据设计的。并且它的性能是可扩展的。
HBase、 Sqoop以及Flume是Hadoop的数据库组件。HBase是一个可以运行在Hadoop环境上的列式数据库。它是基于Google的 BigTable设计的,并且数据极限约为1PB。另外,它比直接在HDFS上访问数据要慢一些。这对于处理存在HBase里面的数据来说不是很好,对 HBase对于归档和时间系列数据的计数很合适。Sqoop是一个将关系型数据库中的数据导入到HDFS中的程序。Flume与此类似,它关注于收集和导 入各种数据源的日志和任务数据。
Mahout是一个机器学习和数据挖掘算法的函数库,用于对存储在HDFS的数据进行处理。
Zookeeper服务于Hadoop有一“群”各种各样功能的组件,所以调试管理以及协调程序是十分必要的。Zookeeper保证了整个套件的整合以及相对得简便操作。
Hadoop套件还有一些其他的组件用来补充以上这些核心组件。而熟悉它们最好的方法是去下载一个Hadoop玩一下。当需要确定基准(Benchmark)的时候,你可以选择去读一下教程(或者,如果你能读一下用户手册则更好)。
Hadoop 并不是进入大数据技术的唯一选择。另有一个也很有意思但并不那么有名的备选方案是Storm(被Twitter、阿里巴巴、Groupon以及其他许多公 司所使用)。Storm显著快于Hadoop,同样也是开源,而且使用起来相对简单,是一个值得选用的Hadoop备选方案。不像Hadoop, Storm 不执行MapReduce任务,而是运行topology(拓扑)。核心的差异在于MapReduce最终会将任务结束,而topology会永远运行或 直到它被用户终止。(你可以将它类比为操作系统后台一直运行的进程)。topology可以被画成计算图,用以处理数据流。这些数据流的源被称为 spout(形象化为“水龙头”),而它们会被接入bolt(形象化为“闪电”)。一个bolt可以使用任意数量的输入源,做一些处理,并输出新的数据 流。
对数据使用Topology方法可以确保即使在出现故障的情况下也能处理出正确的结果(因为topology会持续地运行),也就是说 如果计算机集群中的某一台计算机发生了问题也不会危害到在运行在整个集群上任务的一致性。需要注意的是,Storm topology 一般是由Java、Ruby、Python和Fancy语言编写而成。Storm软件则是由Java和Clojure(一个与Java配合良好的函数型语 言)编写,同时它的源代码也是这个类型技术中最为流行的项目。
这个软件的优势在于它处理数据的实时性、简单的API、可扩展性、容错性、简单部署、免费且开源并能够确保数据处理,以及可以在其上使用各种编程语言。它有横跨美国东西海岸、伦敦以及其他地区,并持续壮大的用户社区。
除了Storm这个非常流行并且提供了灵活和简单地操作还很有前景的Hadoop的替代品之外,还有一些其他软件同样宣称自己具有类似特性并尝试挑战Hadoop在大数据世界的支配权。最值得推荐的几个软件(在编写本书的时候)有如下几个。
Spark 由加利福尼亚大学伯克利分校的AMP Lab开发而成。Spark是MapReduce领域的最新玩家,它的目标是数据分析在写入和运行端的速度更加快速。不像许多在这个领域的系 统,Spark使用内存查询数据,替代了磁盘的读写。这样,Spark在许多迭代算法上比Hadoop的表现更为优越。它是由Scala实现的(参见一下 部分),在写作本书的时候,它的主要用户是UC Berkeley的研究者和Conviva公司。
BashReduce作为一个脚本工 具,BashReduce可以用标准UNIX命令(如sort、awk、grep、join等执行MapReduce,成为了Hadoop的另一个备选工 具。它支持映射/分割、规约以及合并等功能命令。尽管它根本没有一个分布式文件系统,BashReduce还是将文件分布到了工作节点中,但不可避免地缺 少容错。它没有Hadoop那么复杂,同时可以进行快速开发。除了容错的问题之外,它还缺乏灵活性,因为BashReduce只能工作在特定的UNIX命 令环境中。BashReduce是由Erik Frey(在线电台last.fm)以及他的助手们开发。
Disco Project最初是由诺基亚(Nokia)研究院开发,Disco已经默默无闻了很多年。MapReduce作业由简单的Python编写,而 Disco的后端是以Erlang编写的,一个可扩展的函数型语言,内置支持并发、容错以及分布,使得它成为一个理想的MapReduce系统。与 Hadoop类似,Disco分布并复制存放数据,但它没有自己的文件系统。由于它的高效,在作业调度方面也是值得称道的。
GraphLab 由卡内基梅隆大学开发,为机器学习应用服务而设计,GraphLab旨在提高并行机器学习算法设计的执行效率和正确性。GraphLab拥有它自己版本的 映射(map)阶段,称为更新阶段。不像MapReduce,更新阶段可以读取和修改数据的交集。它基于图的方法使得在图形的机器学习上更具可控性,同时 提升了动态迭代算法。
HPCC 系统以它自己的大规模数据分析架构,HPCC试图用Enterprise Control Language语言(ECL)更近编写并行工作流,ECL语言是一个声名式语言,以数据为中心的语言(有些类似于SQL、Datalog和Pig)。 HPCC是用C++写成的,根据一些人的说法,这样使得内存查询更快。HPCC由于拥有自己的分布式文件系统而也成为Hadoop一个有力地备选工具。
Sector/Sphere 以C++开发,这个系统承诺了比Hadoop快2~4倍的性能。它由两部分组成:Sector,安全且可扩展的分布式文件系统,以及Sphere,在存储 节点上可以通过简单的API接口处理Sector数据文件的并行数据处理引擎。它具有不错的容错性,支持广域网同时兼容旧系统(需要做一些修改)。从 2006年诞生起,它就是一个不错的Hadoop替代方案。
还有一些并行于这些系统的项目,可以免费便利地开展Hadoop环境下的工作。所以,如果你想学Hadoop,并且把基础的部分都掌握以后可以看看这些工具。这些项目中最著名的有以下几个。
Drill 是一个Hadoop插件,专注于提供一个存储在Hadoop集群环境下的数据集的交互分析接口。它常常利用MapReduce来执行Hadoop下的大数 据的批量分析,并通过Dremel以更快的速度来处理更大规模的数据集。凭借它可以扩展到大规模服务器上的能力(它的设计目标是10000个服务器),使 它成为处理真正的大数据的好选择。如果你计划使用Hadoop,那么它是一个值得你去研究的工具。
D3.js是数据驱动文档(Data Driven Documents)的缩写,D3.js是一个开源JavaScript函数库,可以让你编辑大数据的展示文档。这个工具可以让你利用网页技术(例如 HTML5、SVG以及CSS)来创建动态图形。另外,它还提供可视化方法,例如和弦图、气泡图、树状图以及节点连接树。由于它是开源的,因此这个列表还 在持续地扩展着。D3.js设计的目标是运行快速和兼容于跨硬件平台的程序。尽管它不一定会替代完全成熟的数据可视化程序(见4节),但这是一个你值得留 意的好工具。D3.js是由纽约时报的图形编辑Michael Bostock开发的。
Kafka是最早由LinkedIn所开发的消息系 统,作为社交媒体活动流和数据处理管道的基础。从那以后,它的用户群便逐渐扩大,涵盖了各种使用数据管道和消息服务的公司。它非常高效,同时与 Hadoop生态系统集成良好,此外,它是运行在Java环境中的,是可以跨平台的。
Julia事实上,它不只是一个数据分析工具,而是被 设计为运行在诸如Hadoop这样的分布式计算环境中。它很稳健,易于使用,类似于Matlab和R(见3节),同时又非常快速。它是与Hadoop套件 相衬的扩展工具,如果你倾向于编写程序,那么这是一个可以加入你技能树中的好语言。
Impala是一个分布式查询执行引擎,是为原生存储在 Apache HDFS 和Apache HBase的数据而设计的。由Cloudera开发,它聚焦于数据库而且不会使用到MapReduce。因为它避免了MapReduce作业的额外开销, 所以可以实时地返回结果。
2、面向对象编程语言
数据科学家需要能够熟练处理面向对象编程(OOP),但比较各种面向对象编程 语言已超出了本书所要讨论的范围,所以如果非要举个例子的话,Java是这一节中主要会讨论的语言,因为它被业界熟知。像大多数面向对象一样,Java不 包含用户图形界面(GUI),这就是那么多人更爱用Python(它的开发者确实为它编写了一个体面的GUI)的原因。然而,Java运行快而优雅,同时 不管是线上还是线下都有大量的学习资源。
注意,部分字句的颜色和高亮显示是由编辑器自动实现的(尽管不总是这样,例如当使用记事本工具打开程序时)。同样,间距也是可选的,用来帮助用户编写语句。注意大多数程序会比这段简单的例子要长一些,也更复杂一些,但它们也可以像例子中一样,被拆散成简单的语句块。
如 果你花了大量的时间在编写脚本上面(通常如果你使用文本编辑器,例如Notepad++或者Textpad),编程会让你劳累不堪。为了减轻这种影响,在 过去的许多年里,众多集成开发环境(Integrated development environments,IDE)被开发出来。这些IDE为编程语言提供了额外环境,将它的引擎、编译器以及其他组件和舒适的图形界面以更加友好的方式 呈现。一个在Java世界里非常著名的IDE就是Eclipse,同时也可以作为其他语言的运行环境,甚至是像R一样的数据分析包(Data analysis packages)。
其他可供你参考的的面向对象语言包括:
C++是与Java齐名的编程语言,快速而流行
Ruby是强大的面向对象编程的备选语言
JavaScript是可与Java配合使用的基于网页的编程语言
Python是优秀的面向对象语言,特别适合初学编程的人
C#是由微软开发的业界知名的编程语言
所有这些都是免费而且可以通过免费教程学习的(C#的IDE是Visual Studio,它是商业软件[1])。另外,它们都有一些共同点,如果你对面向对象编程(OOP)的概念很熟悉的话,例如封装、继承以及多态,你就能够处 理它们中的任何一个。注意,所有这些编程语言都是命令型语言(相对于最近逐渐出名的声明/函数型编程语言而言)。这个类型编程语言的语句基本上都是在命令 计算机采取什么样的行动。而声明/函数型语言,相对来说更多的关注最后的结果而对下一步采取什么动作的具体细节并不关心。
尽管在写作本书 时,面向对象编程语言在专业编程领域是一个基本配置,但目前还是有一些向函数型语言变化的趋势(例如Haskell、Clojure、ML、Scala、 Erlang、OCaml、Clean等)。这些语言基于另一种哲学,关注函数式表达式的求值而不是变量的使用或者实现它们命令的具体执行。
函 数型语言的一个大加分项就在于它便捷的可扩展性(这对于处理大数据极有帮助)以及避免出错,因为它们不使用全局工作空间。不过,它们相比于面向对象编程语 言,在大多数数据科学应用下要慢一些。尽管它们中有几个语言(例如OCaml和Clean)在做数值运算时,可以和C语言[2]一样快。如果未来峰回路转 之后,函数型语言的情况逐渐好转,为了稳妥起见,那么你可能会希望把函数型语言添加到你的技能树中去。注意函数型语言和我们之前提到的一些传统的面向对象 编程语言会有交叉的部分。例如,Scala就是一个函数型面向对象编程语言,这个语言值得大家好好研究。
3、数据分析软件
如 果数据科学家耗费时间所参与的编程工作到最后得不到任何认同,或干脆就毫无意义,那数据科学家还有什么可当的?于是,数据分析软件就在此时登场了。在众多 选择中,最有名的当属Matlab和R。它们都很棒,但是没有必要去计较谁比谁更好,因为用那一种工具更多是基于个人偏好。有趣的是,这两者之间的语法和 功能函数非常相近,以至于如果你精通了其中任意一种,那么学习另一种的时间也就是2~3个星期。
由于R在某种程度上来说更受欢迎,主要由于 它免费开源,庞大的用户群体定期地向其贡献新内容,因此,我们在本书中会更关注R。所以希望那些倾向于Matlab,并了解Matlab在哪些地方优于R 和其他数据分析工具的人,理解我们的选择并保持开放的心态。R同样有优于其他数据分析工具的地方,并且它在编写和运行程序上都很直观,通常不使用循环结构 (一种程序结构,一般来说会拖慢高级程序语言的分析时间),而是利用运用向量的一些操作,而且它还可以延展到矩阵,这种特性被称为向量化,向量化使得数据 分析脚本易于阅读和理解(面向对象编程语言通常运行速度很快,因此循环对于它们并不是问题)。
R语言的运行环境十分简单(在某种方面上与Python类似),对用户使用来说也足够友好,特别是一些小程序。
R作为一款数据分析工具来说是十分强大的,而它的GUI(图形用户界面)也做得很好。然而,如果你真的想用这款软件,还是需要花点时间学习并调试一下IDE。市面上有很多款R语言的IDE(大多数是免费的),但其中有一个佼佼者,叫做RStudio
R语言之外的其他数据分析工具还有。
Matlab/Octave 在R成名业界之前就已存在,并且Matlab就已经称王于数据分析领域。尽管Matlab是有商业所有权的软件(需要付费使用),他还是有几个开源的小伙 伴们,其中最好的当属Octave。Matlab和Octave对于初学者而言都是很好的工具,它们有大量的应用,并且像R那样实现了向量化。但 是,Matlab的工具箱(函数库)稍有些昂贵,而Octave则没有这些。
SPSS是现有最好的统计程序之一,而且广泛适用于研究领域。学习起来很简单,它可以做任何数据分析,尽管不像R语言那样高效。此外,和Matlab一样,它也是有商业所有权的,为学界与业界所推崇。
SAS是一个流行的统计程序,特别是在企业当中。学习起来相对简单,它也有一个不错的脚本语言工具,可以帮助创建更为复杂的数据分析。但是,它也是有商业所有权的。
Stata是选择统计程序包时的好选择。Stata 是最受统计学家所喜欢的工具之一,也是具有商业所有权的。自从R语言在数据分析世界变得广受欢迎以来,Stata就不再像以前那么受宠了。
注 意,上面所提及的软件(除Octava以外),都是具有商业所有权的,所以他们并不像R那样能吸引巨量的用户群。如果你对统计和编程都很熟悉,那么对你来 说,它们就会很容易学习。在Matlab的帮助下,你不需要为了使用而去熟悉很多统计学知识。我们会在10.5节再探讨R语言,那时,我们会讨论如何在机 器学习架构中使用它。
4、可视化工具
数据分析结果可视化的重要性显而易见,这也就是增加一些可视化软件可以充实你的软件兵器库的原因。尽管所有的数据分析程序都能提供一些像样的可视化工具,但增加一些专用的工具总是好的。例如Tableau,它可以使整个处理过程都更加直观以及高效。
很 遗憾地说,因为Tableau是一个具有商业所有权的软件,所以它有些贵。然而,他可以实现快速的数据可视化,混合以及图像导出。它的使用界面十分友好, 易于学习,在网上有大量的资源,空间使用相当小(小于100MB)。另外,它的开发者们也乐于通过教程与实践来指导用户学习。它在Windows(XP之 后的任何版本)上运行,同时还有两周的试用期。有趣的是,它是华盛顿大学“数据科学导论”的教学大纲的一部分。
图7Tableau的界面
图7所示为Tableau,它是一款出色的可视化程序。正如你所见,它十分直观而且提供了各种各样的特性。
在业界,Tableau较其他可视化程序取得了领跑者的地位。尽管它更适合于商业智能应用,但它还可以被用在任何数据可视化任务中,同时它实现了通过邮件和在线的图像简易共享。它也提供了交互式的映射以及能够同时处理不同来源的数据。
如果你对这款软件的同类产品感兴趣,你可以看看以下几款程序。
Spotfire是由TIBCO开发的优秀产品,可视化分析的理想工具。它可以与地理信息系统,建模及分析软件良好集成,同时具有无限的可扩展性,其价格与Tableau保持同一水平。
Qlikview 是一款良好的备选工具,对数据可视化和深入钻取任务是理想的工具。它速度很快并且提供了出色的交互可视化及仪表盘支持。它有很棒的用户界面和视觉控制,而 且还有在内存中处理大数据集的出色能力。然而,它受到内存大小的限制(具有扩展性问题),而且价格相对较高。
Prism是一款直观的商业智能(BI)软件,可以轻松地实施任务和学习。它主要专注于商业数据,除去一般类型的图表以外,它可以生成数据仪表盘、积分板、查询报告等。
InZite是一款有趣的替代方案,提供了吸引人的可视化及仪表盘特性,快速而且直观。
Birst是一个好选择,提供了大量交互性可视化以及分析工具。它可以生成透视表,还可以用精细直观的报表工具深入钻取数据。
SAP Business Objects提供了指向并点击数据可视化功能,以便能够生成交互并可分享的可视化图像和交互仪表盘,它直接集成了SAP的其他产品。
一般来说,数据可视化程序使用起来相对轻松,所以在你的“数据兵器库”中加入它们并不是个问题。在倾注大量时间掌握其中任何一个工具之前,确保它能与你使用的其他工具集成良好。此外,看看大部分你所感兴趣的软件广告中都包含了哪些其他的可视化软件。
5、集成大数据系统
尽 管并不是必须的,但能够熟悉至少一个集成大数据系统是很好的。IBM的BigInsights平台就是其中一个很不错的例子,尽管事实上它还处于初期版 本。它的设计思路是将Hadoop的大部分功能封装到一个对用户友好,并且有像样的图形界面的软件包中去。它的加分项是它还能执行数据的可视化和调度,类 似这种“多合一”的套件包相当贴心,这样你就可以专注于数据科学工作的其他部分了。BigInsights运行在一个集群/服务器中,可以通过网页浏览器 来访问。
集成大数据系统的一个巨大优势在于它图形化的用户界面,与优秀的文档结合在一起之后,使整个系统变得十分友好、直观,而且可以轻松 地学会操作。此外,图形界面会很好地结合Hadoop相关操作命令,它可以让你专注于数据科学中更高级别的方面,将你从原本不得不做的大量底层编程中解放 出来。
与BigInsights类似的另一个选择是Cloudera,它同样驰名于业界,同时更加稳健。其他值得你了解的软件还包括 Knime、Alpine数据实验室套件、Pivotal套件,等等。在你读到这里的时候,很可能已经发布了其他一些集成大数据系统,所以请确保你了解它 们是什么,以及它们都提供了哪些功能。
6、其他一些程序
如果不加上一些辅助工具的话,上面这个程序列表就显得不完整。因为发 布的公司不同,这些程序可能也会各不相同,但当你需要优化你的“软件兵工厂”的时候,它们是一个好的起步。举个例子,Git版本控制程序绝对值得吸引你的 目光,因为你很可能会需要用到它,特别是当你与其他人(通常是程序员)一起参与一个大型项目的时候。
Git版本控制程序不算是最直观的可用程序,但具有丰富的功能和高效的工作能力。
注 意,Git有很多在主流操作系统下的图形界面的插件。有一个在Windows操作系统下非常好的开源图形界面插件叫Git扩展(Git Extensions),除此以外也还有许多在其他操作系统下运行得很好的Git图形界面。这个特别的图形界面插件让Git变得更加直观而且保留了它的命 令提示行(但并不是每个Git图形界面都提供这个功能)。
如果在这里忽略了Oracle SQL开发软件,就简直是有悖神明,因为它经常用于访问公司Oracle数据库中的结构化数据。尽管这个特别的软件由于大数据技术的迅速扩张,在接下来的几年内可能会不胜从前,但在做数据科学任务时,它仍然十分重要。
这个软件最关键的部分就是SQL,所以为了使用它的全部潜力,你需要让自己熟悉这种查询语言。正如我们在前几章中看到的那样,这对数据科学家来说是一个非常有用的语言,即使你用得机会并不太多。这是因为它会以其他形式被使用到大数据的数据库程序中。
当你从事数据科学工作时,一些其他需要熟悉的程序如下。
MS Excel是微软Office套件中知名的电子表单应用。与其他的数据分析程序相比,Excel以其简单到不可思议的特性,一直沿用到今天,并且在检视 csv(逗号分隔值,一组以逗号作为分隔符的数据值)文件形式的原始数据时迟早会派上用处(例如,创建分析结果报告的总结)。就像Office套件中的其 他应用一样,它是具有商业所有权的,尽管还有很多具有类似功能的免费替代方案(例如,Open Office 的Calc应用)。
MS Outlook是微软Office套件中另一个同样知名的程序,它被设计用来处理电子邮件、日历、待做事宜以及联系人信息。当然也有很多免费的备选程序, 但经常被用于工作场合。如果你每天都要处理内部和外部通信、预约等,它会显得非常有用。它也是具有商业所有权的软件。
Eclipse如早先提及的那样,这是面向对象语言以及其他编程语言(甚至是R)中最具人气的IDE。它非常稳健直观,使得编程的过程更加友好和高效。它是开源而且跨平台的。
Emcien能够处理复杂数据集,特别是半结构化数据和非数值类型时所使用的优秀的图像分析程序。如果你对更高级的数据分析,特别是基于图的分析感兴趣的话,这是一个不容错过的程序。它并不是一款其他数据分析程序的替代者,不过,它是具有商业所有权的。
Filezilla(或者其他的FTP客户端程序)能够传输大型文件或者在跨Internet进行文件传输时提供某一级别的安全性保障,此时这个程序就显得非常有用。它是一个开源软件。
7、要点
数据科学家在日常工作中会利用各类工具,本章介绍了其中最具有代表性的,包括:Hadoop/Spark、面向对象编程语言(例如Java)、数据分析平台(例如R)、可视化软件以及一些辅助工具(例如GIT和Oracle)。此外还有一些公司和行业所需求的特定程序。
Hadoop 是大数据软件界的凯迪拉克,它的套件由几类组件组成,包括文件系统(HDFS)、将数据分布到计算机集群的方法(MapReduce)、机器学习程序 (Mahout)、编程语言(Pig)、数据库程序(Hive、HBase等)、调度器(Oozie)、元数据和数据表管理框架(HCatalog)以及 调试管理器和协同程序(Zookeeper)等。
Hadoop套件有很替代方案,例如Storm、Spark、BashReduce、Disco project,等等。
有几款可以并行帮助Hadoop开展工作的程序:Drill、Julia、D3.js、以及Impala等。
作为数据科学家,你应该能处理至少一个面向对象语言,例如Java、C++、Ruby、Python、C#等。面向对象语言目前是分布最广的编程语言范式,尽管最近有一股面向函数型语言的风潮涌动。
函数型编程语言(例如Clojure、OCaml、Clean、ML、Scala和Haskell)都是很优秀的资产,特别是如果你擅长编程而且想要扩展你的编程技能。
你必须对至少一种现下流行的分析工具极为熟悉,R、Matlab/Octave、SPS、SAS、Stata。其中只有R与Octave是开源的,而前者(R)是时下最为流行的选择。
Tableau则是数据可视化软件中的最好的选项,尽管还有类似于Spotfire、Qlikview、Brist、inZite、Prism和SAP Business Objects的工具。
集成大数据系统(例如IBM的BigInsights平台)同样值得去研究,因为它们使整体的数据科学流程更高效,同时将你从MapReduce所需的低层编程中解放出来。
其 他一些程序值得你花时间去了解,GIT(或者其他的版本控制工具)、Oracle、MS Excel、MS Outloo、Eclipse、Emcien以及Filezilla(或者其他的FTP客户端程序)。很自然地,你会的程序越多(即使没有在本章中列 举),也就越牛,只要你对它们掌握得足够好,它们也会在商业应用中展现出更大的价值。
from http://geek.csdn.net/news/detail/80962