我阅读了很多有关 hadoop 数据格式的信息,目前似乎明白,根据您使用的包,最高级的格式是 ORC(Hortonworks 很好地支持)或 Parquet(Cloudera 很好地支持)。
现在大多数初学者的示例/教程都包含简单的 csv 数据。每行一个条目。他们通常将 CSV 导入到类似 SQL 的结构 (Hive) 中,而不将其保存为 ORC。
JSON 似乎也被 Hadoop 支持,但没有很好地集成。同样根据概述文章JSON 是一种不好的格式,因为它不能按行拆分成块。原生似乎不支持JSON 行。
我的数据是电影元数据,如下所示:
{title: "Movie 1", rating: 4.3, tags: ["Romance", "Music"],
actors: ["Leonardo di Caprio"], source: "example.com"}
{title: "Movie 2", cinema_viewers: 10000000, budget: 10000000,
categories: ["Action"], role_importance: {'Adam Sandler': 2},
source: "example.net"}
如果我有 JSON 行结构,我应该如何导入我的数据?这在很大程度上取决于我要使用的查询引擎吗?到目前为止,我只了解了 Hive 和 Pig。似乎两者都可以与 HCatalog 模式一起使用或不使用。但我只在没有列表的简单列数据上使用两者(在 SQL 中需要一些外键表)。
也可以在导入之前将数据拆分为多个不同的文件 - 模拟 SQL 中的外键关系。或者,如果可能,我们是否总是将紧密耦合的数据保存在一个文件中?
我的心理问题似乎是,我不了解整个转换过程:我应该将数据存储到文件的格式,然后可以使用表格抽象导入,另存为另一个文件 (OCR),这将然后使用来自不同域的语言(如 Hive 或 Pig)进行查询,这些语言可能会被转换为 MapReduce 或其他一些中间层(Spark)。
免责声明:我使用 Hadoop 作为整个数据挖掘环境的名称,包括 Hive 和 Pig 等所有查询 API,而不仅仅是文件分发系统。