文档章节

accumulo

会飞的蝌蚪
 会飞的蝌蚪
发布于 2015/04/10 18:50
字数 2845
阅读 46
收藏 0

1。介绍

Apache Accumulo的是一个高度可扩展的结构化存储,基于谷歌的BigTable。Accumulo是用Java编写的,并在Hadoop分布式文件系统 (HDFS),这是流行的Apache Hadoop项目的一部分工作。Accumulo支持高效存储和检索的结构化数据,包括查询范围,并提供支持使用Accumulo表作为输入和输出的 MapReduce作业。

Accumulo设有自动负载平衡和分区,数据压缩和细粒度的安全标签。

2。Accumulo设计

2.1。数据模型




Accumulo提供了丰富的数据模型不是简单的键 - 值存储,但不是完全的关系数据库。数据表示为键 - 值对,其中键和值是由以下元素:


Key

Value

Row ID

Column

Timestamp

Family

Qualifier

Visibility

键和值的所有元素都表示为字节数组时间戳,这是一个长期的除外。Accumulo各种键的元素和字典升序排列。时间戳以递减顺序排序,首先出现在一个连续的扫描,以便以后的版本相同的密钥。表由一组排序键 - 值对。

2.2。体系结构




accumulo是一个分布式数据存储和检索系统,因此由一些建筑元件,其中一些许多单独服务器上运行的。大部分的工作确实涉及Accumulo保持一定性能的数据,如组织,可用性和完整性,在许多商品级机。

2.3。组件




一个实例的Accumulo包括的许多TabletServers,一个垃圾收集过程中,一台主服务器和多个客户端。

2.3.1。tablet服务器

TabletServer 管理一些子集的所有片(分区表)。这包括接收从客户端中写道,坚持预写日志,写入新的键值对排序在内存中,定期冲洗排序键 - 值对HDFS中的新文件,并响应来自客户端的读取,形成一个合并排序查看所有键和值从创建和排序的内存中存储的所有文件。

TabletServers执行恢复以前的服务器失败,重新应用发现任何写在预写日志平板平板。

2.3.2。垃圾收集器

Accumulo进程将共享存储在HDFS中的文件。每隔一段时间,垃圾收集器将确定不再需要任何进程的文件,并删除它们。

2.3.3。master

是 负责检测和响应TabletServer失败的Accumulo master。它试图以平衡负载分配药片仔细和指导TabletServers的卸载片,必要时跨TabletServer的。master确保所有分片 被分配到每一个TabletServer,并处理表的创建,修改和删除请求从客户。master也协调启动,正常关机和恢复的变化的预写日志tablet 服务器时失败。

可能会运行多个master。master将选举一个作为master,其他作为备份。

2.3.4。客户

Accumulo包括链接到每一个应用程序的客户端库。客户端库包含逻辑寻找管理某个特定的平板电脑,服务器和通信与TabletServers写入和检索键 - 值对。

2.6。压实




为了管理文件,每片的数量,定期TabletServer的执行主要压实tablet内的文件,其中一些ISAM文件合并成一个文件。最终将被删除以前的文件,由垃圾收集器。这也提供了一个机会,用来彻底删除键 - 值对省略键 - 值对创建新的文件时,删除条目抑制。


2.7。拆分




当 创建一个表,它有一个平板电脑。随着表的增长,其最初的平板电脑最终分裂成两片。它可能是这些药片将迁移到另一台平板电脑服务器。如上表持续增长,及其片 剂将继续分裂和迁移。的决定是基于自动分割片剂的片剂的大小的文件。片剂分割的大小阈值配置的每个表。除了自动分裂,用户可以手动添加的分割点,用来从表 中创建新的片剂。手动分裂一个新表可以并行的读取和写入操作提供更好的初始性能,而无需等待自动分割。

当数据从表中删除,平板电脑可能会萎缩。随着时间的推移,这可能会导致空或小片。为了处理这个问题,片剂合并被引入在1.4 Accumulo。这在后面更详细讨论。

2.8。容错




如果TabletServer失败,法师检测,并自动从故障服务器分配到其他服务器重新分配片。任何键 - 值对,在内存中的时间TabletServer失败自动重新应用预写式日志,以防止丢失任何数据。

法师将协调预写日志复制到HDFS,以便提供给所有tablet服务器日志。为了使回收效率,更新在日志分组的平板电脑。注定的牌位,他们现在被分配给从排序的日志,可以快速申请TabletServers突变。

TabletServer故障都注意到法师的监控页面,通过http://master-address:50095/monitor访问的 。

图像/ failure_handling.png的

3。Accumulo shell

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> scanroot@myinstance mytable> insert row1 colf colq value1

insert successfulroot@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  jar包加到classpath下。Accumulo客户端的代码依赖于 Hadoop和Zookeeper。对于Hadoop的Hadoop的核心jar,在Hadoop的lib目录下的所有的jar,conf目录到classpath中。Zookeeper3.3,你只需要添加Zookeeper jar,或者放入Zook的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的。这些变化是由原子在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());


http://www.nosqldb.cn/1373093083484.html

© 著作权归作者所有

共有 人打赏支持
会飞的蝌蚪
粉丝 12
博文 80
码字总数 28126
作品 0
昌平
后端工程师
Apache Accumulo 1.4.4 发布,K/V 存储方案

Apache Accumulo 是一个可靠的、可伸缩的、高性能的排序分布式的 Key-Value 存储解决方案,基于单元访问控制以及可定制的服务器端处理。使用 Google BigTable 设计思路,基于 Apache Hadoop、...

oschina
2013/09/12
820
1
Apache Accumulo 1.4.3 发布,K/V 存储方案

Apache Accumulo 1.4.3 发布了,Apache Accumulo 是一个可靠的、可伸缩的、高性能的排序分布式的 Key-Value 存储解决方案,基于单元访问控制以及可定制的服务器端处理。使用 Google BigTabl...

oschina
2013/03/30
1K
1
Apache Accumulo 1.8.0 发布,K/V 存储方案

Apache Accumulo 1.8.0 发布了,Apache Accumulo 是一个可靠的、可伸缩的、高性能的排序分布式的 Key-Value 存储解决方案,基于单元访问控制以及可定制的服务器端处理。使用 Google BigTabl...

催呀催呀
2016/09/08
577
1
Apache Accumulo 1.6.4 发布,K/V 存储方案

Apache Accumulo 1.6.4 发布,这是一个最新的1.6.x系列的修复版本,修复了数据丢失的bug,推荐用户更新。 部分 bug 修复: ACCUMULO-3979 Fixed an issue where the BulkImporter failed wit...

oschina
2015/10/08
1K
2
时空大数据实践之GeoWave安装部署实践

时空大数据实践之GeoWave安装部署实践 GeoWave是由国家地理空间情报局(NGA)与RadiantBlue和Booz Allen Hamilton合作技术开发的。GeoWave是一套类库,利用分布式键值存储的可伸缩性,从而有效...

geowangsh
2016/03/07
101
0

没有更多内容

加载失败,请刷新页面

加载更多

Java中的移位运算符

国庆给自己放了个小长期二十几天,回来继续更新专栏 上一篇文章我们说了Java里的二进制,知道了计算机是以0和1来处理数据的,在阅读源码的过程中,经常会看到这些符号<< ,>>,>>>,这些符号...

SuShine
21分钟前
2
0
linux版QQ

下载地址在这 http://yun.tzmm.com.cn/index.php/s/XRbfi6aOIjv5gwj Appimage包不用做什么别的处理,安装啥的都不需要。。找到文件所在目录,终端中修改一下文件的权限 chmod 777 QQ-2017112...

悲催的古灵武士
27分钟前
1
0
咕泡-MyBatis 实用篇作业

1. Mapper在spring管理下其实是单例,为什么可以是一个单例? 首先,mapper 内部不包含 成员字段,无状态单例是安全的 另外,一直存在不用每次调用都new 一个新实例 2. MyBatis在Spring集成下...

职业搬砖20年
30分钟前
2
0
MQTT协议的初浅认识之连接建立

MQTT百科 MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布...

亚林瓜子
47分钟前
1
0
OpenStack部署都有哪些方式

对于每一个刚接触到OpenStack的新人而言,安装无疑是最困难的,同时这也客观上提高了大家学习OpenStack云计算的技术门槛。想一想,自己3年前网上偶然接触到OpenStack时,一头茫然,手动搭建一...

tututu_jiang
47分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部