Apache Accumulo和Apache HDFS Python连接器
sharkbite的Python项目详细描述
Sharkbite
Sharkbite是用于密钥/值存储的HDFS和本机客户端。与 最初对Apache Accumulo的支持,该设计可以并且已经用于支持其他键/值 商店。开发始于2014年,发展缓慢。Accumulo没有结构特异性 尽管是基本实现。尽管如此,由于混淆,下面的例子看起来非常像Accumulo。这是故意的。在
V0.6将支持的功能:
- 适用于Accumulo 1.6.x、1.7.x、1.8.x、1.9.x和2.x
- ^{str>当前支持读/写数据。在
- Table Operations:当前支持大多数表操作。这包括正常Accumulo客户端执行的命运操作。在
- Security Operations:安全操作并非全部实现,但您应该能够添加用户、更改授权、密码和删除用户。在
当前主进度
- 开发的重点是抽象出apacheacumulo的2.x变更。在
- 人们需要帮助抽象出这些节俭的变化。在
关于名字
Sharkbite的名字源于设计,它将我们紧密地抽象在其中的组件 底层数据存储的耦合和抓取接口。使用抽象层进行访问,并使用 交叉兼容对象,底层接口与每个数据库紧密耦合。结果,鲨鱼岩 成为一个合适的名称,因为接口的存在是为了抽象 API。在
Python支持
这个python客户机可以通过pip install sharkbite
安装
包括A Python example。这是Python绑定sharkbite的主要示例 图书馆。在
特点
对冲阅读(!β)
Sharkbite现在支持对冲读取(当可以访问RFiles时对它们执行扫描)同时与 Accumulo RPC扫描。第一个完成的执行器将返回您的结果。此功能尚处于测试阶段,不建议使用 对于生产环境。在
使用以下选项启用它:
import pysharkbite as sharkbite
connector = sharkbite.AccumuloConnector(user, zk)
table_operations = connector.tableOps(table)
scanner = table_operations.createScanner(auths, 2)
range = sharkbite.Range("myrow")
scanner.addRange( range )
### enable the beta option of hedged reads
scanner.setOption( sharkbite.ScannerOptions.HedgedReads )
resultset = scanner.getResultSet()
for keyvalue in resultset:
key = keyvalue.getKey()
value = keyvalue.getValue()
Python迭代器
我们现在支持python迭代器的beta版本。通过使用cmake选项PYTHON_ITERATOR_SUPPORT(cmake-DPYTHON_ITERATOR_SUPPORT=ON),我们将构建支持PYTHON迭代器的必要基础设施
迭代器可以定义为单函数lambdas,也可以通过实现seek或next方法来定义。在
第一个示例实现seek和onNext方法。如果不希望调整范围,则seek是可选的。一旦键被迭代,你就可以得到顶键。你可以打电话来 迭代器.next()否则基础设施将为您提供服务。在
^{pr2}$如果这是在一个单独的文件中定义的,您可以在下面的代码片段中使用它
with open('test.iter', 'r') as file:
iterator = file.read()
## name, iterator text, priority
iterator = pysharkbite.PythonIterator("PythonIterator",iteratortext,100)
scanner.addIterator(iterator)
你也可以用lambdas。您提供的lambda将被传递给KeyValue(getKey()和getValue()返回组成部分)。下面是设置它的部分代码示例。 您可以返回一个Key或KeyValue对象。如果返回前者,则返回一个空值
## define only the name and priority
iterator = pysharkbite.PythonIterator("PythonIterator",100)
## define a lambda to ajust the column family.
iterator = iterator.onNext("lambda x : Key( x.getKey().getRow(), 'new cf', x.getKey().getColumnQualifier()) ")
scanner.addIterator(iterator)
您可以将python迭代器定义为文本实现或lambda。两者不能同时使用。在
- 项目
标签: