AICon全球人工智能与机器学习技术大会8折特惠,购票立减¥960! 了解详情
写点什么

访谈与视频辑要:处理大数据——架构、算法与可视化

2013 年 9 月 02 日

摘要:在本视频教程系列中,Paul Dix 对大数据进行了探索实践。本教程的前 5 节课重点介绍了跨多个服务器系统对大批量 XML 数据进行的端到端处理,这些数据来自于真实的股票交易公告。在最后一节课中 Paul 讲解了开发可视化视图,从大数据的宏观分析中得到深刻见解。

Paul Dix 通过一系列视频教程“处理大数据:架构、算法与可视化”对大数据进行了探索实践。本教程的前5 节课重点介绍了跨多个服务器系统对大批量XML 数据进行的端到端处理,这些数据来自于真实的股票交易公告。在最后一节课中Paul 讲解了开发可视化视图,从大数据的宏观分析中得到深刻见解。在本教程中,Paul 使用Ruby 作为主要开发语言,在浏览器端使用Javascript。而且,Paul 还在GitHub 上创建了一个项目,让大家可以查看到他在本次教程中使用到的命令。这样,人们就可以跟着他在AWS 云服务上一个Ubuntu Linux 实例上安装所有软件。而且,Paul 也在相同的实例上开发了所有的程序。

准备编写代码

在教程的前五节课中,几乎所有的代码示例都是使用Ruby 语言编写的,这主要是为了从其他技术转移到大数据架构技术时能有一个平稳过渡。Paul 坦言, 在教程中的某些地方应当使用其他语言来代替Ruby 以获得更优的性能。但是,在教程中使用一种编程语言可以帮助读者关注大数据技术的架构而非底层细节。在最后一节课中,Paul 使用了Javascript,因为它天生适合于浏览器端编程。

简易的软件安装

教程的前三节课中讲述了如何安装大数据架构中常用的服务器端软件。在教程中用作示例的服务器端软件分别是:Hadoop、Cassandra 和 Kafka。对于其中每个软件的安装,教程都提供了十分详尽的介绍,读者可以跟着Paul 一步步进行操作。这些软件相辅相成,而且能够在单个服务器实例中一起运行。Paul 使用的是 Amazon EC2 云服务平台中 Ubuntu 12.04 LTS 的 m1.large 实例。在必要的时候,Paul 还在教程中使用了一些额外的软件和代码,但这些都不会削弱教程对大数据架构中主要服务器端系统的关注。额外的软件有 ZooKeeper、Redis 和 Sinatra 等。

触手可及的大数据架构

教程的读者在进行架构时可以很方便地全部选用开源软件,而且教程中所使用的数据也可以在 Internet 上下载。教程的开头主要关注了使用 Hadoop 处理非结构化数据。教程中使用了 2011 年 9 月的股票交易公告数据,读者也可以使用最新的 2013 年 3 月的股票交易公告数据代替。在 Hadoop 之后,教程介绍了 Cassandra。Cassandra 是一个具有高度可扩展性的、面向列的数据库,该数据库可以在超大规模网络中实现高效读写。Paul 提到 Netflix 和 Twitter 都使用了 Cassandra。然后,Paul 介绍了高吞吐量的消息系统及其在大数据架构中搬运数据时起到的作用。在对上述主要的服务器端软件进行讲解后,Paul 探讨了机器学习相关的算法。该部分教程包含了多种计算 k-nearest neighbors 的算法,然后对股票交易公告的标签进行了预测分析。教程的最后 2 节课将大数据架构整合到生产环境中,并使用可视化技术进行宏观层面的分析。

使用 Hadoop 处理非结构化数据

教程首先明确了一点,即在当下的每个大数据相关议题中都会谈到 Hadoop。Paul 推荐了 Cloudera 发布版,因为其安装相对比较容易。Doug Cutting 是 Cloudera 的主架构师,他参与创建了 Hadoop 这一开源框架,该框架可以作为服务集群运行在多个服务器上以处理海量非结构化数据。Google 公司的 MapReduce 和 Goolge 文件处理系统(Google File System)为 Hadoop 提供了灵感。Hadoop 的主要组件包括 Hadoop 内核、Hadoop 分布式文件处理系统(HDFS)以及 MapReduce。教程中所使用的伪分布式 Hadoop 使得组件服务的启动方式与真正的分布式 Hadoop 类似。HDFS 提供了一种跨服务器的弹性数据存储系统;MapReduce 技术提供了感知数据位置的标准化处理流程:读取数据,对数据进行映射(Map),使用某个键值对数据进行重排,然后对数据进行化简(Reduce)得到最终的输出。在 Map 和 Reduce 的过程中,可以将 Hadoop 与其他软件进行整合,例如数据库,消息总线(message bus)和其他文件系统。而且,有一个包含了一系列技术的扩展系统,这些技术主要包括了 Sqoop、Flume、Hive、Pig、Mahout、Datafu 和 Hue 等。

使用 Cassandra 存储结构化数据

在大数据架构中,Cassandra 的主要作用就是存储结构化数据。Paul 在教程中推荐了 DataStax 的 Cassandra 版本作为参考。Cassandra 是一种面向列的数据库,它通过分布式架构提供高可用性及耐用性的服务。它实现了超大规模的集群,并提供一种称作“最终一致性”的一致性类型,这意味着在任何时刻,在不同服务器中的相同数据库条目可以有不同的值。Cassandra 最终会将数据收敛到具有一致性的状态,但是在同一时刻,来自系统不同地方的请求对某个数据库条目会读取到不同的值。软件工程师可以通过对 Cassandra 进行调整,降低其一致性风险以满足期望的使用模式。在教程中 Paul 使用两种方式实现 Cassandra 和 Ruby 的交互,即原生的客户端gem“cassandra” CQL 客户端 gem“cassandra-cql”。教程带领读者们使用 Ruby 进行 Map 和 Reduce,并与 Cassandra 交互。Paul 讲解了一种大数据架构,该架构使用 Hadoop 处理非结构化数据,使用 Cassandra 处理结构化数据。

使用 Kafka 进行通信

Paul 认为:“合理的大数据架构使用消息系统对输入的数据和事件进行实时处理”。在教程中,Paul 以开源的软件平台“ Kafka ”为例阐述了消息系统在大数据架构中所扮演的角色。Kafka 最初由 LinkedIn 开发,现在已经作为一个 Apache 项目进行维护。Kafka 的开发者最初从性能角度考虑开发了这个系统,如果要在功能性和性能之间进行取舍的话,他们会选择性能。Kafka 可以安装在单机上,而且即使在单机上也能保持消息系统中生产者(Producer)、代理(Broker)和消费者(Consumer)的分工。Kafka 依赖 ZooKeeper 辅助判断代理间的上下游关系。通过 Ruby 的 gem“Kafka-rb”可以获取到一个 KafkaAPI,该 API 可以方便地被生产者 / 消费者调用。Paul 确保大家理解了应当由消息的消费者负责处理接收到的消息。而且,他还详细解释了一个使用 Redis 作为外部系统的算法,这个算法可以防止多个消费者处理同样的消息。

使用机器学习算法对结果进行预测

大数据架构从数据中提炼出有用的信息,并利用模型对这些数据进行预测分类。Paul 提到了一种机器学习算法“ k-nearest neighbor(k-NN)”,以预测与股票交易有关的公告的标签。讲座也涵盖了两种与距离有关的算法的 Ruby 实现,即欧几里得算法 cosin 相似性算法。Paul 指出,虽然 Ruby 语言可以用于对大数据架构进行探索,但是在真实系统中应当使用一种更为高效的语言——例如 C 语言。该部分包含了很多实际编码的内容,包括创建词表,前面提到的距离算法,如何将公告数据转换为稀疏矩阵以及一个预测公告标签的完整算法。

在生产环境中测试模型

Paul 以在整个教程中贯穿使用的“公告问题”作为例子,解释了“交叉验证(Cross-Validation)”的涵义并提供了其Ruby 实现。他使用了之前部分的代码,并将其整合到一个发展中的HTTP 服务器,即名叫 Sinatra 的 Ruby gem。该服务即成为了一个标签推荐系统。针对 Paul 所讲的内容,上述代码提供了概念和基本的工程思路。Paul 也探讨了如何使用多组数据集去构建标签推荐系统,其中每组数据集构建的系统都是一个新版本。服务器可以对不同版本的推荐系统提供不同的访问接口,但是用户只知道获得了标签推荐的服务,而不会意识到多个推荐系统的存在。这样,就可以对不同版本的推荐系统进行实时切换。网站可以将各版本的标签推荐系统中终端用户选择的标签数据进行汇总,并将其输出到消息总线(Message Bus)中进行带外(Out of Band)处理。通过消息总线收集到的信息被储存在 Hadoop 中,然后使用存有公告数据的数据库进行交叉验证以判断模型准确率。最后,当前模型的预测结果将被反馈到新一轮模型中。

在浏览器中进行可视化

在最后一堂课中,Paul 谈到了如何将大数据架构中得到的数据结果进行可视化,并将其转变为人类能够理解的信息。课程通过必要的 JavaScript 详细讲解了如何在浏览器中展示时间序列的标签数据。Paul 使用了 D3 Javascript 库创建了柱状图和时间序列图。Paul 基于 D3 库编写的代码是通过公告数据“驱动”的(译者注:D3 指 Data Driven Document,即数据驱动的文档)。他提到了如下几个 D3 Javascript 库的函数:求值域(extent),数据映射(scale),选择 html 元素,以及数据检索。

InfoQ 就该系列的视频教程对 Paul Dix 进行了专访:

InfoQ:在进行大数据项目时,一家公司会面临的最大挑战是哪些?

Paul:我认为有两个最大的挑战,一个是进行实际操作,另一个是学习针对新工具进行编程。在大数据的情况下探讨的都是分布式系统,所以实际操作是非常棘手的。对于许多公司而言,这是首次尝试运行分布式集群。这种分布式集群并不简单的是一组 Web 服务器,也不是典型的 RDBMS 配置的主、从服务器系统。针对大数据系统进行编程的时候,大家总是会寻找 MapReduce 范式进行批处理,或者是带有消息系统以及实时流处理的模式。这些模式与标准的 Web 请求、缓存和数据库生命周期差异很大。

InfoQ:在开发和发布大数据架构的产品时,如何将“持续交付”作为一项软件开发中的实践进行整合?

Paul:在大数据的环境下进行持续交付是很困难的,至少也是代价十分昂贵的。因为在大数据的情况下,许多处理在小规模的数据下都运行得很好,但是一放到整个数据集上就完全失效了。确保持续交付系统运行正常的唯一方式,就是检查

每件事情的正确性,那就需要有一个完全映射了生产环境中数据的系统。这样就会需要同时运行两组集群,代价十分高昂。一种折中的方式就是对生产环境中的数据进行取样,这样就不必保存生产环境的全部数据的镜像。但是,即时这样也要保证取样到足够多的数据,确保在部署到生产环境前就解决了性能问题。

InfoQ:在发布到生产环境之前,大数据架构的组件应当进行怎样的自动化质量监测?

Paul:对所有组件进行“测试驱动的开发(TDD)”显然是一个不错的实践。但是,也有其他一些要点在 TDD 下无法实现。第一点就是确保在发布到生产环境前测试大规模数据下的性能。另一点仅在创建分类或者聚类之类的预测模型时用到,就是需要理解生产环境下的数据,以便可以针对数据不断迭代模型,并能比较各版本模型间的性能。

视频教程作者简介:

Paul Dix 是 Errplane 的 CEO 和合创者。Errplane 是由美国著名的创业孵化器 Y Combinator 支持启动的,主要提供对应用程序和基础设施进行检测和监控的服务,并能根据检测到的异常自动发送报警信息。Paul 是《Service Oriented Design with Ruby and Rails》一书的作者。他经常在会议和用户组(包括 Bacon、Web 2.0、RubyConf、RailsConf 和 GoRuCo)中进行演讲。Paul 是 NYC 机器学习讨论组(NYC Machine Learning Meetup)的创始人和组织者,该讨论组中有 3600 多名成员。Paul 曾在创业公司和 Google、Microsoft 和 McAfee 这样的大公司中任职。他目前居住在纽约。

查看原文链接: Interview and Video Review: Working with Big Data: Infrastructure, Algorithms, and Visualizations


感谢马国耀对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2013 年 9 月 02 日 06:214479

评论

发布
暂无评论
发现更多内容

【小白学YOLO】YOLOv3网络结构细致解析

华为云开发者社区

人工智能 网络 物体检测 华为云 网络层

技术​选型的艺术

YourBatman

技术选型 湖北

程序设计理念-CentOs7实践Nginx-带来安装服务的通用法则

图南日晟

Nginx PHP-FPM 架构设计 环境安装

前浪出新招,996已过时,互联网员工都开始住公司了!(爆公司信息)

程序员生活志

加班 996 007 互联网公司

漫画:如何证明sleep不释放锁,而wait释放锁?

王磊

Java Wait Sleep

为什么我们要自主开发一个稳定可靠的容器网络

BoCloud博云

云计算 PaaS fabric 容器云

为啥Underlay才是容器网络的最佳落地选择

BoCloud博云

云计算 容器 容器网络

百度大脑OCR技术助力钢铁物流实现智能管理

百度大脑

人工智能 百度大脑 文字识别

随着并发压力的增加,系统响应时间和吞吐量如何变化,为什么?

chenzt

Self-Compassion,对自己好一点

霍太稳@极客邦科技

创业 个人成长 自我管理 创业心态

BIGO海量小文件存储实践

InfoQ_3597a20b53cc

【数据结构】Java 常用集合类 ConcurrentHashMap(JDK 1.8)

Alex🐒

Java 源码 数据结构 并发编程

http请求压测工具

潜默闻雨

挑战10的1,143,913次方种算法组合:这都不是事儿!

华为云开发者社区

华为 算法 进化 华为云

PV与UV你的网站也可以

北漂码农有话说

Django Models随机获取指定数量数据方法

BigYoung

django 数据 random 随机 Models

【数据结构】Java 常用集合类 HashMap(JDK 1.8)

Alex🐒

Java 源码 数据结构

API网关——Kong实践分享

BoCloud博云

云计算 容器 PaaS API

数字货币并不能完美诠释区块链金融

CECBC区块链专委会

区块链技术 社会价值 打通数据孤岛 重建产业信用

架构感悟 7- 性能优化何为

旭东(Frank)

计算机网络基础(八)---网络层-路由概述

书旅

计算机网络 网络协议 计算机基础 AS

web压力性能测试

周冬辉

压力测试

Kubernetes的拐点助推器:左手开源,右手边缘计算

华为云开发者社区

Kubernetes 容器 边缘计算 容器技术 华为云

关于数据库索引的知识点,你所需要了解的都在这儿了

鄙人薛某

MySQL 索引结构 索引 MySQL优化

原生Ingress灰度发布能力不够?我们是这么干的

BoCloud博云

云计算 容器 云原生 PaaS

Netty-物联网设备Channel管理

凸出

Java Netty ConcurrentHashMap 物联网 channel

web 性能压测工具

Z冰红茶

第7周总结:性能

慵秋

进击的 Flink:网易云音乐实时数仓建设实践

Apache Flink

flink

创业使人成长系列 (4)- 常用账号申请

石云升

支付宝 微信商户 商标

超详细讲解网络中的数据链路层~

程序员的时光

访谈与视频辑要:处理大数据——架构、算法与可视化-InfoQ