数据格式和数据库选择Spark / hadoop

时间:2017-11-17 10:01:59

标签: hadoop apache-spark hive hbase dataformat

我正在处理结构化数据(每个字段一个值,每行相同的字段),我必须使用Spark(作为分析工具)和Hadoop放入NoSql环境。虽然,我想知道使用什么格式。我在考虑json或csv,但我不确定。你觉得怎么样?为什么?我在这个领域没有足够的经验来正确决定。

第二个问题:我必须分析这些数据(存储在HDFS中)。所以,据我所知,我有两种可能性来查询它们(在分析之前):

  1. 直接阅读和过滤。我的意思是它可以用Spark完成,例如:

    data = sqlCtxt.read.json(path_data)
    
  2. 使用Hbase / Hive正确进行查询,然后处理数据。

  3. 所以,我不知道做这一切的标准方法是什么,最重要的是,什么是最快的。 提前谢谢你!

1 个答案:

答案 0 :(得分:2)

使用实木复合地板。我不确定CSV但绝对不使用JSON。我使用JSON和spark的个人经验非常非常慢,从存储中读取,切换到Parquet后,我的读取时间要快得多(例如,一些小文件需要几分钟才能加载压缩JSON,现在加载时间不到一秒钟压缩木地板)。

除了提高读取速度之外,压缩的镶木地板在读取时可以通过火花进行分区,而压缩的JSON则不能。这意味着Parquet可以加载到多个集群工作器上,而JSON只能读入具有1个分区的单个节点。如果您的文件很大并且您将获得Out Of Memory Exceptions,这不是一个好主意。它也不会并行化您的计算,因此您将在一个节点上执行。这不是“闪耀”的做事方式。

最后一点:您可以使用SparkSQL对存储的镶木地板文件执行查询,而无需先将它们读入数据框。非常方便。

希望这会有所帮助:)