我在一个项目中感到困惑,该项目要求我优化对HDFS的小文件支持。
其步骤如下:
然后我在学习中遇到了一个问题。例如,
如果我使用命令
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请求并停止它,然后在其中执行某些操作。但是我不知道如何。在技术上可行吗?
最佳答案
直接从hdfs读取HBase文件不是一个好主意,因为命名是不可预测的。而且,性能会真的很差。
如果文件的最大大小为几MB,则可以将其存储在HBase中,并使用HBase api来获取数据。
将1个文件存储在1个单元格中,然后您就可以通过HBase api轻松检索该文件。您还可以使用HBase星际之门通过Http Rest调用来获取文件。
关于hadoop - 当我使用FileSystem.get(URI.create (“hdfs://loacalhost:9000/filepath”),conf时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30555489/