我使用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文件)。
实现这一目标的最佳方式是什么?
答案 0 :(得分:0)
这就是这样的:你的表只不过是RDD的一个包装器(带有架构和许多好东西),它由load命令创建,它从HDFS读取数据并创建RDD分区。
现在,RDD是不可变的。因此,附加新数据意味着(旧的RDD +新数据) - >新的RDD。
您有多种选择,但这取决于您的使用案例。如果您想要与Tableau连接,那么您可能希望创建一个ETL类型的工作负载,可能每30分钟左右运行一次?如果是这样,您可能希望在每次运行时管理从HDFS读取文件并与现有RDD联合,创建新RDD,然后使用新RDD切换现有RDD。