云机器学习与大数据处理:从预测成本到数据仓库
1. 云机器学习引擎成本计算
在云机器学习引擎(ML Engine)中,成本计算是一个重要的方面。基于美国的节点每小时成本为 0.40 美元,而基于欧洲或亚洲的节点每小时成本为 0.44 美元。例如,若消耗了 5 分钟的 10 个预测节点资源,成本计算如下:
[
成本 = 0.40 \text{ 美元/小时} \times \frac{5 \text{ 分钟}}{60 \text{ 分钟/小时}} \times 10 \text{ 节点} \approx 0.33 \text{ 美元}
]
除了基于小时的成本外,还有一个固定费率,每 1000 次预测收费 0.10 美元(非美国地区为 0.11 美元)。这个按预测次数收费的规则,适用于单个在线预测以及批量作业中的每个单独预测。例如,一个 5 分钟的预测作业覆盖了 10000 个数据点,按预测次数的费用为:
[
按预测次数费用 = \frac{10000 \text{ 预测}}{1000 \text{ 预测/块}} \times 0.10 \text{ 美元/块} = 1.00 \text{ 美元}
]
该预测作业的总成本约为 1.33 美元。
要查看每个作业消耗的预测节点小时数,可以使用以下命令:
$ gcloud ml-engine jobs describe prediction1
# ... More information here ...
predictionOutput:
nodeHours: 0.24
outputPath: gs://your-ml-bucket-name-here/prediction1-output
predictionCount: '10'
startTime: '2017-11-03T14:15:41Z'
state: SUCCEEDED
根据上述信息,该作业的预测费用为 0.0001 美元(10 次预测 / 10000 次预测/块 × 0.10 美元/块),节点小时费用为 0.096 美元(0.24 节点小时 × 0.40 美元/小时),总成本约为 0.0961 美元,四舍五入后约为 10 美分。
云机器学习相关概念总结如下:
- 机器学习:可以使用示例数据训练计算机执行任务,而不是显式编程。
- 神经网络:是训练计算机执行任务的一种方法。
- TensorFlow:一个开源框架,可在 Python 代码中轻松表达高级机器学习概念。
- 云机器学习引擎(ML Engine):用于训练和服务使用 TensorFlow 构建的机器学习模型的托管服务。
ML Engine 可以使用预定义层级或更具体的参数(如机器类型)来配置底层虚拟硬件。并且,它像其他以计算为中心的服务(如 Compute Engine)一样,基于每小时资源消耗对训练和预测作业收费。
2. 大数据处理工具概述
随着大数据成为热门话题,大规模数据处理变得至关重要。谷歌云平台提供了一些工具来简化这项工作,主要包括:
-
BigQuery
:能够快速查询海量数据的关系型云数据库。
-
Cloud Dataflow
:可以在谷歌基础设施上执行 Apache Beam 数据处理管道。
-
Cloud Pub/Sub
:用于在各种数据处理作业中作为系统间通信的粘合剂。
3. BigQuery 介绍
3.1 什么是 BigQuery
BigQuery 是一种关系型云数据库,能够在几秒内查询海量数据,而不是像传统方式那样需要数小时。它使用 SQL 进行查询,使得探索大型数据集变得简单快捷。虽然它能够运行传统的 OLTP 风格查询,但作为分析工具,用于扫描、过滤和聚合大量行以生成有意义的汇总数据时最为强大。
3.2 为什么选择 BigQuery
在处理数据时,MySQL 是常用的数据库,但当需要扫描的数据越来越多时,MySQL 会过载,性能下降。此时可以尝试调整 MySQL 的性能参数、开启读副本等,但这些方法可能无法完全解决问题。而像 Netezza 这样的数据仓库系统价格昂贵,可能超出预算。BigQuery 则结合了云基础设施的优势,提供了传统数据仓库系统的部分功能,并且只按使用量收费。
3.3 BigQuery 的工作原理
BigQuery 能处理海量数据的关键在于解决了两个核心问题:计算能力和存储吞吐量。
-
扩展计算能力
:采用 MapReduce 算法,将数据分割成可管理的小块(映射阶段),然后将这些小块汇总(归约阶段)。谷歌云平台有数千个 CPU 专门处理 BigQuery 的请求,执行查询时,每个计算单元处理一小部分数据,最后将结果合并。例如,要统计数十亿行数据,传统方法是在一台计算机上遍历所有行并计数,而使用 MapReduce 可以将任务分配给 1000 台计算机,每台计算机负责计数千分之一的行,最后将结果相加。
graph LR
A[数十亿行数据] --> B1[CPU 1: 计数块 1]
A --> B2[CPU 2: 计数块 2]
A --> B3[CPU N: 计数块 N]
B1 --> C1[结果 1]
B2 --> C2[结果 2]
B3 --> C3[结果 N]
C1 --> D[合并结果]
C2 --> D
C3 --> D
D --> E[总行数]
- 扩展存储吞吐量 :单个磁盘的性能有限,无法满足大量 CPU 同时请求数据的需求。因此,BigQuery 将数据库分割到多个物理磁盘(分片)。例如,将 10 TB 的数据分割到 10000 个单独的驱动器上,每个驱动器存储 1 GB 数据。这样,所有驱动器的总吞吐量可达 5 TB/s,每个驱动器可以在约 2 秒内传输 1 GB 数据。谷歌使用自定义的存储系统 Colossus 来处理数据的分割和复制。
graph LR
A[CPU 1] --> B1[驱动器 1]
A --> B2[驱动器 2]
A --> B3[驱动器 3]
A --> B4[驱动器 4]
C[CPU 2] --> B5[驱动器 5]
C --> B6[驱动器 6]
C --> B7[驱动器 7]
C --> B8[驱动器 8]
D[CPU N] --> B9[驱动器 9]
D --> B10[驱动器 10]
D --> B11[驱动器 11]
D --> B12[驱动器 12]
3.4 BigQuery 的关键概念
-
数据集和表
:类似于关系型数据库,BigQuery 有数据集包含表。数据集作为容器,表是行的集合。与传统关系型数据库不同,BigQuery 中的行通常没有唯一标识符列,因为它主要用于分析查询。它接受大多数常见的 SQL 风格请求,如 SELECT、UPDATE、INSERT、DELETE 语句以及 JOIN 操作。此外,BigQuery 还可以对存储在其他谷歌云存储服务(如 Cloud Storage、Cloud Datastore 或 Cloud Bigtable)中的数据进行查询。
| 对比项 | MySQL | BigQuery |
| ---- | ---- | ---- |
| 容器 | 数据库 | 数据集 |
| 数据集合 | 表 | 表 |
| 行唯一标识符 | 通常有 | 通常没有 |
| 查询数据范围 | 数据库内 | 可跨存储服务 | - 模式 :BigQuery 表有结构化模式,包含常见的数据类型,如 INTEGER、TIMESTAMP 和 STRING。字段可以是必需的或可空的。与传统关系型数据库不同,模式是通过 API 调用设置的,而不是通过 SQL 查询。例如,定义一个人员表的模式如下:
[
{"name": "name", "type": "STRING", "mode": "REQUIRED"},
{"name": "age", "type": "INTEGER", "mode": "NULLABLE"},
{"name": "birthdate", "type": "TIMESTAMP", "mode": "NULLABLE"}
]
此外,BigQuery 还有两个非标准的字段修饰符:REPEATED 模式和 RECORD 类型。REPEATED 字段将类型转换为数组,而 RECORD 类型允许在行内嵌套行。
-
作业
:由于对 BigQuery 的 API 请求通常涉及大量数据,请求可能不会立即完成,因此使用作业来表示可能需要一段时间才能完成的工作。作业可以完成四种基本操作:查询数据、将新数据加载到 BigQuery、将数据从一个表复制到另一个表、将数据从 BigQuery 提取(或导出)到其他地方(如 Google Cloud Storage)。并且可以对作业执行常见操作,如列出所有作业、取消正在运行的作业或检索作业详细信息。
云机器学习与大数据处理:从预测成本到数据仓库
4. BigQuery 数据加载与查询操作
4.1 批量加载数据
批量加载数据是将大量数据一次性导入到 BigQuery 的过程。可以使用 Google Cloud Storage 中的数据文件进行批量加载。操作步骤如下:
1. 准备数据文件:将需要加载的数据整理成合适的格式,如 CSV、JSON 等,并上传到 Google Cloud Storage 的存储桶中。
2. 创建作业:使用 BigQuery 的 API 或命令行工具创建一个加载作业。例如,使用
bq load
命令:
bq load --source_format=CSV dataset.table gs://your-bucket/your-data.csv schema.json
其中,
dataset.table
是目标数据集和表名,
gs://your-bucket/your-data.csv
是存储在 Cloud Storage 中的数据文件路径,
schema.json
是表的模式定义文件。
3. 监控作业:可以通过查看作业状态来监控加载过程。使用
bq show --format=prettyjson job_id
命令查看作业详细信息,确保作业成功完成。
4.2 流式数据加载
流式数据加载适用于需要实时处理数据的场景。可以使用 BigQuery 的 API 将数据逐行插入到表中。示例代码如下(使用 Python 和 BigQuery API):
from google.cloud import bigquery
client = bigquery.Client()
table_id = 'your-project.your-dataset.your-table'
table = client.get_table(table_id)
rows_to_insert = [
{'column1': 'value1', 'column2': 'value2'},
{'column1': 'value3', 'column2': 'value4'}
]
errors = client.insert_rows(table, rows_to_insert)
if errors == []:
print('New rows have been added.')
else:
print('Encountered errors while inserting rows: {}'.format(errors))
4.3 查询数据
BigQuery 使用标准 SQL 进行查询。以下是一个简单的查询示例,用于从表中选择特定列的数据:
SELECT column1, column2
FROM your-dataset.your-table
WHERE column1 = 'specific-value';
可以使用更复杂的 SQL 语句,如聚合函数、JOIN 操作等,来满足不同的分析需求。例如,计算某列的总和:
SELECT SUM(column1)
FROM your-dataset.your-table;
5. BigQuery 定价机制
BigQuery 的定价主要基于两个方面:存储和查询。
-
存储费用
:根据存储在 BigQuery 中的数据量收费。数据存储在 BigQuery 的内部存储系统中,费用按每 GB 每月计算。
-
查询费用
:根据查询处理的数据量收费。每次查询时,BigQuery 会计算查询所扫描的数据量,并按每 TB 收取一定费用。例如,如果查询扫描了 10 GB 的数据,费用为
(10 / 1024) * 每 TB 查询费用
。
定价示例如下表所示:
| 费用类型 | 收费标准 |
| ---- | ---- |
| 存储费用 | 每 GB 每月 $X |
| 查询费用 | 每 TB $Y |
6. BigQuery 实际应用案例
假设一家电商公司需要分析用户的购买行为。他们有大量的订单数据存储在 Google Cloud Storage 中,使用 BigQuery 可以快速进行数据分析。
1. 数据加载:将订单数据从 Cloud Storage 批量加载到 BigQuery 的表中。
2. 数据分析:使用 SQL 查询分析用户的购买频率、购买金额分布等信息。例如,查询每个用户的总购买金额:
SELECT user_id, SUM(order_amount)
FROM orders
GROUP BY user_id;
- 结果可视化:将查询结果导出到可视化工具(如 Google Data Studio)中,生成直观的报表和图表,帮助公司做出决策。
7. 总结与展望
云机器学习引擎(ML Engine)和 BigQuery 是谷歌云平台中强大的工具,分别在机器学习和大数据处理领域发挥着重要作用。ML Engine 为机器学习模型的训练和预测提供了便捷的托管服务,而 BigQuery 则能够高效地处理和分析海量数据。
未来,随着数据量的不断增长和业务需求的不断变化,这些工具将不断发展和完善。例如,ML Engine 可能会提供更强大的模型训练和优化功能,BigQuery 可能会进一步提高查询性能和支持更多的数据格式。同时,它们与其他谷歌云服务的集成也将更加紧密,为用户提供更全面的解决方案。
总之,掌握云机器学习和大数据处理的相关技术,能够帮助企业更好地利用数据,提升竞争力,在数字化时代取得更大的成功。
超级会员免费看

被折叠的 条评论
为什么被折叠?



