说到mapreduce,Accumulo平板电脑如何映射到HDFS块

cha*_*ick 5 hadoop mapreduce accumulo

如果我的环境设置如下:
-64MB HDFS阻止
-5平板电脑服务器
- 每台平板电脑服务器大小为1GB的平板电脑

如果我有一个如下表:
rowA | f1 | q1 | v1
rowA | f1 | q2 | V2

rowB | f1 | q1 | V3

rowC | f1 | q1 | v4
rowC | f2 | q1 | v5
rowC | f3 | q3 | V6

从小文档中,我知道关于rowA的所有数据都将是一个平板电脑,其中可能包含或不包含有关其他行的数据,即全部或无.所以我的问题是:

平板电脑如何映射到Datanode或HDFS块?显然,一个平板电脑被分成多个HDFS模块(在这种情况下为8个),所以它们会存储在相同或不同的数据节点上,还是无关紧要?

在上面的示例中,有关RowC(或A或B)的所有数据是否会进入相同的HDFS块或不同的HDFS块?

执行地图时减少作业我会得到多少映射器?(每个hdfs块一个?还是每个平板电脑?或每个服务器?)

提前感谢您提出任何建议.

10f*_*low 1

为了写入 Accumulo(数据摄取),运行 MapReduce 作业是有意义的,其中映射器输入是 HDFS 上的输入文件。您基本上可以遵循 Accumulo 文档中的这个示例:

http://accumulo.apache.org/1.4/examples/mapred.html

(本文的第四节提供了有关将数据摄入 Accumulo 的技术的更多背景知识:http://ieee-hpec.org/2012/index_htm_files/byun.pdf

对于从 Accumulo 读取(数据查询),我不会使用 MapReduce。Accumulo/Zookeeper 将自动在平板电脑服务器之间分发您的查询。如果您使用行作为原子记录,请使用(或扩展)WholeRowIterator 并在您感兴趣的行范围上启动扫描程序(或BatchScanner)。扫描程序将在您的平板电脑服务器上并行运行。您并不真的想直接从 HDFS 或 MapReduce 访问 Accumulo 数据。

以下是一些可帮助您入门的示例代码:

//some of the classes you'll need (in no particular order)...

import org.apache.accumulo.core.client.Connector;
import org.apache.accumulo.core.client.Instance;
import org.apache.accumulo.core.client.ZooKeeperInstance;
import org.apache.accumulo.core.Constants;
import org.apache.accumulo.core.client.Scanner;
import org.apache.accumulo.core.client.IteratorSetting;
import org.apache.accumulo.core.data.Key;
import org.apache.accumulo.core.data.Range;
import org.apache.accumulo.core.data.Value;
import org.apache.hadoop.io.Text;

//Accumulo client code...

//Accumulo connection
Instance instance = new ZooKeeperInstance( /* put your installation info here */ );
Connector connector = instance.getConnector(username, password);

//setup a Scanner or BatchScanner
Scanner scanner = connector.createScanner(tableName, Constants.NO_AUTHS);
Range range = new Range(new Text("rowA"), new Text("rowB"));
scanner.setRange(range);

//use a WholeRowIterator to keep rows atomic
IteratorSetting itSettings = new IteratorSetting(1, WholeRowIterator.class);
scanner.addScanIterator(itSettings);

//now read some data!
for (Entry<Key, Value> entry : scanner) {
    SortedMap<Key,Value> wholeRow = WholeRowIterator.decodeRow(entry.getKey(), entry.getValue());

    //do something with your data!

}
Run Code Online (Sandbox Code Playgroud)