Apache spark 从Hbase读取+;转换为DF+;运行SQLs

Apache spark 从Hbase读取+;转换为DF+;运行SQLs,apache-spark,apache-spark-sql,spark-structured-streaming,Apache Spark,Apache Spark Sql,Spark Structured Streaming,编辑 我的用例是Spark流媒体应用程序(Spark 2.1.1+Kafka 0.10.2.1),其中我从Kafka读取数据,并且对于每个消息/触发器,都需要从HBase提取数据。在拉取之后,我需要对数据运行一些SQL语句(因此从HBase接收) 当然,我打算将处理(从HBase和SQL执行中读取)推送到工作节点以实现并行性 到目前为止,我将数据从HBase转换为数据帧(以便启动SQK语句)的尝试都失败了。另一位代理提到,这是不“允许”的,因为该部分是在执行器上运行的。然而,这是我有意识地选择在

编辑 我的用例是Spark流媒体应用程序(Spark 2.1.1+Kafka 0.10.2.1),其中我从Kafka读取数据,并且对于每个消息/触发器,都需要从HBase提取数据。在拉取之后,我需要对数据运行一些SQL语句(因此从HBase接收)

当然,我打算将处理(从HBase和SQL执行中读取)推送到工作节点以实现并行性

到目前为止,我将数据从HBase转换为数据帧(以便启动SQK语句)的尝试都失败了。另一位代理提到,这是不“允许”的,因为该部分是在执行器上运行的。然而,这是我有意识地选择在工作节点上运行这些部分

这种想法正确吗?若否,原因为何


对此有什么建议?或者从总体上讲?

对于每个流媒体rec,从hbase和sql读取数据似乎“在流媒体应用程序中发生了太多事情”

无论如何,您可以为每个分区创建到hbase的连接,获取记录,然后进行比较。对sql不太确定。若它只是每个流记录的另一个读取,那个么在spark中再次在分区级别进行处理

但是上面的方法会很费时——只需确保在下一批开始之前完成所有内容即可


您还提到了将“hbase转换为数据帧”和“并行”。两个方向似乎都相反。因为您是从dataframe开始的(可能正在阅读hbase一次,然后你将其并行化。希望我澄清了你的一些疑问

这个问题非常广泛。我不知道我们如何帮助提供信息?@eliasah-编辑,希望现在它更简洁。我不打算在这里泛化。对于我的用例,非常具体-阅读流媒体流中的hbaes+sql执行。您是否使用HBase/Spark连接器,如:?感谢@Ramzy的快速输入。我现在处理的问题是处理从HBase(在executor)接收的数据。我需要将其转换为数据帧并在其上启动SQLs。对此有何想法?正如我所说,您可以一次性读取所有数据(atdriver)使用newAPIHadoopRDD()从hbase开始,然后使用dataframe。但如果您是从执行器查询hbase,则可以在执行器级别迭代结果,并返回对象以形成dataframe。