我在一个项目中感到困惑,它要求我优化hdfs的小文件支持。其步骤如下:
将小文件存储到hbase;
几个小文件合并成一个大文件,然后存储到hdfs;
使用一些策略来记录这些小文件的位置;
我们需要保证文件的uri是一致的。
然后在我的学习中我遇到了一个问题。例如,如果我使用命令 hdfs fs -put ~/local/smallfile /usr/smallfile
.
如果我们什么都不做,那么在我的代码里可能是这样 FileSystem.get(URI.create("hdfs://loacalhost:9000/usr/smallfile"), conf)
.
但是如果我的项目正常,那么小文件应该存储到hbase,然后当我使用uri时 hdfs://loacalhost:9000/usr/smallfile
在我的代码中,它应该返回 NULL
.
问题是,如何重定向到hbase并将其返回。我看了rpc,还是找不到任何帮助。
我的想法是在用户和hdfs之间添加一个服务器,它可以获取所有uri请求并停止它,然后在其中做一些事情。但我不知道怎么做。在技术上可行吗?
1条答案
按热度按时间yfjy0ee71#
尝试直接从hdfs读取hbase文件不是一个好主意,因为命名是不可预测的。而且,表演会非常糟糕。
如果文件的最大大小只有几mb,则可以将其存储在hbase中,并使用hbase api获取数据。
在一个单元格中存储一个文件,然后您就可以通过hbase api轻松地检索它。您还可以使用hbase stargate通过httprest调用获取文件。