Apache Accumulo用户手册(5)

9。Google Analytics(分析) 

Accumulo支持更先进的数据处理不是简单的保持按键的排序和执行高效的查找。Google Analytics(分析)可以开发使用MapReduce和配合Accumulo表中的迭代器。

9.1。MapReduce的

Accumulo表可以作为MapReduce作业的源和目标。与MapReduce作业要使用Accumulo的表(特别是新的Hadoop的API版本0.20),作业参数配置,使用AccumuloInputFormat AccumuloOutputFormat。通过这两种格式类Accumulo具体参数可以设置,做到以下几点:


输入验证并提供用户凭据


限制扫描一定范围的行


限制输入可用列的一个子集

9.1.1。mapper和reducer类


要阅读从Accumulo表与下面的类的参数,并创建一个映射请务必配置AccumuloInputFormat的。


class MyMapper extends Mapper<Key,Value,WritableComparable,Writable> {

public void map(Key k, Value v, Context c) {

// transform key and value data here

}

}


要写入一个Accumulo表,与下面的类的参数,并创建一个减速请务必配置AccumuloOutputFormat的。从减速机发射的关键标识被发送到的表的突变。这允许一个单一的减速写信给一个以上的表,如果需要的。一个默认的表可以使用AccumuloOutputFormat配置,在这种情况下,在输出表的名称没有被传递到减速机内的上下文对象。


class MyReducer extends Reducer<WritableComparable, Writable, Text, Mutation> {

public void reduce(WritableComparable key, Iterable<Text> values, Context c) {

Mutation m;

// create the mutation based on input key and value

c.write(new Text("output-table"), m);

}

}


通过为输出文本对象应包含表的名称应采用这种突变。文本可以是空的,在这种情况下,突变将被应用到默认指定表名在AccumuloOutputFormat股权。


9.1.2。AccumuloInputFormat选择

Job job = new Job(getConf());

AccumuloInputFormat.setInputInfo(job,

"user",

"passwd".getBytes(),

"table",

new Authorizations());

AccumuloInputFormat.setZooKeeperInstance(job, "myinstance",

"zooserver-one,zooserver-two");


可选设置:


Accumulo限制到一组行范围:


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

// populate array list of row ranges ...

AccumuloInputFormat.setRanges(job, ranges);


accumulo限制到一个列表的列:


ArrayList<Pair<Text,Text>> columns = new ArrayList<Pair<Text,Text>>();

// populate list of columns

AccumuloInputFormat.fetchColumns(job, columns);


使用正则表达式来匹配行IDs:


AccumuloInputFormat.setRegex(job, RegexType.ROW, "^.*");


9.1.3. AccumuloOutputFormat options


boolean createTables = true;

String defaultTable = "mytable";

AccumuloOutputFormat.setOutputInfo(job,

"user",

"passwd".getBytes(),

createTables,

defaultTable);

AccumuloOutputFormat.setZooKeeperInstance(job, "myinstance",

"zooserver-one,zooserver-two");


可选设置:


AccumuloOutputFormat.setMaxLatency(job, 300); // milliseconds

AccumuloOutputFormat.setMaxMutationBufferSize(job, 5000000); // bytes


一个示例使用MapReduce和Accumulo可以发现accumulo/docs/examples/README.mapred

d


9.2。合路


许多应用程序都可以从中受益的能力,总价值跨越常用键。这是可以做到通过合路器的迭代器,和类似的减少MapReduce的步骤。这提供了定义在线增量更新的分析能力,没有面向批处理的MapReduce作业相关的开销或延迟。


所有这一切都需要一个表的总价值来识别字段值将被分组,插入突变与这些领域的关键,组合迭代器支持所需的总结操作和配置表。


结合迭代的唯一限制是,组合开发人员不应该承担所有的值给定键已经看到,由于新的突变可以随时插入。这排除了如计算平均值时,例如在聚合中使用的值的总数。


9.2.1。特征向量


相结合的迭代器范围内Accumulo的表的一个有趣的用途是存储用于在机器学习算法的特征矢量。例如,许多算法,如k-means聚类,支持向量机,异常检测等使用特征向量的概念和计算距离度量学习一个特定的模式。可用于列中一个Accumulo表中有效地存储稀疏特征和他们的重量,以通过使用一个组合的迭代器进行增量更新。


9.3。统计建模


需要更新,由多台机器上并行的统计模型,可以类似地存储范围内Accumulo表。例如,可以有一个MapReduce的工作是一个全球性的统计模型迭代更新每个地图,或降低了工作人员的工作参考通过一个嵌入式Accumulo的客户端被读取和更新的模型零件的。


使用Accumulo这样小块的信息,在随机存取模式,这是相辅相成的MapReduce的顺序访问模式实现高效,快速的查找和更新。


10。安全

Accumulo延伸BigTable的数据模型来实现的安全机制被称为单元级别的安全。每一个键 - 值对都有自己的安全标签,存储的密钥,该密钥是用来确定一个给定的用户是否满足安全要求的值读列下的可见性元素。这使得数据被存储在同一行内的多种安全级别,以及不同程度的访问相同的表查询的用户,同时保持数据的机密性。


10.1。安全标签表达式


当突变的应用,用户可以指定一个安全标签的每个值。这样做是通过一个ColumnVisibility对象的put()方法创建的突变:


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");

Mutation mutation = new Mutation(rowID);

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


10.2。安全标签表达式语法


防伪标签由一组所需要的值读标签是与用户定义的令牌。可以指定所需的令牌的集合,支持的令牌的逻辑“与”和“或”的组合,以及嵌套组的令牌一起使用的语法。


例如,假设在我们的组织,我们希望我们的数据值标签防伪标签用户角色定义。我们可能已经令牌,如:


管理员

审计

系统


这些可以单独指定,或结合使用逻辑运算符:


/ /用户必须具有管理员权限:

管理员


/ /用户必须具有管理员和审核权限

管理审计


/ / admin或审计权限的用户

管理|审计


/ /用户必须具有审计和管理员或系统中的一个或两个

(管理系统)及审计


当| 与运营商的使用,必须使用括号来指定优先级的运算符。


10.3。授权


当客户端试图读取数据从Accumulo,任何防伪标签进行检查对集时扫描仪或BatchScanner的创建通过客户端代码的授权。如果授权被确定为不足,以满足安全标签,该值被抑制结果发送回给客户端的一组。


指定授权用户拥有令牌作为一个逗号分隔的列表:


// user possesses both admin and system level access

Authorization auths = new Authorization("admin","system");

Scanner s = connector.createScanner("table", auths);


10.4。用户授权


每个accumulo用户具有一组相关联的安全性标签。要操纵这些在shell中使用setuaths和getauths命令。这些也可以使用java安全操作API修改。


当用户创建了一个扫描仪,通过一组授权。如果传递到扫描仪的授权用户授权的一个子集,然后将抛出一个异常。


为了防止用户写他们无法读取数据,添加的知名度约束到表中。使用EVC选项的CREATETABLE shell命令启用此约束。对于现有的表使用下面的shell命令到启用的知名度约束。确保约束不与任何现有的约束冲突。


config -t table -s table.constraint.1=org.apache.accumulo.core.security.VisibilityConstraint


ALTER TABLE权限的任何用户可以添加或删除此约束。此约束并不适用于大容量导入数据,如果这是一个关注,然后禁用批量的进口许可。


10.5。安全授权处理


对于许多用户提供服务的应用程序,它并不期望将创建一个accumulo用户,每个应用程序用户。在这种情况下,任何的应用程序的用户所需要的所有授权的accumulo用户必须被创建。服务查询,应用程序应该创建一个扫描仪应用程序用户的授权。这些授权可以得到可信的第三方。


生产系统通常将整合公共密钥基础设施(PKI)和指定的客户端代码在查询使用PKI服务器层进行谈判,以验证用户身份并获取授权令牌(凭据)。这要求用户指定所必需的信息,来验证自己的系统。用户身份一旦建立,他们的凭据可以访问客户端代码及用户之所及之外传递给Accumulo,。


10.6。查询服务层


由于的主要方法的互动与Accumulo是通过Java API,生产环境中经常调用的执行查询层。这可以通过在容器中使用Web服务的Apache Tomcat这样的,但不是必需的。查询服务层提供面向用户的应用程序可以建立一个平台,提供了一种机制。这允许应用程序设计者隔离潜在的复杂的查询逻辑,并执行基本的安全功能提供了一种方便点。


一些生产环境,选择在这一层,用户标识符用于检索的访问凭据,然后缓存在查询层,并提交到Accumulo通过授权机制来实现认证。


通常情况下,查询服务层位于在Accumulo和用户工作站之间。


11。管理

11.1。硬件


因为我们正在运行的基本上是两个或三个同时整个集群分层系统:HDFS,Accumulo和MapReduce,这是典型的由4至8核心,8到32 GB RAM的硬件。这是这样每个正在运行的过程中可以有至少一个芯和2 - 4 GB的。


运行HDFS的核心之一,通常可以保持2至4个磁盘忙,所以每台机器可能通常为2×300GB硬盘和多达4个1TB或2TB磁盘。


低于这一标准,如与1U服务器2芯和4GB每个是可以做到的,但在这种情况下,建议只运行每台机器上的两个过程 - 即的DataNode和TabletServer的或的DataNode和MapReduce的工人,但不所有三个。这里的约束是有足够的可用堆空间,一台机器上的所有进程。


11.2。网络


Accumulo通过远程过程调用两个传递数据和控制信息通过TCP / IP进行通信。此外,Accumulo使用HDFS客户沟通与HDFS。为了达到良好的采集和查询性能,足够的网络带宽必须可任意两台机器之间。


11.3。安装


选择目录安装Accumulo。这个目录将被引用环境变量$ ACCUMULO_HOME。运行以下命令:


$ tar xzf accumulo-assemble-1.5.0-bin.tar.gz    # unpack to subdirectory

$ mv accumulo-assemble-1.5.0-bin $ACCUMULO_HOME # move to desired location


在群集内的每台机器重复此步骤。通常情况下,所有的机器有相同的$ ACCUMULO_HOME。


11.4。依赖关系


Accumulo需要HDFS,ZooKeeper的配置和运行开始之前。密码应配置SSH至少Accumulo主和TabletServer机之间。在集群中运行网络时间协议(NTP),以确保节点的时钟,不要太脱节,这可能会导致自动时间戳数据的问题,这也是一个不错的主意。


11.5。组态


Accumulo配置编辑几个壳牌和XML文件中发现 $ ACCUMULO_HOME / conf目录。其结构类似于Hadoop的配置文件。


11.5.1。编辑机密/ accumulo的env.sh


Accumulo需要知道在哪里可以找到它依赖于软件。编辑accumulo env.sh指定以下内容:


1.输入的安装目录Accumulo为ACCUMULO_HOME美元的位置


2.输入您系统的Java回家$ JAVA_HOME


3.Hadoop的输入位置为$ HADOOP_HOME


4.选择的位置Accumulo日志,并将其输入$ ACCUMULO_LOG_DIR“


5.输入的ZooKeeper为ZOOKEEPER_HOME美元的位置

通过默认Accumulo TabletServers被设置为使用1GB的内存。你可能会改变这个通过改变价值$ ACCUMULO_TSERVER_OPTS。注意语法是Java的JVM命令行选项。此值应小于物理内存的运行TabletServers机器。


有主人的内存使用和垃圾收集过程中的类似选项。如果他们超出物理RAM的硬件,减少这些,增加他们的物理RAM的范围内,如果一个进程失败,因为内存不足。


请注意,您将指定Java堆空间,在accumulo env.sh。您应确保总的堆空间用于Accumulo TSERVER和在Hadoop的DataNode和TaskTracker必须是小于集群中的每个从节点上的可用内存。大型集群上,建议,都可以在不同的机器上运行Hadoop的NameNode的Accumulo主,次要的NameNode,和Hadoop JobTracker的允许他们使用更多的堆空间。如果您运行的是一小簇在同一台机器上,同样确保他们的堆空间设置适合于可用的内存。


11.5.2。集群规范


在机器将作为的Accumulo主:


1.写$ ACCUMULO_HOME / conf目录/硕士文件Accumulo主的IP地址或域名。


2.写的机器,这将是在$ ACCUMULO_HOME / conf目录/奴隶,每行一个TabletServers的IP地址或域名。

请注意,如果使用域名而不是IP地址,DNS必须配置正确参与集群中的所有机器。DNS可以是一个混乱的错误源。


11.5.3。Accumulo设置


指定适当的值ACCUMULO_HOME元/ conf目录/ accumulo的site.xml中的下列设置:


<property>

<name>zookeeper</name>

<value>zooserver-one:2181,zooserver-two:2181</value>

<description>list of zookeeper servers</description>

</property>


这使找到的ZooKeeper Accumulo。Accumulo使用ZooKeeper的协调过程,并有助于敲定TabletServer失败之间设置的。


<property>

<name>walog</name>

<value>/var/accumulo/walogs</value>

<description>local directory for write ahead logs</description>

</property>


Accumulo预写日志记录所有变更表,然后将它们提交到表。“walog设置指定预写日志写入到每台机器上的本地目录。这个目录应该存在所有机器上作为TabletServers的。


<property>

<name>instance.secret</name>

<value>DEFAULT</value>

</property>


实例需要一个秘密,使服务器之间的安全通信。配置你的秘密,并确保不向其他用户可读,的site.xml accumulo的文件是。


可以修改某些设置通过Accumulo外壳,并立即生效,但一些设置需要一个过程重新启动才能生效。有关详细信息,请参阅“配置文件(可在监视器上的网页)。


11.5.4。部署配置


复制的主人,奴隶,env.sh accumulo,如果有必要,accumulo的site.xml从$ ACCUMULO_HOME / conf目录/所有的机器的奴隶文件中指定主目录。


11.6。初始化


必须初始化Accumulo创建的结构,它在内部使用定位数据在集群。HDFS是必须要配置和运行之前Accumulo可以初始化。


HDFS开始后,可以进行初始化通过执行 $ ACCUMULO_HOME /bin/ accumulo的初始化。这个脚本会提示输入名称此实例Accumulo。实例名称是用来确定一套表和特定于实例的设置。然后,该脚本将一些信息写入到HDFS,所以Accumulo可以正常启动。


初始化脚本会提示你设置root密码。一旦Accumulo初始化后,就可以开始。


11.7。运行


11.7.1。从Accumulo开始


确保上配置的Hadoop集群中的所有机器,包括访问共享HDFS实例。确保HDFS,ZooKeeper的运行。请确保ZooKeeper的配置和集群中的至少一台计算机上运行。启动Accumulo使用BIN /start-all.sh脚本。


为了验证,运行Accumulo,检查“状态”页面监控下 。此外,shell可提供一些信息表通过读取元数据表的状态。


11.7.2。停止Accumulo


要正常关机,运行的BIN /stop-all.sh和主协调所有的tablet服务器关机。的关机等待完成所有的小压实,所以它可能需要一些时间为特定的配置。


11.8。监控


主Accumulo监测的Accumulo组件的状态和健康提供了一个接口。这个接口可以访问指着Web浏览器:50095/status


11.9。记录


Accumulo处理每写一组日志文件。默认情况下,这些被发现下 $ ACCUMULO /logs/。


11.10。恢复


关闭Accumulo TabletServer故障或错误的情况下,有些突变可能不会一直未成年人正确压缩到HDFS。在这种情况下,将自动重新Accumulo这种突变的预写日志时,片从故障服务器重新分配由主,在一个单一的TabletServer故障的情况下,或下一次启动Accu​​mulo,在发生故障时,关机期间。


要求预写日志记录器复制到HDFS进行恢复。复制日志,他们还整理,使平板电脑可以很容易地找到他们失踪的更新。在Accumulo监控状态页显示每个文件的复制/排序状态。一旦恢复完成涉及任何片应回到``在线“状态,到那时,这些药片将无法给客户。


Accumulo客户端库配置重试失败的突变,并在许多情况下,客户将能够继续处理后的恢复过程中,没有抛出任何异常。

Accumulo 的详细介绍请点这里
Accumulo 的下载地址请点这里

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

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