摘要: 本文将介绍如何将数据转化为TFRecord格式,并且将生成TFRecord文件保存到HDFS中, 这里我们直接使用的是阿里云EMR(E-MapReduce)的HDFS服务。
本系列将利用阿里云容器服务的机器学习解决方案,帮助您了解和掌握TensorFlow,MXNet等深度学习库,开启您的深度学习之旅。
- 第一篇: 打造深度学习的云端实验室
- 第二篇: GPU资源的监控和报警,支撑高效深度学习的利器
- 第三篇: 利用TFRecord和HDFS准备TensorFlow训练数据
数据准备和预处理是一个深度学习训练过程中扮演着非常重要的角色,它影响着模型训练的速度和质量。
而TensorFlow对于HDFS的支持,将大数据与深度学习相集成,完善了从数据准备到模型训练的完整链条。在阿里云容器服务深度学习解决方案中, 为TensoFlow提供了OSS,NAS和HDFS三种分布式存储后端的支持。
本文将介绍如何将数据转化为TFRecord格式,并且将生成TFRecord文件保存到HDFS中, 这里我们直接使用的是阿里云EMR(E-MapReduce)的HDFS服务。
创建EMR集群
阿里云 Elastic MapReduce(E-MapReduce) 是运行在阿里云平台上的一种大数据处理的系统解决方案。可以通过访问EMR介绍了解其中细节。
具体EMR集群创建过程,可以参考文档,创建过程中,请选择VPC下的EMR,请留意EMR对应的安全组名。
创建容器集群,并且打通两个集群间的网络。
在 同一个VPC 下创建GPU容器集群后,登录到EMR集群对应的安全组,点击管理实例
将容器集群的节点添加进来。
为什么要使用TFRecord
TFRecord是TensorFlow内定的统一标准数据格式,可以支持多线程数据读取,并且可以通过batch size和epoch参数来控制训练时单次batch的大小和样本文件迭次数,同时能更好的利用内存和方便数据的复制和移动,所以是利用TensorFlow进行大规模深度学习训练的首选。
TFRecord生成程序示例
这段缩减的代码将MNIST数据集中所有的训练数据存储到一个TFRecord文件中,并且保存到EMR的HDFS中:hdfs://192.168.100.206:9000/mnist/output.tfrecords
, 192.168.100.206
是EMR的Master IP地址,9000
是HDFS NameNode的端口。完整代码的地址是https://github.com/cheyang/mnist-examples/blob/master/convert_to_records.py
。
# 定义函数转化变量类型。
def _int64_feature(value):
return tf.train.Feature(int64_list=tf.train.Int64List(value=[value]))
def _bytes_feature(value):
return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))
# 读取mnist数据。
mnist = input_data.read_data_sets("./MNIST_data",dtype=tf.uint8, one_hot=True)
images = mnist.train.images
labels = mnist.train.labels
pixels = images.shape[1]
num_examples = mnist.train.num_examples
# 保存TFRecord到HDFS。
filename = "hdfs://192.168.100.206:9000/mnist/output.tfrecords"
writer = tf.python_io.TFRecordWriter(filename)
for index in range(num_examples):
image_raw = images[index].tostring()
example = tf.train.Example(features=tf.train.Features(feature={
'pixels': _int64_feature(pixels),
'label': _int64_feature(np.argmax(labels[index])),
'image_raw': _bytes_feature(image_raw)
}))
writer.write(example.SerializeToString())
writer.close()
注意:TensoFlow虽然支持HDFS,但是需要额外的配置,否则直接调用会报
Environment variable HADOOP_HDFS_HOME not set
。如果在容器服务的深度学习解决方案中,您就无需为此劳心。
生成TFRecord数据
可以利用模型训练服务提供运行环境执行convert_to_records.py
, 生成TFRecord数据,保存到HDFS中
这样,就可以看到一个表单。首先通过下拉框选择刚才创建的集群名称
,点击训练框架
,这时可以看到一系列深度学习框架的列表,其中包括TensorFlow, Keras和MXNet的不同版本, 还可以指定python2和python3的版本,这里选择tensorflow:1.0.0
,并且配置其他选项,点击确定
以下为具体配置:
- 训练框架: tensorflow:1.0.0
- GPU数量: 0
- 数据卷名: 不使用数据卷
- Git地址: https://code.aliyun.com/deeplearning/mnist-examples.git
- 执行命令: python convert_to_records.py --directory hdfs://192.168.100.206:9000/mnist-tfrecord
运行成功后,可以查看执行的日志, 显示TFRecord文件已经保存到了HDFS
登录到EMR机器上查看产生的TFRecord文件
# hdfs dfs -ls /mnist-tfrecord
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/apps/hadoop-2.7.2/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/apps/tez-0.8.4/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
Found 3 items
-rw-r--r-- 3 root hadoop 8910000 2017-05-23 19:34 /mnist-tfrecord/test.tfrecords
-rw-r--r-- 3 root hadoop 49005000 2017-05-23 19:33 /mnist-tfrecord/train.tfrecords
-rw-r--r-- 3 root hadoop 4455000 2017-05-23 19:33 /mnist-tfrecord/validation.tfrecords
总结
数据准备是深度学习中非常重要的一环,而TensorFlow通过与Hadoop/Spark生态的集成,打通了大数据和深度学习之间关联。在阿里云的深度学习解决方案里,你能够很方便的使用OSS,NAS和HDFS等分布式存储保存和管理数据和模型。我们将在下一篇文章中向您介绍如何利用阿里云容器服务的深度学习解决方案在HDFS中加载TFRecord进行模型训练并保存Check point以及模型。
欢迎扫码加入钉钉群一起讨论:
相关推荐
"hdfs-元数据测试" HDFS(Hadoop Distributed File System)是一种分布式文件系统,为了...HDFS 的元数据合并机制是一种重要的机制,可以提高 Namenode 的启动速度,减轻 Namenode 的负担,提高系统的可靠性和稳定性。
6. **Query Routing**:一个智能路由机制,根据查询内容和数据分布,将查询发送到最相关的节点,以优化查询性能。 7. **结果合并**:查询结果需要在所有节点返回后进行合并,这通常涉及到一个中心节点或分布式队列...
本项目——“基于Python爬虫和Hadoop分布式文件系统(HDFS)的招聘信息采集与存储系统”,旨在利用Python爬虫技术获取网络上的招聘信息,并通过HDFS进行高效、安全的数据存储,为人力资源管理和数据分析提供有力支持...
综上所述,基于 HDFS、ElasticSearch、Spark 和 TensorFlow 的文本分析中台基础架构能够有效地处理和分析大规模文本数据,不仅提高了数据处理的效率,也为各种应用场景提供了灵活多样的技术支持。随着技术的不断进步...
标题中的“基于 DataX 开发的快速同步 MySQL 数据至 HDFS 上的工具”指的是一个利用 DataX 框架开发的实用程序,该程序能够高效地将存储在 MySQL 数据库中的数据迁移或实时同步到 Hadoop 分布式文件系统(HDFS)上。...
在本篇文章中,我们将深入探讨如何使用 Druid 进行数据加载,特别是针对实时 Kafka 数据和离线本地或 HDFS 数据的摄取过程。 首先,我们来看离线数据的摄取。批量数据加载通常用于处理历史数据或者定期更新的数据。...
标题中的“利用Flume将MySQL表数据准实时抽取到HDFS、MySQL、Kafka”是一项数据集成任务,涉及Apache Flume、MySQL数据库、Hadoop Distributed File System (HDFS) 和Apache Kafka这四个关键技术。Flume是Apache的一...
hdfs_fdw, 面向HDFS的PostgreSQL外部数据包装 用于PostgreSQL的Hadoop ( HDFS ) 外部数据包装这个PostgreSQL扩展实现了一个用于 ( HDFS )的外部数据包装器( FDW ) 。请注意,这个版本的hdfs_fdw与PostgreSQL和,高级...
本文将对 HDFS 数据流进行深入分析,探讨 DataXceiverServer 和 DataXceiver 的实现机制。 DataXceiverServer 和 DataXceiver 是 HDFS 中负责处理数据流的组件。DataXceiverServer 负责监听客户端的连接请求,并为...
在Spring Boot中,我们可以利用Spring Data模块来访问各种数据存储,包括关系数据库、NoSQL数据库以及HDFS。Spring Data Hadoop是Spring Data的一个扩展,它提供了一种抽象层,使得与Hadoop生态系统进行交互变得更加...
标题中的“MR处理HDFS日志样例”指的是使用MapReduce框架处理存储在Hadoop分布式文件系统(HDFS)...通过理解和应用以上知识点,我们可以有效地利用Hadoop的MapReduce处理HDFS上的日志数据,实现大规模数据的高效分析。
### Flume采集数据到Kafka,然后从Kafka取数据存储到HDFS的方法思路和完整步骤 #### 一、概述 随着大数据技术的发展,高效的数据采集、处理与存储变得尤为重要。本文将详细介绍如何利用Flume采集日志数据,并将其...
HDFS(Hadoop Distributed File System)是Hadoop生态系统中的一种分布式文件系统,用于存储和管理大量数据。在本章中,我们将讨论如何使用Flume和Sqoop等工具将数据导入HDFS。 使用Flume将数据导入HDFS Flume是一...
为了方便地使用Python进行HDFS的操作,我们可以利用`hdfs`库,这是一个Python接口,允许我们通过Python脚本来读写HDFS中的文件。该文档主要介绍了如何使用Python将数据存储到HDFS中,下面将详细解释相关的知识点。 ...
HDFS 的概念——数据块 HDFS(Hadoop Distributed File System)是一种分布式文件系统,旨在提供高效、可靠、可扩展的数据存储解决方案。在 HDFS 中,数据块(block)是最小的存储单元, Plays a crucial role in ...
它不保存任何实际数据,而是记录文件和数据块之间的映射关系、文件属性等信息。 - **DataNode**:用于存储实际的数据块。每个DataNode都会定期向NameNode发送心跳信号,报告自己的状态。 #### 三、HDFS中的元数据...
HDFS(Hadoop Distributed File System)是一种分布式文件系统,用于存储和管理大规模数据。它是 Hadoop 云计算平台的核心组件之一,提供了高效、可靠、可扩展的数据存储和管理解决方案。 HDFS 的优点包括: 1. 高...
HDFS集群包含两种类型的节点:名称节点和数据节点。名称节点负责保存文件数据块的映射信息和整个文件系统的命名空间;数据节点则负责存储和读取数据文件。HDFS采用POSIX标准的许可模式,即读(r)、写(w)、执行(x...
总结,HDFS的内存存储策略和“冷热温”存储策略是提升大数据处理效率和资源利用率的重要手段。LAZY PERSIST利用内存提高写入速度,而“冷热温”存储策略则根据数据特性进行分层存储,优化存储成本。正确配置和使用...