我正在使用flink程序将我从kafka获得的流式数据写入Azure Data Lake。当我在获取ADLOutputStream和写入和关闭时使用同步时,它工作正常,但性能非常差,因为只有一个线程正在写入数据湖。当我使用多线程而没有同步时,它将抛出http 400 illegalargument异常。有多种线程可以写入Azure数据湖中的文件吗?如何从多线程写入流数据到Azure数据湖?
1
A
回答
1
再想一想你的设计。
一种方法是将多个文件写入Data Lake - 每个线程一个文件。一旦进入Data Lake,您可以使用USQL或PolyBase查询一组文件,就好像它们是一个数据源一样。或者,您可以编排一份USQL作业,以便在文件在湖中合并文件。这将是本地处理,并会表现良好。
1
使用AdlOuputStream不是这种并行写入的正确机制。 AdlOutputStream专为一个作家场景而设计。当从多个线程有并行摄取数据通常是我们通常看到的几个特点:
- 要优化吞吐量和不能做跨线程同步
- 订购(跨线程)通常并不重要
为了专门解决这些类型的场景,Azure Data Lake Store提供了一个独特的高性能API,我们称之为“并发追加”。
这里是您展示如何使用这个API的要点是:https://gist.github.com/asikaria/0a806091655c6e963eea59e89fdd40a9
的方法可以用在我们的SDK的核心类:https://azure.github.io/azure-data-lake-store-java/javadoc/com/microsoft/azure/datalake/store/Core.html
几点需要注意的特定于Azure的数据湖店实现并发追加的:
- 一旦文件被用于并发追加,则不能使用固定偏移附加与它
- 这是POSS您可能会在文件中看到重复的数据。这是错误模式和自动重试的可能副作用。
编辑:此外,Murray Foxcraft的答案适用于具有合理文件旋转策略的长时间运行的线程。这种方法唯一的缺点是你不会得到大量的小文件。
相关问题
- 1. 如何将流数据保存到Azure数据湖?
- 2. azure数据湖授权
- 3. 如何将Azure数据湖存储连接到Azure ML?
- 4. 如何从Azure的数据副本湖加快宇宙DB
- 5. CreateJob for C#的Azure数据湖分析#
- 6. Google的BigQuery与Azure数据湖U-SQL
- 7. Azure数据湖中的U-SQL游标
- 8. Azure数据湖中的增量负载
- 9. 从线程到任何子线程的环境数据流
- 10. Azure AppendBlob数据块/写入
- 11. 如何将数据写入到从angularjs
- 12. Azure数据湖外部数据源:行大小太大
- 13. 电力BI刷新数据源Azure数据湖
- 14. Azure数据湖与数据工厂定制活动的连接
- 15. 如何将流数据集写入Cassandra?
- 16. 如何将流数据写入S3?
- 17. 通配符在数据工厂Azure的数据存储湖输入
- 18. 从多个线程将数据写入sqlite的最佳方法
- 19. 我们能否使用Snappy-data更新Azure数据湖中的记录? OR仅仅是Azure数据湖追加?
- 20. Azure Web Job从数据湖店下载的数据不好编码
- 21. 用于多线程数据流的UML
- 22. 如何从多个数组插入数据到数据库PHP?
- 23. 如何强制流写入数字数据根据类型
- 24. Google数据流根据输入写入多个表
- 25. 如何使用python多线程从XMl插入数据库?
- 26. 从Azure SQL数据库写入Azure虚拟机
- 27. 如何从数据库读取并写入http流。 php和mysql
- 28. 如何从字符串流数据写入一个文件(CPP)
- 29. 使用Google云数据流从一个数据存储中读取数据并写入另一个数据流
- 30. 从数据库中写入数据库
感谢您的指导和要点。我正在寻找过去两周的答案。 – Dhinesh