如何用Spark尾随HDFS文件?

时间:2016-01-09 19:07:08

标签: hadoop apache-spark hdfs logstash spark-streaming

我使用HDFS存储原始JSON行:

/user/ebuildy/logs/today.json

{"event":"buy", "tag1" : "20€", "tag2" : "user2"}
...

使用Elastic Logstash,webhdfs输出插件(意味着每隔X秒将JSON行附加到today.json中)。

另一方面,我正在使用Apache SparkSQL来查询数据。加载数据就像一个魅力:

CREATE TABLE events USING org.apache.spark.sql.json OPTIONS (path "hdfs://hadoop:9000/user/ebuildy/logs/today.json")

我可以很容易地用Tableau查询它(顺便说一句好工作!)。

现在,我尽力实现的目标是将传入数据附加到Spark(以及HDFS文件)。

实现这一目标的最佳方式是什么?

1 个答案:

答案 0 :(得分:0)

这就是这样的:你的表只不过是RDD的一个包装器(带有架构和许多好东西),它由load命令创建,它从HDFS读取数据并创建RDD分区。

现在,RDD是不可变的。因此,附加新数据意味着(旧的RDD +新数据) - >新的RDD。

您有多种选择,但这取决于您的使用案例。如果您想要与Tableau连接,那么您可能希望创建一个ETL类型的工作负载,可能每30分钟左右运行一次?如果是这样,您可能希望在每次运行时管理从HDFS读取文件并与现有RDD联合,创建新RDD,然后使用新RDD切换现有RDD。