在 OpenStack 上部署 Hadoop
OpenStack 控制计算、存储和网络资源池。本文主要关注 OpenStack 如何在大数据用例中扮演关键角色。
OpenStack 上的大数据
现在,数据随处生成,数据量呈指数增长。来自 Web 服务器、应用程序服务器、数据库服务器的数据以用户信息、日志文件和系统状态信息的形式提供。大量的数据也由物联网设备产生,如传感器、车辆、工业设备等。从科学模拟模型生成的数据也是大数据的来源之一。使用传统软件工具来存储和执行这些数据的分析可能很困难,而 Hadoop 可以解决这个问题。
看一个用例场景 —— 大量的数据存储在关系数据库管理系统环境中。当数据集越来越大时, RDBMS ( 关系数据库管理系统 Relational Database Management System )表现不佳。而且这个问题会随着数据集的增长而越发严重。在这个阶段,避免采用 NoSQL 。需要以具有成本效益的方式存储和处理大量数据。应该依赖非虚拟化环境中的高端服务器吗?要求是随时扩展集群,需要一个更好的仪表板来管理其所有组件。
计划在 OpenStack 之上建立一个 Hadoop 集群并创建 ETL ( Extract-Transform-Load)作业环境。Hadoop 是一个行业标准框架,用于存储和分析具有容错 Hadoop 分布式文件系统和 MapReduce 实施的大型数据集。然而,可伸缩性在典型的 Hadoop 集群中是一个非常普遍的问题。
Openstack 推出了一个名为 Sahara 的项目 —— 数据处理即服务。 Openstack Sahara 旨在配置和管理数据处理框架,如集群拓扑中的 hadoop mapreduce、spark和Storm 。该项目与 Amazon Elastic MapReduce(EMR) 服务提供的数据分析平台类似。Openstack Sahara 可在几分钟内部署集群。此外,Openstack Sahara 可以根据需求通过添加或删除工作节点来伸缩集群。
使用 Openstack Sahara 管理 Hadoop 集群的好处
——集群可以更快地提供且易于配置。
——像其他 OpenStack 服务一样,Sahara 服务可以通过强大的 REST API、CLI 和 Horizon 仪表板进行管理。
——插件可用于支持 Vannila(Apache Hadoop)、HDP(ambari)、CDH(Cloudera)、MapR、Spark、Storm 等多个 Hadoop 供应商。
——集群大小可根据需求进行伸缩。
——可以与 OpenStack Swift 集成以存储由 Hadoop和 Spark 处理的数据。
——集群监控变得简单。
——除集群配置外,Sahara 还可以用作分析即服务,用于临时或突发分析工作负载。
架构
Openstack Sahara 旨在利用 OpenStack 的核心服务和其他完全托管服务。这使 Sahara 更加可靠并且能够有效地管理 Hadoop 集群,你可以选择使用包括 Trove( OpenStack 数据服务组件,允许用户对关系型数据库进行管理,实现了 Mysql 实例的异步复制和提供 PostgreSQL 数据库的实例。) 和 Swift 在内的服务。来看看 Sahara 的架构。
—— Sahara 服务有一个 API 服务器,它响应来自最终用户的 HTTP 请求并与其他 OpenStack 服务交互以执行其功能。
—— Keystone (身份即服务)对用户进行身份验证,并提供用于与 OpenStack 配合使用的安全令牌,将用户在 Sahara 中的能力限制为其 OpenStack 权限。
—— Heat (编排即服务)用于配置和编排数据处理集群的部署。
—— Glance(虚拟机镜像即服务)使用操作系统和预安装的 Hadoop / Spark 软件包存储 VM 镜像以创建数据处理集群。
—— Nova (计算)为数据处理集群提供虚拟机。
—— Ironic(裸机即服务)为数据处理集群提供裸机节点。
—— Neutron(网络)便于网络服务从基础到高级拓扑访问数据处理集群。
—— Cinder(块存储)为集群节点提供持久存储介质。
—— Swift(对象存储)提供可靠的存储来保存作业二进制文件和由hadoop / spark处理的数据。
—— Designate(DNS即服务)提供托管区域以保留集群实例的DNS记录。 Hadoop服务通过主机名与群集实例进行通信。
—— Ceilometer(telrmetry)收集和存储有关用于计量和监控目的的集群指标。
—— Manila(文件共享)可用于存储作业创建的作业二进制文件和数据。
—— Barbican(密钥管理服务)安全地存储密码和私钥等敏感数据。
——Trove(数据库即服务)为 hive metastore 提供数据库实例,并存储 Hadoop 服务和其他管理服务的状态。
如何建立Sahara集群
请按照部署 Sahara 安装指南中的步骤操作。不同的部署环境有不同的方式,如果你想要试验, Kolla 也是一个不错的选择。
你还可以通过 Horizon 仪表板管理 Sahara 项目。
用Sahara集群ETL(提取、转换和加载)或ELT(提取、加载和转换)
市场上有很多 ETL 工具可用。
传统数据仓库有其自身的优点和局限性,例如它可能位于数据源以外的其他位置。Hadoop 是运行 ETL 作业的理想平台。
数据存储区中有各种数据,包括结构化、半结构化和非结构化数据。Hadoop生态系统有从不同数据源(包括数据库、文件和其他数据流)中提取数据并将其存储在集中式 Hadoop Distributed File System(HDFS) 中的工具。
随着数据快速增长,Hadoop 集群可以扩展并利用OpenStack Sahara 。
Apache Hive 是建立在 Hadoop 生态系统之上的数据仓库项目,也是进行 ETL 分析的可靠工具。一旦使用工具(如 Sqoop、Flume、Kafka 等)从数据源中提取数据后,应该使用 MapReduce 技术用 Hive 或pig scripts 进行清理和转换。
Hive 的另一个优点是它是一个交互式查询引擎,可以通过 Hive 查询语言访问。它类似于 SQL 。因此,数据库人员可以在不掌握 Java 和 MapReduce 概念的情况下,在 Hadoop 生态系统中执行作业。Hive 查询执行引擎解析 Hive 查询并将其转换为一系列 MapReduce / Spark 作业。Hive 可以通过JDBC / ODBC 驱动程序和瘦客户端访问。
Oozie 是 Hadoop 生态系统中可用的工作流引擎。工作流是一组必须作为分布式环境中的序列执行的任务。Oozie 帮助创建一个简单的工作流来层叠多个工作流并创建协调的作业。Oozie 用于为复杂的 ETL 作业创建工作流也很理想,尽管它没有模块来支持与 Hadoop 相关的所有操作。
我们可以使用任何工作流引擎来执行 ETL 工作,例如 Openstack Mistral (工作流即服务)。Apache oozie 在某些方面类似于 Openstack Mistral ,充当可以定期触发的作业调度器。
我们来看看一个典型的 ETL 作业流程,它使用Hadoop 将应用程序将其数据存储在 MySQL 服务器中。存储的数据需要以最少的成本和时间进行分析。
提取
第一步是从 MySQL 中提取数据并将其存储在 HDFS中。
Apache Sqoop 可用于从结构化数据源(如 RDBMS数据存储)导出/导入数据。
如果要提取的数据是半结构化的或非结构化的,你可以使用 Apache Flume 从数据链接中获取数据,例如 Web 服务器日志、Twitter 数据流或传感器数据。
转换
从上述阶段提取的数据格式不正确(只是原始数据)。应该用适当的过滤器和数据聚合来清理。
这是在 HDFS 中存储数据必不可少的。
此时,我们需要为每个表设计 Hive 模式,并创建一个数据库来转换存储在临时区域中的数据。
通常情况下,数据采用 .csv 格式,每条记录均以逗号分隔。
我们不需要检查 HDFS 数据以了解它是如何存储的。有一些异常数据类型应该与 Hive 兼容。
数据库建模后,我们可以加载提取的数据进行清理。表格中的数据仍然未标准化。从不同的表中聚合所需的列。
同样,可以用“ OVERWRITE INTO TABLE ”语句来汇总多个表中的数据。
Hive 支持分区表,通过水平分配执行负载来提高查询性能。我们倾向于分区存储年份和月份的列。有时,分区表在 MapReduce 作业中创建更多任务。
加载
现在是时候将转换后的数据加载到 HDFS 中的数据仓库目录中,这是数据的最终状态。在这里,我们可以应用 SQL 查询来获得适当的结果。
所有的 DML 命令都可以用来分析基于用例的仓库数据。
结果可以下载为 .csv、表格或图表进行分析。它可以与其他流行的商业智能工具(如Talend OpenStudio、Tabelau 等)集成。
自动化
现在使用 Oozie 工作流引擎自动执行 ETL 作业(你也可以使用 Mistral,大多数 Hadoop 用户习惯用Apache Oozie )。
结论
OpenStack 集成了一个非常大的 Hadoop 生态系统,许多云提供商提供 Hadoop 服务(只需要点击几下它们的云管理门户网站即可)。Sahara 支持大部分 Hadoop 供应商插件,让你执行 ETL 工作流。