Python Client

Slack Docker Pulls GitHub edit source

Alluxio 有一个 Python 客户端,这个客户端提供了 REST API 来和 Alluxio 交互。它提供了一个和 Alluxio Java API 类似的 API。查看这篇文档来了解有关所有可用方法的详细文档。通过示例来了解如何在 Alluxio 上执行基本的文件系统操作。

Alluxio代理依赖

这个Python客户端通过由Alluxio代理提供的REST API来和Alluxio相互交流。 这个代理服务器是一个独立的服务器,可以通过${ALLUXIO_HOME}/bin/alluxio-start.sh proxy来开启它和通过命令${ALLUXIO_HOME}/bin/alluxio-stop.sh proxy来关闭它。默认情况下,可以通过端口39999来使用REST API。 使用HTTP代理服务器有性能上的影响。特别的是,使用这个代理服务器需要一个额外的跳。为了达到最佳性能,运行这个代理服务器的时候推荐在每个计算节点上分配一个Alluxio worker。

安装python客户端库

  1. $ pip install alluxio

使用示例

下面的程序示例包括了如何在Alluxio创建目录、下载、上传、检查文件是否存在以及文件列表状态。

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import json
  4. import sys
  5. import alluxio
  6. from alluxio import option
  7. def colorize(code):
  8. def _(text, bold=False):
  9. c = code
  10. if bold:
  11. c = '1;%s' % c
  12. return '\033[%sm%s\033[0m' % (c, text)
  13. return _
  14. green = colorize('32')
  15. def info(s):
  16. print green(s)
  17. def pretty_json(obj):
  18. return json.dumps(obj, indent=2)
  19. def main():
  20. py_test_root_dir = '/py-test-dir'
  21. py_test_nested_dir = '/py-test-dir/nested'
  22. py_test = py_test_nested_dir + '/py-test'
  23. py_test_renamed = py_test_root_dir + '/py-test-renamed'
  24. client = alluxio.Client('localhost', 39999)
  25. info("creating directory %s" % py_test_nested_dir)
  26. opt = option.CreateDirectory(recursive=True)
  27. client.create_directory(py_test_nested_dir, opt)
  28. info("done")
  29. info("writing to %s" % py_test)
  30. with client.open(py_test, 'w') as f:
  31. f.write('Alluxio works with Python!\n')
  32. with open(sys.argv[0]) as this_file:
  33. f.write(this_file)
  34. info("done")
  35. info("getting status of %s" % py_test)
  36. stat = client.get_status(py_test)
  37. print pretty_json(stat.json())
  38. info("done")
  39. info("renaming %s to %s" % (py_test, py_test_renamed))
  40. client.rename(py_test, py_test_renamed)
  41. info("done")
  42. info("getting status of %s" % py_test_renamed)
  43. stat = client.get_status(py_test_renamed)
  44. print pretty_json(stat.json())
  45. info("done")
  46. info("reading %s" % py_test_renamed)
  47. with client.open(py_test_renamed, 'r') as f:
  48. print f.read()
  49. info("done")
  50. info("listing status of paths under /")
  51. root_stats = client.list_status('/')
  52. for stat in root_stats:
  53. print pretty_json(stat.json())
  54. info("done")
  55. info("deleting %s" % py_test_root_dir)
  56. opt = option.Delete(recursive=True)
  57. client.delete(py_test_root_dir, opt)
  58. info("done")
  59. info("asserting that %s is deleted" % py_test_root_dir)
  60. assert not client.exists(py_test_root_dir)
  61. info("done")
  62. if __name__ == '__main__':
  63. main()