据我所知,当使用hbase表作为mapreduce作业的源时,我们已经定义了扫描的值。 LEt说我们将它设置为500,这是否意味着每个映射器只从hbase表中获得500行?如果我们将其设置为非常高的值,是否有任何问题?
如果扫描尺寸很小,我们不会遇到与mapreduce中的小文件相同的问题吗?
答案 0 :(得分:1)
以下是HBase Book中有关如何从HBase表中运行MapReduce作业的示例代码。
scan.setCaching()
当你说“扫描的价值”时,那不是真的。您可以表示scan.setBatch()
或scan.setMaxResultSize()
或setCaching
。
setBatch
用于告诉服务器在将结果返回给客户端之前要加载多少行setMaxResultSize
用于限制每个调用中返回的列数(如果您有一个非常宽的表)MaxResultSize
用于限制返回客户端的结果数通常情况下,您不要在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调用)