开发者社区> 问答> 正文

InputStream优化是什么?

InputStream优化是什么?

展开
收起
游客qzzytmszf3zhq 2021-12-09 19:51:13 274 0
1 条回答
写回答
取消 提交回答
  • 用户反馈OSS请求费用高,甚至超过了DLA费用(OSS请求费用=请求次数×每万次请求的单价÷10000)。调查发现,是因为开源的OSSFileSystem在读取数据的过程中,会按照512KB为一个单位进行预读操作。例如,用户如果顺序读一个1MB的文件,会产生两个对OSS的调用:第一个请求读前512KB,第二个请求读后面的512KB。这样的实现就会造成读大文件时请求次数比较多,另外由于预读的数据是缓存在内存里面的,如果同时读取的文件比较多,也会给内存造成一些压力。因此,在DLA FS的实现中,我们去掉了预读的操作,用户调用hadoop的read时,底层会向OSS请求读取从当前位置到文件结尾整个范围的数据,然后从OSS返回的流中读取用户需要的数据并返回。这样如果用户是顺序读取,下一个read调用就自然从同一个流中读取数据,不需要发起新的调用,即使顺序读一个很大的文件也只需要一次对OSS的调用就可以完成。

    另外,对于小的跳转(seek)操作,DLA FS的实现是从流中读取出要跳过的数据并丢弃,这样也不需要产生新的调用,只有大的跳转才会关闭当前的流并且产生一个新的调用(这是因为大的跳转读取-丢弃会导致seek的延时变大)。这样的实现保证了DLA FS的优化在ORC/Parquet等文件格式上面也会有减少调用次数的效果。

    2021-12-09 19:51:32
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载