Apache spark Spark Connect Hive到HDFS与Spark Connect HDFS直接连接,Hive位于其顶部?

Apache spark Spark Connect Hive到HDFS与Spark Connect HDFS直接连接,Hive位于其顶部?,apache-spark,hadoop,hive,hdfs,connector,Apache Spark,Hadoop,Hive,Hdfs,Connector,问题摘要: 我有一个特殊的用例,可以通过spark streaming每天向HDFS写入>10gb的数据。我们目前正处于设计阶段。我们希望使用spark流将数据写入HDFS(constraint)。数据是柱状的。 到目前为止,我们有两种选择: 当然,我希望使用配置单元上下文向HDFS提供数据。模式被定义,数据被分批或按行馈送 还有另一种选择。借助spark streaming API,我们可以直接将数据写入HDFS。我们也在考虑这一点,因为在这个用例中,我们可以通过配置单元从HDFS查询数据。这

问题摘要:

我有一个特殊的用例,可以通过spark streaming每天向HDFS写入>10gb的数据。我们目前正处于设计阶段。我们希望使用spark流将数据写入HDFS(constraint)。数据是柱状的。 到目前为止,我们有两种选择:

当然,我希望使用配置单元上下文向HDFS提供数据。模式被定义,数据被分批或按行馈送

还有另一种选择。借助spark streaming API,我们可以直接将数据写入HDFS。我们也在考虑这一点,因为在这个用例中,我们可以通过配置单元从HDFS查询数据。这将为将来可能出现的新用例提供使用其他技术的选项

什么是最好的

火花流->蜂巢->HDFS->蜂巢消耗

VS

Spark Streaming->HDFS->由Hive或其他技术使用

谢谢


到目前为止,我还没有找到关于这个话题的讨论,我的研究可能很短。如果您能推荐任何文章,我将非常乐意阅读。

这取决于您的最终用例。请考虑以下两种情况下的决定:

如果您有RT/NRT案例,并且所有数据都是完全刷新的,那么我建议使用第二种方法
Spark Streaming->HDFS->由Hive消费
。它将比您的第一种方法快
Spark Streaming->Hive->HDFS->Hive
。因为里面少了一层

如果您的数据是增量数据,并且有多个更新、删除操作,则难以使用带spark的HDFS或Hive over HDFS。因为Spark不允许从HDFS更新或删除数据。在这种情况下,两种方法都很难实现。您可以使用Hive managed table并使用HQL(仅在Hortonwork Hive版本中支持)进行更新/删除,也可以使用NOSQL数据库,如HBaseCassandra,这样spark就可以轻松地进行升级和删除。从程序的角度来看,与您的两种方法相比,这也很容易。 如果您在NoSQL中转储数据,那么您可以将配置单元用于普通SQL或报告目的

有很多工具和方法可供选择,但请选择适合您所有情况的工具和方法。:)

我有一个特殊的用例,每天写入>10gb的数据,并且数据是柱状的

这意味着您正在存储每日数据。如果是这种情况,那么配置单元将分区列作为日期,这样您就可以轻松地查询每天的数据。您可以从BI工具(如looker或presto)或任何其他BI工具查询原始数据。如果您是从spark查询,则可以使用配置单元功能/属性。此外,如果您在拼花地板中以列格式存储数据,impala可以使用hive metastore查询数据

如果您的数据是柱状的,请考虑实木地板或ORC。< /P> 关于选择2: 如果您有配置单元选项,则无需将数据馈送到HDFS,并从配置单元创建外部表并访问它

结论: 我觉得两者都一样。但考虑到使用BI工具或spark直接查询原始数据,hive是首选。从HDFS中,我们还可以使用spark查询数据。如果它以json、拼花或xml等格式存在,那么选项2就不会有额外的优势