使用HBase表作为MapReduce源

时间:2015-04-24 19:56:13

标签: hadoop mapreduce hbase

据我所知,当使用hbase表作为mapreduce作业的源时,我们已经定义了扫描的值。 LEt说我们将它设置为500,这是否意味着每个映射器只从hbase表中获得500行?如果我们将其设置为非常高的值,是否有任何问题?

如果扫描尺寸很小,我们不会遇到与mapreduce中的小文件相同的问题吗?

2 个答案:

答案 0 :(得分:1)

以下是HBase Book中有关如何从HBase表中运行MapReduce作业的示例代码。

scan.setCaching()

当你说“扫描的价值”时,那不是真的。您可以表示scan.setBatch()scan.setMaxResultSize()setCaching

  1. setBatch用于告诉服务器在将结果返回给客户端之前要加载多少行
  2. setMaxResultSize用于限制每个调用中返回的列数(如果您有一个非常宽的表)
  3. MaxResultSize用于限制返回客户端的结果数
  4. 通常情况下,您不要在MapReduce作业中设置import java.net.ServerSocket; import java.net.Socket; public class ThreadedCommandServer { public static void main(String[] args) throws Exception { System.out.println("Starting server...."); int port = 8989; ServerSocket ss = new ServerSocket(port); while(true) { System.out.println("Waiting for connection from client..."); Socket socket = ss.accept(); ServerThread st = new ServerThread(socket); st.start(); } } } 。所以你会看到所有的数据。

    上述信息的参考资料为here

答案 1 :(得分:0)

您编写的映射器代码将逐行提供数据。然而,映射器运行时将通过缓存侧读取记录(例如,在您的情况下一次500行)。

如果扫描尺寸太小,执行变得非常低效(许多io调用)