当我使用FileSystem.get(URI.create(“hdfs:// loacalhost:9000 / filepath”),conf)时发生了什么?

时间:2015-05-31 08:44:17

标签: hadoop hbase bigdata rpc

我在一个项目中感到困惑,它要求我优化对HDFS的小文件支持。 它的步骤是这样的:

  1. 将小文件存储到HBase;
  2. 几个小文件合并到一个大文件而不是存储到HDFS;
  3. 使用一些策略来记录那些小文件的位置;
  4. 我们需要保证文件的URI是一致的。
  5. 然后在我的研究中我遇到了一个问题。例如, 如果我使用命令

    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 个答案:

答案 0 :(得分:0)

尝试直接从hdfs读取HBase文件不是一个好主意,因为命名是不可预测的。此外,表现将非常糟糕 如果你的文件最大大小是几MB,那么你可以将它存储在HBase中并使用HBase api来获取数据。
将1个文件存储在1个单元格中,然后您就可以通过HBase api轻松检索它。您也可以使用HBase stargate通过Http Rest调用来获取文件。