我工作的要求,我需要读取传感器数据从csv/tsv和插入到Cassandra数据库。
csv格式:
传感器1时间戳1值
传感器1时间戳2值
传感器2时间戳1值
传感器2时间戳3值
详情:
用户可以上传一个文件到我们的web应用程序。一旦上传了文件,我需要在下一页向用户显示列中的唯一值。例如->
传感器1节点1
传感器2节点2
传感器创建
用户可以将传感器1与名为node1的现有主键Map,在这种情况下,传感器1的时间戳和值将添加到主键等于node1的表中,或者创建主键,在这种情况下,时间戳和值将与新主键一起添加。
我能够使用java8流和集合来实现这一点。这是使用小型csv文件。
问题:
如何将巨大的csv/tsv文件(200gb)上传到我的web应用程序?我应该在hdfs中上传文件并在ui中指定路径吗?我甚至把这个巨大的文件分成小块(每个50MB)。
如何从第一列获取唯一值?我能用Kafka/Spark吗?我需要将时间戳/值插入cassandra数据库。再说一遍,我能用Kafka/Spark吗?
非常感谢您的帮助。
1条答案
按热度按时间83qze16e1#
如何将巨大的csv/tsv文件(200gb)上传到我的web应用程序?我应该在hdfs中上传文件并在ui中指定路径吗?我甚至把这个巨大的文件分成小块(每个50MB)。
取决于您的web应用程序的使用方式。在从客户机到服务器的http请求上下文中上传如此大的文件总是很棘手的。你必须异步进行。不管你是把它放在hdfs还是s3,甚至是一个简单的sftp服务器上,这都是一个设计选择的问题,这个选择将影响你想要围绕这个文件构建什么样的工具。我建议从一些简单的东西开始,比如ftp/nas,如果需要扩展,可以使用s3之类的东西(使用hdfs作为共享文件存储是我没有见过很多人做的事情,但这不应该阻止您尝试)
如何从第一列获取唯一值?我能用Kafka/Spark吗?我需要将时间戳/值插入cassandra数据库。再说一遍,我能用Kafka/Spark吗?
Spark批或甚至一个正常的m/r工作将为你做的把戏。这只是一个简单的groupby操作,不过您应该真正了解您愿意在延迟上牺牲多少,因为groupby操作通常代价很高(它涉及洗牌)。一般来说,从我有限的经验来看,在用例中使用流式传输有点过头了,除非您得到源源不断的源数据流。但是您描述用例的方式对我来说更像是一个批量候选。
我将重点关注的一些事情:如何从客户端应用程序传输文件,cassandra中数据可用性的端到端SLA是什么,出现故障时会发生什么(我们是否重试等),我的作业多久运行一次(每次用户上传文件时会触发还是可能是cron作业),等等。