在 hadoop 中保存和访问类似表的数据结构

Posted

技术标签:

【中文标题】在 hadoop 中保存和访问类似表的数据结构【英文标题】:Save and access table-like data structure in hadoop 【发布时间】:2016-10-04 07:00:40 【问题描述】:

我想使用 MapReduce 编程在 HDFS 中保存和访问类似数据结构的表。此 DS 的一部分如下图所示。这个 DS 有数万列和数百行,所有节点都应该可以访问它。

我的问题是:如何将这个 DS 保存在 HDFS 中并使用 MapReduce 编程访问它。我应该使用数组吗? (或 Hive 表?或 Hbase?)

谢谢。

【问题讨论】:

【参考方案1】:

HDFS 是分布式文件系统,将您的大文件存储在分布式服务器中。

您可以使用命令将文件从本地系统复制到 HDFS

hadoop fs -copyFromLocal /source/local/path 目的地/hdfs/path

复制完成后,可以在目标/hdfs/路径上形成外部配置单元表。

可以使用 hive shell 查询该表。

【讨论】:

【参考方案2】:

请考虑在这种情况下使用 Hive。如果您想做表格类型的处理,如 SAS 数据集或 R 数据帧/数据表或 python pandas;在 SQL 中几乎总是可以实现等价的东西。 Hive 通过 MapReduce 和 Tez 引擎提供强大的 SQL 抽象。如果您想在某个时候毕业到 Spark,那么您可以阅读数据框中的 Hive 表。正如@smit 指出的那样,您只需将数据从本地传输到 HDFS(使用 HDFS copyFromLocalput 命令)并在其上定义一个外部 Hive 表。

如果您想在此数据上编写一些自定义 map-reduce,请访问后台 hive 表数据(更有可能在/user/hive/warehouse)。从标准输入读取数据后,在映射器中解析它(可以使用describe extended <hive_table> 找到分隔符)并以键值对格式发出。

【讨论】:

正如我所提到的,我想在所有节点中访问这些数据,而不仅仅是某些节点(因为某些处理需要这些数据)。如果我使用 copyFromLocal 命令,每条数据都存储在不同的节点上,并且所有节点都没有本地访问权限。 如果您必须在每个节点中保存每个数据(而不是每个数据部分有 3 或 4 个副本),那么它更像 chef 就像 devops 安排,我们在每个节点中安装软件Hadoop。这将需要一些特殊的考虑。真的很想知道这是什么特殊情况。 请注意,我所说的这些数据不是原始数据。这些数据只是辅助数据,有助于对原始数据进行主要处理。我想,我应该使用distributed cache,但数据的大小远远大于几 KB 或 MB。

以上是关于在 hadoop 中保存和访问类似表的数据结构的主要内容,如果未能解决你的问题,请参考以下文章

保存具有多个表的数据集

Oracle数据库对象_视图

Hadoop之数据仓库设计

Hadoop之数据仓库设计

HBase基础知识

Hadoop中的DBInputFormat