目前我正在从s3(每秒10k行左右?)中将大量数据加载到我们的红移群集中。
尝试对数据运行任何查询都会出现问题,即使在尝试汇总数小时的数据时,我们也会遇到内存错误。
我想要做的是在数据上运行map reduce作业,然后加载聚合。我知道这是一个相当容易的任务,但我对hadoop完全不熟悉,而且我有点困在第一步。
目前所有数据都被加载到S3 gzipped JSON文件中(可以轻松加载到redshift中)。我是否必须更改文件格式才能将其变为hadoop?每个S3文件都采用与此形式类似的内容:
{
"timestamp":"2015-06-10T11:54:34.345Z",
"key":"someguid",
"device": { "family" : "iOS", "versions" : "v8.4" }
}
{
"timestamp":"2015-06-11T15:56:44.385Z",
"key":"some second key",
"device": { "family" : "Android", "versions" : "v2.2" }
}
每个JSON对象是1个记录/行。 (注意JSON对象是一个接一个,在真实文件中没有空格,没有逗号分隔json对象或类似的东西)。
将这些文件的格式更改为可以正常工作的内容对我来说并不是什么大不了的事,但我不确定那种格式是什么(普通的CSV文件?我还可以gzip吗?)。
所以问题是:
答案 0 :(得分:0)
从示例数据可以清楚地看出您的数据是JSON格式。您可以使用Map / Reduce,Pig,Hive中的任何一个来读取和检索记录。
Pig和Hive比Map / Reduce更简单,因为您不需要编写太多代码。
如果您打算从Hive读取数据,那么您可以使用Hive JSON sarde。 有关实施的更多详细信息,请参见How do you make a HIVE table out of JSON data?
如果您打算使用猪,那么您可以在猪装载声明中使用JsonLoader
。您可以在此链接上获得有关JsonLoader
的更多详细信息http://joshualande.com/read-write-json-apache-pig/
您还可以在pig和hive中编写您的服装UDF以读取JSON数据。