Apache Accumulo用户手册(2)

Accumulo提供了一个简单的shell,可以用来检查表的内容和配置设置,插入/更新/删除值,更改配置设置。

外壳可以开始下面的命令:

$ACCUMULO_HOME/bin/accumulo shell -u [username]

shell会提示输入相应的密码到指定的用户名,然后显示以下提示:

Shell - Apache Accumulo Interactive Shell

-

- version 1.5

- instance name: myinstance

- instance id: 00000000-0000-0000-0000-000000000000

-

- type 'help' for a list of available commands

-

3.1。基本管理

Accumulo shell可以用来创建和删除表,以及配置表和实例的具体选项。

root@myinstance> tables

!METADATA

root@myinstance> createtable mytable

root@myinstance mytable>

root@myinstance mytable> tables

!METADATA

mytable

root@myinstance mytable> createtable testtable

root@myinstance testtable>

root@myinstance testtable> deletetable testtable

root@myinstance>

壳牌也可以用来插入更新和扫描表。这是非常有用的检查表。

root@myinstance mytable> scan

root@myinstance mytable> insert row1 colf colq value1

insert successful

root@myinstance mytable> scan

row1 colf:colq [] value1

括号内的数值“[]”的知名度标签。由于没有被使用,这是该行空。您可以使用“-ST”扫描到细胞内,也看到时间戳选项。

3.2。表维护

compact命令指示Accumulo安排巩固和删除哪些文件项被删除的表压实。

root@myinstance mytable> compact -t mytable

07 16:13:53,201 [shell.Shell] INFO : Compaction of table mytable

scheduled for 20100707161353EDT

该flush命令指示Accumulo写当前内存中的所有条目,对于一个给定的表到磁盘。

root@myinstance mytable> flush -t mytable

07 16:14:19,351 [shell.Shell] INFO : Flush of table mytable

initiated...

3.3。用户管理

shell可用于添加,删除,并授予用户特权。

root@myinstance mytable> createuser bob

Enter new password for 'bob': *********

Please confirm new password for 'bob': *********

root@myinstance mytable> authenticate bob

Enter current password for 'bob': *********

Valid

root@myinstance mytable> grant System.CREATE_TABLE -s -u bob

root@myinstance mytable> user bob

Enter current password for 'bob': *********

bob@myinstance mytable> userpermissions

System permissions: System.CREATE_TABLE

Table permissions (!METADATA): Table.READ

Table permissions (mytable): NONE

bob@myinstance mytable> createtable bobstable

bob@myinstance bobstable>

bob@myinstance bobstable> user root

Enter current password for 'root': *********

root@myinstance bobstable> revoke System.CREATE_TABLE -s -u bob

4。写作Accumulo客户端

4.1。运行客户端代码

有多种方式运行的Java代码使用Accumulo的。下面列出的不同的方式来执行客户端代码。

使用Java可执行文件

使用accumulo脚本

使用该工具的脚本

为了运行客户端代码编写对Accumulo运行,您将需要包括罐子Accumulo取决于你的classpath。Accumulo客户端的代码依赖于Hadoop和饲养员。对于Hadoop的Hadoop的核心罐子,在Hadoop的lib目录下的所有的罐子,conf目录到classpath中。饲养员3.3,你只需要添加饲养员罐,也不是什么在饲养员的lib目录。您可以运行下面的命令上的配置Accumulo系统,看看有什么使用它的类路径。

$ACCUMULO_HOME/bin/accumulo classpath

运行你的代码的另一种选择是把一个jar文件 $ ACCUMULO_HOME / lib / ext目录。这样做后,你可以使用accumulo的脚本来执行你的代码。例如,如果你创建一个jar含有类com.foo.Client,放置在lib / ext目录,那么你可以使用命令 $ ACCUMULO_HOME / bin中/ accumulo com.foo.Client的执行代码。

如果你正在写的地图减少,访问Accumulo,那么你可以使用的bin / tool.sh的脚本来运行这些作业的工作。查看地图减少的例子。

4.2。连

所有客户端必须先识别Accumulo例如,他们将进行通信。做到这一点的代码如下:

String instanceName = "myinstance";

String zooServers = "zooserver-one,zooserver-two"

Instance inst = new ZooKeeperInstance(instanceName, zooServers);

Connector conn = inst.getConnector("user", "passwd");

4.3。写入数据

通过创建对象代表所有更改的列单排突变数据写入到Accumulo的。这些变化是由原子在TabletServer。客户端,然后将它提交给适当的TabletServers到BatchWriter突变。

突变可以创建这样的:

Text rowID = new Text("row1");

Text colFam = new Text("myColFam");

Text colQual = new Text("myColQual");

ColumnVisibility colVis = new ColumnVisibility("public");

long timestamp = System.currentTimeMillis();

Value value = new Value("myValue".getBytes());

Mutation mutation = new Mutation(rowID);

mutation.put(colFam, colQual, colVis, timestamp, value);

4.3.1。BatchWriter

高度优化的BatchWriter送突变的多个TabletServers和自动批次突变摊销网络开销相同TabletServer注定。必须小心避免的任何传递给BatchWriter对象改变的内容,因为它保持内存中的对象,而配料。

添加到BatchWriter突变是这样的:

long memBuf = 1000000L; // bytes to store before sending a batch

long timeout = 1000L; // milliseconds to wait before sending

int numThreads = 10;

BatchWriter writer =

conn.createBatchWriter("table", memBuf, timeout, numThreads)

writer.add(mutation);

writer.close();

一个例子可以发现在使用批处理写 accumulo/docs/examples/README.batch

4.4。读取数据

Accumulo优化,快速检索与给定键关联的值,并有效返回连续键及其关联值范围。

4.4.1。扫描器

检索数据,客户端使用扫描仪,它的作用像一个迭代器键和值。扫描仪可以被配置在特定的键来启动和停止,并返回可用的列的一个子集。

// specify which visibilities we are allowed to see

Authorizations auths = new Authorizations("public");

Scanner scan =

conn.createScanner("table", auths);

scan.setRange(new Range("harry","john"));

scan.fetchFamily("attributes");

for(Entry<Key,Value> entry : scan) {

String row = entry.getKey().getRow();

Value value = entry.getValue();

}

4.4.2。隔离式扫描仪

Accumulo支持能力提出了一个孤立的观点的行扫描时。有三种可能的方式,行可能会改变accumulo:

一个突变应用于一个表

或大或小的压实的一部分执行的迭代器

批量导入新文件

隔离担保,所有这些操作的行上所做的更改或无被看见。使用IsolatedScanner孤立的观点的一个accumulo表取得。当使用常规的扫描仪,它是可以看到一排的非孤立的观点。例如,如果一个突变修改分三路,它可能是你只会看到两个修改。对于隔离扫描仪要么全部三个的变化被视为或无。

该IsolatedScanner缓冲行客户端上的,所以不会大排平板服务器崩溃。默认情况下,行缓存在内存中,但用户可以方便地提供自己的缓冲区,如果他们想缓冲到磁盘时行大。

举一个例子,看看

examples/simple/src/main/java/org/apache/accumulo/examples/simple/isolation/InterferenceTest.java

4.4.3。BatchScanner

对于某些类型的访问,它是更有效的同时检索几个范围。出现这种情况,当访问一组不连续的行,其ID已检索,例如从二级索引。

类似该BatchScanner配置到扫描器,它可以被配置为检索可用的列的一个子集,但是,而不是通过一个单一的范围,BatchScanners接受一组范围。重要的是要注意,键由BatchScanner返回键以排序的顺序,因为流式传输是从多个TabletServers平行。

ArrayList<Range> ranges = new ArrayList<Range>();

// populate list of ranges ...

BatchScanner bscan =

conn.createBatchScanner("table", auths, 10);

bscan.setRanges(ranges);

bscan.fetchFamily("attributes");

for(Entry<Key,Value> entry : scan)

System.out.println(entry.getValue());

一个例子可以发现在accumulo/docs/examples/README.batch

4.5。代理

代理API允许Java以外的语言与Accumulo互动。在代码库中提供代理服务器和一个客户端可以进一步产生。

4.5.1。Prequisites

代理服务器可以住在任何节点上的基本客户端API将工作。这意味着它必须是能够沟通的法师,饲养员,NameNode的数据节点。代理客户端只需要与代理服务器进行通信的能力。

4.5.2。组态

代理服务器的配置选项里面住的属性文件。最起码,你需要提供以下属性:

protocolFactory=org.apache.thrift.protocol.TCompactProtocol$Factory

tokenClass=org.apache.accumulo.core.client.security.tokens.PasswordToken

port=42424

instance=test

zookeepers=localhost:2181

在你的发行版,你可以找到一个示例配置文件:

$ACCUMULO_HOME/proxy/proxy.properties

这个配置文件示例演示备份代理服务器由MockAccumulo或MiniAccumuloCluster的的abilty。

4.5.3。运行代理服务器

控股配置属性文件创建后,代理服务器就可以开始在Accumulo分布(假设你的属性文件被命名为config.properties中)使用以下命令:

$ACCUMULO_HOME/bin/accumulo proxy -p config.properties

4.5.4。创建一个代理客户端

除了安装旧货编译的,你还需要生成客户端代码,语言旧货安装特定语言的库。通常情况下,您的操作系统的软件包管理器就能自动安装这些你在预期的位置,如目录/ usr / lib中/蟒蛇/节��的site-packages /。

你可以找到节俭文件生成客户端:

$ACCUMULO_HOME/proxy/proxy.thrift

生成客户端后,在上述的配置属性指定的端口将被用来连接到服务器。

4.5.5。使用代理客户端

下面的例子已经写在Java和方法签名可能旧货编译器生​​成客户端时指定的语言不同而略有差别。在初始化一个连接到代理服务器(Apache旧货的文件连接到旧货服务的例子),代理客户机上的方法将可用。要做的第一件事就是登录:

Map password = new HashMap<String,String>();

password.put("password", "secret");

ByteBuffer token = client.login("root", password);

登录后,返回的令牌将被使用到客户端的后续调用。让我们创建一个表,添加一些数据,表扫描,并删除它。

首先,创建一个表。

client.createTable(token, "myTable", true, TimeType.MILLIS);

接下来,添加一些数据:

// first, create a writer on the server

String writer = client.createWriter(token, "myTable", new WriterOptions());

// build column updates

Map<ByteBuffer, List<ColumnUpdate> cells> cellsToUpdate = //...

// send updates to the server

client.updateAndFlush(writer, "myTable", cellsToUpdate);

client.closeWriter(writer);

扫描数据和批处理的服务器上返回的结果:

String scanner = client.createScanner(token, "myTable", new ScanOptions());

ScanResult results = client.nextK(scanner, 100);

for(KeyValue keyValue : results.getResultsIterator()) {

// do something with results

}

client.closeScanner(scanner);

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/753c1be125241f6c8c185f9881149af8.html