49、云机器学习与大数据处理:从预测成本到数据仓库

云机器学习与大数据处理:从预测成本到数据仓库

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;
  1. 结果可视化:将查询结果导出到可视化工具(如 Google Data Studio)中,生成直观的报表和图表,帮助公司做出决策。
7. 总结与展望

云机器学习引擎(ML Engine)和 BigQuery 是谷歌云平台中强大的工具,分别在机器学习和大数据处理领域发挥着重要作用。ML Engine 为机器学习模型的训练和预测提供了便捷的托管服务,而 BigQuery 则能够高效地处理和分析海量数据。

未来,随着数据量的不断增长和业务需求的不断变化,这些工具将不断发展和完善。例如,ML Engine 可能会提供更强大的模型训练和优化功能,BigQuery 可能会进一步提高查询性能和支持更多的数据格式。同时,它们与其他谷歌云服务的集成也将更加紧密,为用户提供更全面的解决方案。

总之,掌握云机器学习和大数据处理的相关技术,能够帮助企业更好地利用数据,提升竞争力,在数字化时代取得更大的成功。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值