推荐用于将数据加载到hadoop的格式,以简化地图缩减

时间:2015-07-18 20:04:03

标签: json hadoop amazon-s3 emr

目前我正在从s3(每秒10k行左右?)中将大量数据加载到我们的红移群集中。

尝试对数据运行任何查询都会出现问题,即使在尝试汇总数小时的数据时,我们也会遇到内存错误。

我想要做的是在数据上运行map reduce作业,然后加载聚合。我知道这是一个相当容易的任务,但我对hadoop完全不熟悉,而且我有点困在第一步。

  1. 设置EMR群集(已完成)
  2. 将数据加载到HDFS(我认为这是我想要做的)
  3. 目前所有数据都被加载到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吗?)。

    所以问题是:

    1. 是否可以按原样使用这些文件?如果是这样的话,我只需要改变它们就可以减少麻烦
    2. 在我的文件正确并且我可以导入它们之后,最简单的方法是实现我的目标,即按小时简单地汇总这些数据,并将文件保存回S3以便我可以将其加载到redshift中?理想情况下,我希望这项工作每小时运行一次,因此我的红移表每小时都​​会按照前几个小时的数据进行更新。我应该阅读哪些技术才能实现这一目标?蜂巢?帕拉?猪?再次,只是寻找简单的解决方案。

1 个答案:

答案 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数据。