通常情况下,Accumulo包含许多移动部件。即使是一个单机版的Hadoop的Accumulo需要,动物园管理员,Accumulo高手,tablet服务器等,如果你想写单元测试使用Accumulo的,你需要大量的基础设施到位之前,你的测试可以运行。
5.1。模拟Accumulo
模拟Accumulo用品大部分的客户端API模拟实现。它目前不强制用户,登录权限,等它支持迭代器和组合。请注意,MockAccumulo保存在内存中的所有数据,并不会保留任何数据或设置运行之间。
在正常情况下与Accumulo客户端的交互看起来像这样:
Instance instance = new ZooKeeperInstance(...);
Connector conn = instance.getConnector(user, passwordToken);
要与MockAccumulo互动时,只需更换ZooKeeperInstance与MockInstance:
Instance instance = new MockInstance();
事实上,你可以使用选项-假的Accumulo壳与MockAccumulo:
$ ./bin/accumulo shell --fake -u root -p ''
Shell - Apache Accumulo Interactive Shell
-
- version: 1.5
- instance name: fake
- instance id: mock-instance-id
-
- type 'help' for a list of available commands
-
root@fake> createtable test
root@fake test> insert row1 cf cq value
root@fake test> insert row2 cf cq value2
root@fake test> insert row3 cf cq value3
root@fake test> scan
row1 cf:cq [] value
row2 cf:cq [] value2
row3 cf:cq [] value3
root@fake test> scan -b row2 -e row2
row2 cf:cq [] value2
root@fake test>
当测试的Map Reduce作业,你还可以设置的的AccumuloInputFormat和AccumuloOutputFormat类的模拟Accumulo:
AccumuloInputFormat.setMockInstance(job, "mockInstance");
AccumuloOutputFormat.setMockInstance(job, "mockInstance");
5.2。mini Accumulo集群
虽然模拟Accumulo的进行单元测试的客户端API提供了一个轻量级的实施,往往是必要写更现实的终端到终端的整合利用整个生态系统的测试。的迷你Accumulo集群配置和启动饲养员,初始化Accumulo,并开始主以及一些平板电脑服务器,使这成为可能。它的运行对本地文件系统,而不必启动HDFS。
启动它,你将需要作为参数提供一个空的目录和根密码:
File tempDirectory = // JUnit and Guava supply mechanisms for creating temp directories
MiniAccumuloCluster accumulo = new MiniAccumuloCluster(tempDirectory, "password");
accumulo.start();
一旦我们有我们的小集群运行,我们将要与客户端API Accumulo:
Instance instance = new ZooKeeperInstance(accumulo.getInstanceName(), accumulo.getZooKeepers());
Connector conn = instance.getConnector("root", new PasswordToken("password"));
完成后,我们的开发代码,我们想关闭我们MiniAccumuloCluster:
accumulo.stop()
// delete your temporary folder
6。表配置
Accumulo表中有几个选项来改变默认行为,Accumulo以及存储的数据的基础上提高性能,可以配置。这些措施包括地方团体,约束,盛开的过滤器,迭代器和块缓存。
6.1。地址组
Accumulo套柱家庭支持存储在磁盘上分开,以允许客户端有效地扫描是经常一起使用,以避免扫描列家庭不要求列。地址组设置后,会自动利用扫描仪和BatchScanner操作时,他们的fetchColumnFamilies()方法用于。
默认情况下,表放置到同一个“默认”本地组的所有列家庭。随时可以配置其他地方团体通过shell或编程方式如下:
6.1.1。通过shell的管理地址组
usage: setgroups <group>=<col fam>{,<col fam>}{ <group>=<col fam>{,<col fam>}}
[-?] -t <table>
user@myinstance mytable> setgroups group_one=colf1,colf2 -t mytable
user@myinstance mytable> getgroups -t mytable
6.1.2。通过客户端API地址组管理
Connector conn;
HashMap<String,Set<Text>> localityGroups = new HashMap<String, Set<Text>>();
HashSet<Text> metadataColumns = new HashSet<Text>();
metadataColumns.add(new Text("domain"));
metadataColumns.add(new Text("link"));
HashSet<Text> contentColumns = new HashSet<Text>();
contentColumns.add(new Text("body"));
contentColumns.add(new Text("images"));
localityGroups.put("metadata", metadataColumns);
localityGroups.put("content", contentColumns);
conn.tableOperations().setLocalityGroups("mytable", localityGroups);
// existing locality groups can be obtained as follows
Map<String, Set<Text>> groups =
conn.tableOperations().getLocalityGroups("mytable");
列的家庭地址组的分配可以在任何时间改变。的物理移动到他们的新地址组的列家庭主要通过定期压实过程,发生在后台持续发生。主要压实,也可如期通过shell立即生效:
user@myinstance mytable> compact -t mytable
6.2。约束
Accumulo支持突变在插入时的约束。这可以被用来根据用户定义的策略禁止某些插入。不限突变不符合要求的约束被拒绝,并且发送回客户端。
约束可以通过设置表属性如下:
user@myinstance mytable> constraint -t mytable -a com.test.ExampleConstraint com.test.AnotherConstraint
user@myinstance mytable> constraint -l
com.test.ExampleConstraint=1
com.test.AnotherConstraint=2
目前,有没有通用的约束与Accumulo分布。新的约束条件,可以创建通过编写Java类实现org.apache.accumulo.core.constraints.Constraint接口的。
要部署一个新的约束,创建一个jar文件包含的类实施新的约束,并将其放置在lib目录的Accumulo安装。可以添加新的约束罐到Accumulo,不重新启动的情况下启动,但现有的约束类的任何改变需要重新启动Accumulo。
约束的一个例子可以发现在 accumulo/docs/examples/README.constraints相应的代码,根据 accumulo/examples/simple/main/java/accumulo/examples/simple/constraints。
6.3。Bloom过滤器
突变被应用到一个Accumulo表,每片创建几个文件。如果盛开的过滤器被启用,Accumulo将创建并加载到内存中的一个小的数据结构,以确定文件是否包含给定键在打开文件之前。这可以大大加快查找。
为了使盛开的过滤器,壳牌输入以下命令:
user@myinstance> config -t mytable -s table.bloom.enabled=true
广泛使用bloom过滤器的例子可以发现在accumulo/docs/examples/README.bloom.。
6.4。迭代器
迭代器提供了一个模块化的机制,用于将要执行的TabletServers功能进行扫描,或者数据压缩。这使用户能够有效地总结,筛选和汇总数据。事实上,内置的单元级别的安全功能和列取使用迭代器来实现。一些有用的迭代器中所提供与Accumulo和中可以找到的 org.apache.accumulo.core.iterators.user包。在每一种情况下,任何自定义的迭代器必须包括在Accumulo classpath中,通常包括一个罐子在$ ACCUMULO_HOME / lib中或 $ ACCUMULO_HOME / lib / ext目录,虽然VFS类加载器允许类路径操纵利用的各种计划,包括网址和HDFS的URI 。
6.4.1。shell设置迭代
迭代器可以配置的桌子上扫描,小型压实和/或主要压实范围。如果迭代实现的OptionDescriber接口,的setiter命令可用于交互的方式提示用户提供值给予必要的选项。
usage: setiter [-?] -ageoff | -agg | -class <name> | -regex |
-reqvis | -vers [-majc] [-minc] [-n <itername>] -p <pri>
[-scan] [-t <table>]
user@myinstance mytable> setiter -t mytable -scan -p 15 -n myiter -class com.company.MyIterator
config命令可以随时用于手动配置了Iterator不实施的OptionDescriber接口的情况下,这是非常有用的迭代器。
config -t mytable -s table.iterator.{scan|minc|majc}.myiter=15,com.company.MyIterator
config -t mytable -s table.iteartor.{scan|minc|majc}.myiter.opt.myoptionname=myoptionvalue
6.4.2。设置迭代编程方式
scanner.addIterator(new IteratorSetting(
15, // priority
"myiter", // name this iterator
"com.company.MyIterator" // class name
));
一些迭代器从客户端代码需要额外的参数,如下面的例子:
IteratorSetting iter = new IteratorSetting(...);
iter.addOption("myoptionname", "myoptionvalue");
scanner.addIterator(iter)
表支持独立的迭代器设置被应用在扫描时轻微压实后,而主要压实。对于大多数用途,表格将具有相同的所有三个迭代器设置,以避免不一致的结果。
6.4.3。版本迭代器和时间戳
Accumulo提供版本的数据管理能力,通过使用时间戳内的关键。由客户端创建的关键,如果没有指定一个时间戳,然后系统将设置时间戳为当前时间。两个键具有相同的ROWID列,但不同的时间戳被认为是两个版本的相同的密钥。如果两个插入相同的ROWID,列和时间戳制成accumulo的,则行为是不确定性。
时间戳以递减顺序排序,最新的数据是第一位的。accumulo可以配置为返回前k个版本,或版本高于给定的日期。默认是返回一个最新版本。
是可以改变的通过改变VersioningIterator选项如下的表的版本政策:
user@myinstance mytable> config -t mytable -s table.iterator.scan.vers.opt.maxVersions=3
user@myinstance mytable> config -t mytable -s table.iterator.minc.vers.opt.maxVersions=3
user@myinstance mytable> config -t mytable -s table.iterator.majc.vers.opt.maxVersions=3
创建表时,默认情况下,它的配置,使用VersioningIterator和保持一个版本。可以创建一个表不VersioningIterator NDI选项在shell。的Java API还具有以下的方法
connector.tableOperations.create(String tableName, boolean limitVersion)
逻辑时间
Accumulo 1.2引入逻辑时间的概念。这确保由accumulo设置时间戳永远向前。这将有助于避免出现问题由TabletServers引起不同的时间设置。每片计数器时间邮票每一个突变的基础上给出了独特的一。当使用时间以毫秒为单位,如果两件事情同一毫秒内到达,然后都收到相同的时间戳。当使用时间(以毫秒为单位),将accumulo设定的时间始终前进,永不后退。
表可以配置为使用逻辑在创建时的时间戳如下:
user@myinstance> createtable -tl logical
删除
删除特殊键accumulo得到沿将所有其他数据排序。当删除键被插入时,accumulo将不显示任何有时间戳小于或等于删除键。在主要压实,年纪比任何键删除键被省略创建的新文件,并省略键作为正规的垃圾收集过程的一部分从磁盘上删除。
6.4.4。过滤器
键-值对的一组扫描时,它是通过一个过滤器的使用,可以将任意的过滤策略。过滤器是只返回键-值对满足过滤逻辑的迭代器类型。Accumulo有几个内置的过滤器,可以配置任何表:ColumnAgeOff AgeOff,时间戳,NoVis,和正则表达式。可以添加更多通过编写一个Java类扩展 org.apache.accumulo.core.iterators.Filter类。
该AgeOff过滤器可以被配置为删除的数据比目标日期或一个固定的时间量从本。下面的例子设置一个表中删除插入超过30秒前的一切:
user@myinstance> createtable filtertest
user@myinstance filtertest> setiter -t filtertest -scan -minc -majc -p 10 -n myfilter -ageoff
AgeOffFilter removes entries with timestamps more than <ttl> milliseconds old
----------> set org.apache.accumulo.core.iterators.user.AgeOffFilter parameter
negate, default false keeps k/v that pass accept method, true rejects k/v
that pass accept method:
----------> set org.apache.accumulo.core.iterators.user.AgeOffFilter parameter
ttl, time to live (milliseconds): 3000
----------> set org.apache.accumulo.core.iterators.user.AgeOffFilter parameter
currentTime, if set, use the given value as the absolute time in milliseconds
as the current time of day:
user@myinstance filtertest>
user@myinstance filtertest> scan
user@myinstance filtertest> insert foo a b c
user@myinstance filtertest> scan
foo a:b [] c
user@myinstance filtertest> sleep 4
user@myinstance filtertest> scan
user@myinstance filtertest>
看到一个表的迭代器设置,使用方法:
user@example filtertest> config -t filtertest -f iterator
---------+---------------------------------------------+------------------
SCOPE | NAME | VALUE
---------+---------------------------------------------+------------------
table | table.iterator.majc.myfilter .............. | 10,org.apache.accumulo.core.iterators.user.AgeOffFilter
table | table.iterator.majc.myfilter.opt.ttl ...... | 3000
table | table.iterator.majc.vers .................. | 20,org.apache.accumulo.core.iterators.VersioningIterator
table | table.iterator.majc.vers.opt.maxVersions .. | 1
table | table.iterator.minc.myfilter .............. | 10,org.apache.accumulo.core.iterators.user.AgeOffFilter
table | table.iterator.minc.myfilter.opt.ttl ...... | 3000
table | table.iterator.minc.vers .................. | 20,org.apache.accumulo.core.iterators.VersioningIterator
table | table.iterator.minc.vers.opt.maxVersions .. | 1
table | table.iterator.scan.myfilter .............. | 10,org.apache.accumulo.core.iterators.user.AgeOffFilter
table | table.iterator.scan.myfilter.opt.ttl ...... | 3000
table | table.iterator.scan.vers .................. | 20,org.apache.accumulo.core.iterators.VersioningIterator
table | table.iterator.scan.vers.opt.maxVersions .. | 1
---------+---------------------------------------------+------------------
6.4.5。Combiners
Accumulo允许合路器上配置表和列家庭。合当它应用于跨股份ROWID列家庭和列预选赛任何键关联的值。这是类似MapReduce的减少步骤,应用一些函数与特定键相关联的所有的值。
例如,如果一个加法组合器被配置在桌子上,以下的突变,插入
Row Family Qualifier Timestamp Value
rowID1 colfA colqA 20100101 1
rowID1 colfA colqA 20100102 1
该表将反映只有一个总价值:
rowID1 colfA colqA - 2
合路器可以使用一个表的setiter在shell命令启用。下面就是一个例子。
root@a14 perDayCounts> setiter -t perDayCounts -p 10 -scan -minc -majc -n daycount -class org.apache.accumulo.core.iterators.user.SummingCombiner
TypedValueCombiner can interpret Values as a variety of number encodings
(VLong, Long, or String) before combining
----------> set SummingCombiner parameter columns,
<col fam>[:<col qual>]{,<col fam>[:<col qual>]} : day
----------> set SummingCombiner parameter type, <VARNUM|LONG|STRING>: STRING
root@a14 perDayCounts> insert foo day 20080101 1
root@a14 perDayCounts> insert foo day 20080101 1
root@a14 perDayCounts> insert foo day 20080103 1
root@a14 perDayCounts> insert bar day 20080101 1
root@a14 perDayCounts> insert bar day 20080101 1
root@a14 perDayCounts> scan
bar day:20080101 [] 2
foo day:20080101 [] 2
foo day:20080103 [] 1
Accumulo包括一些有用的组合器开箱。要找到这些看看在org.apache.accumulo.core.iterators.user包。
可以添加额外的合路,通过创建一个Java类,延长 org.apache.accumulo.core.iterators.Combiner的加入一罐含有该类到Accumulo的lib / ext目录。
一个合成器的一个例子,可以发现
accumulo/examples/simple/main/java/org/apache/accumulo/examples/simple/combiner/StatsCombiner.java
6.5。块缓存
为了增加吞吐量的常用访问的条目,,采用了Accumulo块缓存。此块缓存缓冲区内存中的数据,因此,它并没有被读出的磁盘。的RFile格式Accumulo喜欢的组合索引块和数据块,索引块是用来寻找相应的数据块。典型的查询Accumulo结果在多个索引块的二进制搜索,然后通过线性扫描的一个或多个数据块。
块缓存可配置每一个表的基础上,在平板电脑上的服务器共享一个单一的资源池和所有药片托管。要配置tablet服务器的块高速缓存的大小,设置以下属性:
tserver.cache.data.size:指定的高速缓存文件的数据块的大小。
tserver.cache.index.size:指定文件索引的缓存的大小。
要启用的块缓存表,设置以下属性:
table.cache.block.enable:确定是否启用文件(数据)块缓存。
table.cache.index.enable:确定是否启用索引缓存。
块缓存可以有一个显着的效果,对缓解热点问题,以及减少查询延迟。它是默认启用的元数据表。
6.6。压实
当数据被写入到Accumulo缓存在内存中。缓冲在存储器中的数据最终被写入到HDFS上每片为基础。文件也可以直接向片批量导入。tablet服务器在后台运行多个文件合并成一个主要的压实。tablet服务器来决定哪片紧凑,平板电脑内的文件压缩。作出这一决定是使用压缩率,这是每一个表的基础上进行配置。要配置这个比例修改下列属性:
table.compaction.major.ratio
增加这一比例将导致更多的文件每片和压实工作。更多文件每片意味着更高的查询延迟。因此,调整这个比例是一个权衡之间采集和查询性能。缺省值为3的比例。
的比率的工作方式是,一组文件被压缩到一个文件中,如果组中的文件的大小的总和是大于集合中的最大文件的大小的比值乘以。如果这是不是真正的平板电脑中的所有文件集,最大的文件被删除考虑,剩余的文件被认为是压实。这是重复,直到压实被触发或有考虑留下任何文件。
tablet服务器用来运行主要压实的后台线程的数量是可配置的。要配置此修改以下属性:
tserver.compaction.major.concurrent.max
此外,tablet服务器使用小型压实的线程数是可配置的。要配置此修改以下属性:
tserver.compaction.minor.concurrent.max
正在运行和排队的主要和次要的压实的数字可见的Accumulo显示器页面。这可以让你看到,如果压实备份和上面的设置都需要调整。调整时可用的线程数,压实,考虑如地图和减少节点上运行的内核和其它任务的数量。
重大压实如果没有跟上,那么的文件每片数将增长到一个点查询性能开始受到影响。来处理这种情况的一种方法是,以增加压缩比。例如,如果压缩比被设置为1,则每一个新的文件中添加一个平板轻微压实立即队列主要压实片剂。因此,如果平板电脑拥有一个200M的文件和小型压实写入一个1M的文件,那么主要的压实试图合并200M和1M的文件。如果平板电脑服务器有很多片剂试图做这样的事情,那么主要的压实将备份和文件每片的数量将开始增长,假设数据被连续写入。增加压实比例将缓解备份通过降低主要压实工作需要做。
另一个选项来处理每片种植的文件太大调整以下属性:
table.file.max
当平板电脑达到这个数字刷新其内存中的数据保存到磁盘文件和需要,它会选择做一个合并轻微压实。合并轻微压实,将平板电脑的最小文件合并轻微压缩时间在内存中的数据。因此,文件的数量不会超过这个限制增长。这将使小压实需要更长的时间,这将导致摄取性能下降。这可能会导致摄取放慢主要压实,直到有足够的时间赶上。当调整此属性,也考虑调整压缩率。理想的情况下,合并轻微的压实永远需要发生重大压实会跟上。配置文件最大和压实比只合并发生轻微压实和主要压实从未发生,这是可能的。只因为这样做合并小压实导致O(Ñ 2)要做的工作,这应该被避免。主要压实完成的工作量是ø(N *日志ŗ(N)),其中 ŗ是压缩率。
一个表可以手动进行压实。要启动一个小的压实,使用flush在shell命令。要发起一个重大的压实,使用外壳紧凑命令。紧凑的命令将压缩到一个文件中的一个表中的所有片。即使同一个文件的平板电脑将被压缩。一个主要压实过滤器被配置为一个表的情况下,这是有用的。以1.4的压缩能力的范围内的一个表中的溶液。要使用此功能指定启动停止紧凑命令行。这将只压缩片重叠在给定的行范围。
6.7。预拆分表
将平衡Accumulo跨服务器和分发表。表之前,变大时,它会保持在单个服务器上作为一个单一的片剂。这限制了在该数据可以被添加或查询的单个节点的速度的速度。为了提高性能,当一个表是新的,还是小的,你可以添加分割点,产生新的平板电脑。
在shell:
root@myinstance> createtable newTable
root@myinstance> addsplits -t newTable g n t
这将创建一个新的表4粒。该表将被分割的字母“G”,“N”,“T”,这将很好地工作,如果该行数据与小写字母字符开始。如果你的行数据包括二进制信息或数字信息,或者如果行信息的分布是不平坦的,那么你会选择不同的分割点。现在采集和查询可以进行4个节点可以提高性能。
6.8。合并片
随着时间的推移,一个表可以得到非常大,如此之大,它有数百成千上万的分割点。一旦有足够的片蔓延在整个集群中的一个表,额外的分裂可能不会提高性能,可能会造成不必要的簿记。数据的分布可能会随时间而改变。例如,如果行数据包含了最新的信息和数据的不断增加和删除,以维持目前的信息的一个窗口,为老年人行的药片可能是空的。
accumulo支持片剂合并,它可以被用来减少分割点的数目。下面的命令将所有行合并从“A”到“Z”成一个单一的平板电脑:
root@myinstance> merge -t myTable -s A -e Z
如果一个合并的结果产生一个大于配置的分割大小的片剂,片剂可能会被分割由数位板服务器。肯定会增加平板电脑大小的任何合并前,如果我们的目标是有较大的药片:
root@myinstance> config -t myTable -s table.split.threshold=2G
为了合并小药片,你可以问accumulo合并部分小于给定大小的表。
root@myinstance> merge -t myTable -s 100M
缺省情况下,小片将不会被合并到已经大于给定大小的片剂。这可以离开孤立的小药片。要强制合并成较大的片小药片使用“ - {} - force”选项:
root@myinstance> merge -t myTable -s 100M --force
合并分片上一节的时间。如果你的表中包含许多部分小分割点,或正在试图改变分割整个表的大小,这将是更快地分割点设置和合并整个表:
root@myinstance> config -t myTable -s table.split.threshold=256M
root@myinstance> merge -t myTable
6.9。删除范围
考虑索引方案使用最新的信息在每一行。例如“20110823-15:20:25.013的可能会对指定的日期和时间的行。在某些情况下,我们可能会喜欢这个日期的基础上删除行说,删除所有的数据比当年旧。Accumulo支持删除操作,有效地消除两行之间的数据。例如:
root@myinstance> deleterange -t myTable -s 2010 -e 2011
这将删除所有以“2010”开始的行,它会停在“2011”开始的任何行。您可以删除任何数据,2011年之前:
root@myinstance> deleterange -t myTable -e 2011 --force
外壳不会允许你删除一个无限的范围内(不启动),除非你提供的“ - {} - force”选项。
范围的删除是通过使用在给定的开始/结束位置的分割,而且会影响在表中的分割的数目。
6.10。克隆表
可以创建一个新的表指向现有的表的数据。这是一个非常快的元数据操作,实际上没有数据复制。克隆表和源表可��改变独立后的克隆操作。这个功能的一个用例的测试。例如,测试一个新的过滤迭代器,克隆表,添加过滤器的克隆,并迫使主要压实。要执行测试数据较少,克隆一个表,然后使用删除范围,有效地去除很多从克隆的数据。另一个用例生成一个快照,防范人为错误。要创建一个快照,克隆一个表,然后禁止克隆的写权限。
克隆操作将指向源表的文件。这就是为什么flush选项默认情况下,在shell中存在并已启用。如果冲洗选项未启用,那么任何数据源表目前已在内存不存在克隆。
克隆表复制源表中的配置。然而,源表中的权限不会被复制到克隆。创建克隆后,只有用户创建克隆可以读取和写入。
在以下示例中,我们可以看到,克隆操作之后插入的数据是不可见的克隆。
root@a14> createtable people
root@a14 people> insert 890435 name last Doe
root@a14 people> insert 890435 name first John
root@a14 people> clonetable people test
root@a14 people> insert 890436 name first Jane
root@a14 people> insert 890436 name last Doe
root@a14 people> scan
890435 name:first [] John
890435 name:last [] Doe
890436 name:first [] Jane
890436 name:last [] Doe
root@a14 people> table test
root@a14 test> scan
890435 name:first [] John
890435 name:last [] Doe
root@a14 test>
du命令在shell中显示一个表被使用在HDFS多少空间。此命令也可以显示在HDFS中有多少空间重叠的两个克隆表。在下面的例子都显示表CI是使用428M。CI是克隆CIC和du表明这两个表共享428M。经过三个条目插入CIC和其满脸通红,都显示了这两个表仍然共享428M,但中投公司本身有226个字节。最后,表CIC被压实,然后杜表明,每个表使用428M。
root@a14> du ci
428,482,573 [ci]
root@a14> clonetable ci cic
root@a14> du ci cic
428,482,573 [ci, cic]
root@a14> table cic
root@a14 cic> insert r1 cf1 cq1 v1
root@a14 cic> insert r1 cf1 cq2 v2
root@a14 cic> insert r1 cf1 cq3 v3
root@a14 cic> flush -t cic -w
27 15:00:13,908 [shell.Shell] INFO : Flush of table cic completed.
root@a14 cic> du ci cic
428,482,573 [ci, cic]
226 [cic]
root@a14 cic> compact -t cic -w
27 15:00:35,871 [shell.Shell] INFO : Compacting table ...
27 15:03:03,303 [shell.Shell] INFO : Compaction of table cic completed for given range
root@a14 cic> du ci cic
428,482,573 [ci]
428,482,612 [cic]
root@a14 cic>
6.11。表导出
Accumulo支持导出表的表复制到另一个集群的目的。导出和导入表保留表配置,分裂,和逻辑的时间。表导出,然后复制通过的hadoop distcp命令。要导出表,它必须是离线和保持脱机而discp运行的。它需要保持脱机状态的原因是为了防止文件被删除。表可以克隆和克隆脱机序,以避免失去对表的访问。参见DOCS /例子/ README.export一个例子。