我使用hdfs存储原始json行:
/user/ebuildy/logs/today.json
{"event":"buy", "tag1" : "20€", "tag2" : "user2"}
...
使用elastic logstash,webhdfs输出插件(意味着json行每x秒追加到today.json中)。
另一方面,我使用apachesparksql来查询数据。加载数据非常有效:
CREATE TABLE events USING org.apache.spark.sql.json OPTIONS (path "hdfs://hadoop:9000/user/ebuildy/logs/today.json")
我可以用tableau很容易地查询它(顺便说一句,干得好的家伙!)。
现在,我尽力实现的是将传入的数据附加到spark中(而不是hdfs文件)。
实现这一目标的最佳方法是什么?
1条答案
按热度按时间6rqinv9w1#
这是这样的:您的表只是rdd周围的一个 Package 器(带有模式和很多东西),rdd是由load命令创建的,它从HDF读取数据并创建rdd分区。
现在,rdd是不可变的。因此,添加新数据意味着(旧rdd+新数据)->新rdd。
您有多种选择,但这实际上取决于您的用例。如果您想连接tableau,那么您是否希望创建一种etl类型的工作负载,每30分钟左右运行一次?如果是这样,您可能希望管理每次运行时从hdfs读取的文件,并与现有rdd合并,创建一个新rdd,然后将现有rdd与新rdd切换。