【问题标题】:Data format and database choices Spark/hadoop数据格式和数据库选择 Spark/hadoop
【发布时间】:2018-05-01 01:42:23
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • “最快”选项是使用 Hbase(取决于数据模型),或者使用其他数据库,而不是 Hadoop 来从磁盘读取原始数据(所以也不是 Hive)

标签: hadoop apache-spark hive hbase dataformat


【解决方案1】:

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

除了提高读取速度之外,压缩的 parquet 在读取时可以通过 spark 进行分区,而压缩的 JSON 则不能。这意味着 Parquet 可以加载到多个集群工作人员上,而 JSON 只会被读取到具有 1 个分区的单个节点上。如果您的文件很大并且您会遇到内存不足异常,这不是一个好主意。它也不会并行化您的计算,因此您将在一个节点上执行。这不是 'Sparky' 的做事方式。

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

希望这会有所帮助:)

【讨论】:

  • 非常感谢您的建议。我一定会试试这个!
猜你喜欢
  • 2016-11-08
  • 1970-01-01
  • 2018-11-09
  • 1970-01-01
  • 2015-09-09
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
相关资源
最近更新 更多