前言
最近几年,随着科技的进步和互联网的飞速发展,各个行业都面临着海量数据所带来的挑战,例如金融、零售行业需要统计、分析最近几年甚至更长时间的数据,电信运营商需要分析、挖掘所有客户信息以及使用记录,互联网行业则更加突出,它需要分析上亿网民上网的行为以及互联网上的海量内容,从而为用户提供更加智能的服务。面对着呈几何级数不断增长的数据,数据分析师或统计师们已经无法使用传统的建模分析方法去处理这些数据,然而,Hadoop 以及并行计算的出现正在成为大数据处理的革命性举措。 IBM 作为 IT 界的领军企业,正在不断地在大数据处理上投入更多的精力。本文介绍的 Analytic Server 以及利用 Analytic Server 进行海量数据处理的新版 modeler 正是 IBM 对大数据分析、建模的贡献。
Hadoop 介绍
Hadoop 是一个能够对大量数据进行分布式处理的软件框架,由 Apache 基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序,充分利用集群的优势高速运算和存储。它以一种可靠、高效、可伸缩的方式处理数据。Hadoop 是可靠的,因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。Hadoop 是高效的,因为它以并行的方式工作,通过并行处理加快处理速度。Hadoop 还是可伸缩的,能够处理 PB 级数据。此外,Hadoop 依赖于社区服务器,并且设计用来部署在低廉的(low-cost)硬件上。因此它的成本比较低,任何人都可以使用。 Hadoop 是一个能够让用户轻松架构和使用的分布式计算平台。用户可以轻松地在 Hadoop 上开发和运行处理海量数据的应用程序。它主要有以下几个优点:
- 高可靠性。Hadoop 按位存储和处理数据的能力值得人们信赖。
- 高扩展性。Hadoop 是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。
- 高效性。Hadoop 能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。
- 高容错性。Hadoop 能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。
Hadoop 带有用 Java 语言编写的框架,因此运行在 Linux 生产平台上是非常理想的。Hadoop 上的应用程序也可以使用其他语言编写,比如 C++。Hadoop 由许多元素构成,架构如下,其最底部是 Hadoop Distributed File Syst(HDFS),它存储 Hadoop 集群中所有存储节点上(DataNode)的文件。HDFS(对于本文)的上一层是 MapReduce 引擎,该引擎由 JobTrackers 和 TaskTrackers 组成。
Hadoop 的结构图 1. Hadoop 集群的简化视图

Hadoop 有许多元素构成。最底部是 Hadoop Distributed File System(HDFS),它存储 Hadoop 集群中所有存储节点上的文件。HDFS 的上一层是 MapReduce 引擎,该引擎由 JobTrackers 和 TaskTrackers 组成。
HDFS 是 Google GFS 的开源版本,一个高度容错的分布式文件系统,它能够提供高吞吐量的数据访问,适合存储海量(PB 级)的大文件(通常超过 64M)。NameNode 维护集群内的元数据,对外提供创建、打开、删除和重命名文件或目录的功能 DataNode 存储数据,并提负责处理数据的读写请求。DataNode 定期向 NameNode 上报心跳,NameNode 通过响应心跳来控制 DataNode。
MapReduce 是大规模数据(TB 级)计算的器,Map 和 Reduce 是它的主要思想,来源于函数式编程语言,Map 负责将数据打散,Reduce 负责对数据进行聚集,用户只需要实现 map 和 reduce 两个接口,即可完成 TB 级数据的计算。
在企业级应用中,可以以复杂的 BI 需求为驱动,利用 Hadoop 高可靠性,高扩展性,高效性的优势,并基于 Hadoop 将传统的 BI 应用程序转化为企业自身的业务分析平台。从而完成企业海量数据的统计分析、模型预测和流程优化。
Modeler 产品介绍
IBM SPSS Modeler( 原名 Clementine) 是 IBM SPSS 的核心挖掘产品,它提供了一个可视化的快速建立模型的环境,被誉为第一数据挖掘工具。它 提供了各种借助机器学习、人工智能和统计学的建模方法。通过建模选项板中的方法,用户通过这些工具可以采用商业技术快速建立预测性模型,并将其应用于商业活动,从而改进决策过程。
Modeler 海量数据架构
对于 Modeler 产品来说,大数据计算分析主要存在于以下几个方面:
- 混合数据结构的大数据分析
- 快速更新、积累数据
- 大数据建模
- 大数据模型更新
使用传统方法进行大数据运算无法适应分布式计算的要求,而传统的算法也都不是针对大数据进行设计的,如果要使用大数据,就要求统计师具备大数据系统的知识,这显然是不现实的。因此我们引入 hadoop 平台,使大数据底层系统对用户透明,这里为了使 hadoop 正确接收来自 modeler 的数据请求,并返回结果,需要设计一个中间平台进行请求转换及调度,为此设计出以下结构:
图 2. Modeler 与 Hadoop 集群架构图
Modeler 与 Hadoop 整合应用Analytic Server
从上图可以看出,Analytic Server 起到了中间平台的作用,IBM SPSS Analytic Server 是为整合 IBM SPSS 产品和大数据分析的技术方案,可以让原本熟悉 SPSS 产品的用户解决传统方法无法实现的大数据分析问题,针对 modeler 的大数据分析计算请求,Analytic Server 提供的解决方案有:
- 提供了大数据中心的结构,包括 Hadoop 平台, Map/Reduce 计算及分析
- 定义了统计算法接口
- 隐藏大数据平台的细节,用户可以更专注于分析数据
假定数据都存储在 hadoop 上,Analytic Server 是 modeler 和 hadoop could 的桥梁,Analytic Server 在这里的功能是:
- 定义与 Modeler 接口
- 接收处理来自 modeler 的数据请求
- AS 将请求生成 job 提交给 hadoop,并将结果返回给 modeler
- 分析结果可以继续作为新的数据来源提交给 AS 进行分析
在这里,我们面对的另一个问题是,如何将 modeler 的数据请求抽象成结构化给 Analytic Server, Analytic Stream Language 提供了这种结构化语言,它是一种域领域专用语言(Domain Specific Language/DSL), 为 Analytic Server 提供易读、易执行的代码片段。例如,modeler 需要对数据文件 CSV_DATA 筛选出 AGE>=18 的人,然后利用神经网络算法针对字段 INDUS 进行建模,modeler 提交的 ASL 如下:
清单 1. ASL- Neuralnet with filtering
- Val nnConf = {
- “inputFields” : [“CRIM”, “ZN”, “INDUS”],
- “TargetFields” : [“INDUS”],
- “TaskType” : “buildNewModel”,
- “UseMetaDataRole” : false,
- … other ALM parameters …
- }
- Val readConf = {
- “dataSource” : “CSV_DATA”,
- “format” : “CSV”,
- }
- read(readdConf)
- -> filterrRecords(_,ctx=>x=>(x.AGE>=18))
- -> pasw_neuralnet:neuralnet(nnConf,_,containers)
从以上 ASL 代码片段中,看到变量 nnConf 定义了算法模型,inputFields 是”CRIM”,”ZN”,”INDUS”, targetFields 是”INDUS”, 任务类型是建立新模型,并设置”UseMetaDataRole”为 false. readConf 变量定义了读取的数据文件名是 CSV_DATA,格式是 csv,然后通过调用函数 read(readConf) 读取 CSV_DATA,并将读取结果进行 AGE>=18 的过滤,再调用神经网络算法进行建模。
使用 Modeler 处理大数据
为了将 Hadoop 与 Modeler 整合,需要使用 modeler client 的版本 (15P2) 支持配置 Analytic Server, 在 modeler client 的配置文件里面(如 C:\Program Files\IBM\SPSS\Modeler\15\config\options.cfg)新加以下几行:
as_url, http://9.30.214.158:8080
as_prompt_for_password, Y
这里 http://9.30.214.158:8080 是 Analytic Server 的服务地址,然后重启 modeler client, 在 modeler 中使用 hadoop 平台上的数据文件之前,先确保数据已经存放到 Analytic Server 指定的 hadoop 路径中,在 modeler client 中的 Sources 双击”Analytic Server” 作为 source node, 点击”Select”:
图 3. Analytic Server Import node
在”Analytic Server: Credential”对话框中,输入 Analytic Server 的登陆用户名和密码:
图 4. Analytic Server Credential
选择一个数据文件 Drug1n, 点击”OK”:
图 5. Select Data Source
然后我们可以通过”Preview”来查看 hadoop 上的数据文件:
图 6. Analytic Server Preview
Preview 结果如下,Drug1n 包括 Age, Sex,BP, Cholesterol, Na, K,Drug7 列:
图 7. Data Source Preview
同时,可以通过点击”Lauch Datasource Editor” 连接 Analytic Server, 进行数据文件属性的设置,如分隔符,是否读取列名,使用编码等。
图 8. Data Source Setting
然后我们对 Drug1n 中年龄大于 30 岁的人使用的药物 Drug 字段进行建模,并将结果导出到 Analytic Server 中,并命名为 Drug_output,在这里我们在 Export 中使用 Analytic Server Export node 作为输出节点,选择输出 Datasource,注意输出文件需要在 Analytic Server 连接设置中勾选可写属性。
图 9. File Output Setting
建立好的 stream 保存为 Drug_stream.str 如下:
图 10. Drug_stream.str
和传统 modeler 处理数据不同的是,这个 stream 从 hadoop 读取数据,并将建模任务提交给 hadoop, 计算生成的结果返回给 modeler, 但由于我们这里使用的是 Analytic Server Export 节点,故再次将结果存储到 hadoop 上,以此可以作为另一个 stream 的输入数据,登陆 Analytic Server 的 web 端,可以下载 drug_output 进行查看,输出文件会按照 Analytic Server 中设置的块大小被分为若干个数据文件,如:
清单 2. 输出文件- part-r-0:
- 23,F,HIGH,HIGH,0.793,0.031,drugY,cluster-1
- 47,M,LOW,HIGH,0.739,0.056,drugC,cluster-3
- 47,M,LOW,HIGH,0.697,0.069,drugC,cluster-3
- 28,F,NORMAL,HIGH,0.564,0.072,drugX,cluster-1
- 61,F,LOW,HIGH,0.559,0.031,drugY,cluster-1
- 22,F,NORMAL,HIGH,0.677,0.079,drugX,cluster-1
- 49,F,NORMAL,HIGH,0.79,0.049,drugY,cluster-1
- 41,M,LOW,HIGH,0.767,0.069,drugC,cluster-3
- 60,M,NORMAL,HIGH,0.777,0.051,drugY,cluster-2
- 43,M,LOW,NORMAL,0.526,0.027,drugY,cluster-4
- 47,F,LOW,HIGH,0.896,0.076,drugC,cluster-1
- part-r-1:
- 34,F,HIGH,NORMAL,0.668,0.035,drugY,cluster-5
- 43,M,LOW,HIGH,0.627,0.041,drugY,cluster-3
- 74,F,LOW,HIGH,0.793,0.038,drugY,cluster-1
- 50,F,NORMAL,HIGH,0.828,0.065,drugX,cluster-1
- 16,F,HIGH,NORMAL,0.834,0.054,drugY,cluster-5
- 69,M,LOW,NORMAL,0.849,0.074,drugX,cluster-4
- 43,M,HIGH,HIGH,0.656,0.047,drugA,cluster-3
- 23,M,LOW,HIGH,0.559,0.077,drugC,cluster-3




雷达卡




的时候,雨也是晴;心雨
的时候,晴也是雨!
京公网安备 11010802022788号







