Apache Accumulo和Apache HDFS Python连接器

sharkbite的Python项目详细描述


logoSharkbite

Documentation Status

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。两者不能同时使用。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在IntelliJ社区版中为maven项目创建war文件?   架构在java编程中创建模型数据的最佳方式   java代码可以打印当前数字右边的最大数字,最后一个数字应该打印1   java上一个和下一个按钮,用于在WebView中从数组中加载字符串   java与直接DB调用/RESTful服务调用相比,测试Hazelcast数据检索速度的最佳方法是什么?   资源/类链接上的Java404   java如何安装play2War插件(Play Framework 2.1.1.)   多线程守护进程线程行为java   java如何从RepainManager生成异常   java Hibernate集合映射问题。无法删除或更新父行:外键约束失败   java LibGDX TextureRegion NullPointerException   java无法在JUnit套件中添加测试类   java通配符捕获/泛型   awt如何在Java中获取当前的鼠标指针类型?   java将probuf转换为POJO   java bouncycastle是否支持RSA PKCS1OAEP填充?   SQLiteDatabase的java问题。SQLITE数据库时的查询()。rawQuery()工作正常   java Android。如何正确存储数据库的数据?   java如何访问与GAE默认服务帐户关联的电子邮件地址?