Go 客户端

Slack Docker Pulls GitHub edit source

Alluxio有一个Go 语言客户端, 此客户端通过REST API 和Alluxio进行交互。Go 客户端提供一个和原生文件系统Java客户端相似的API。 查看godoc 获取所有可用接口的详细信息,godoc包括如何下载,上传Alluxio中的文件,检查文件是否 存在,列出文件状态等信息。

Alluxio 代理依赖

Go 语言客户端通过Alluxio代理提供的REST API和Alluxio进行交互。

Alluxio代理是一个独立运行的server,可通过命令${ALLUXIO_HOME}/bin/alluxio-start.sh proxy启动, ${ALLUXIO_HOME}/bin/alluxio-stop.sh proxy停止服务,默认情况下,REST API使用端口39999。

使用HTTP代理会影响性能,尤其是在使用代理时会增加一个额外的跳计数,所以推荐让代理服务和一个Alluxio worker运行在一个计算节点上。

安装Go语言客户端相关库

  1. $ go get -d github.com/Alluxio/alluxio-go

示例使用程序

如果本地没有Alluxio代理在运行,将下面的”localhost”替换为代理的主机名。

  1. package main
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. "log"
  6. "strings"
  7. "time"
  8. alluxio "github.com/alluxio/alluxio-go"
  9. "github.com/alluxio/alluxio-go/option"
  10. )
  11. func write(fs *alluxio.Client, path, s string) error {
  12. id, err := fs.CreateFile(path, &option.CreateFile{})
  13. if err != nil {
  14. return err
  15. }
  16. defer fs.Close(id)
  17. _, err = fs.Write(id, strings.NewReader(s))
  18. return err
  19. }
  20. func read(fs *alluxio.Client, path string) (string, error) {
  21. id, err := fs.OpenFile(path, &option.OpenFile{})
  22. if err != nil {
  23. return "", err
  24. }
  25. defer fs.Close(id)
  26. r, err := fs.Read(id)
  27. if err != nil {
  28. return "", err
  29. }
  30. defer r.Close()
  31. content, err := ioutil.ReadAll(r)
  32. if err != nil {
  33. return "", err
  34. }
  35. return string(content), err
  36. }
  37. func main() {
  38. fs := alluxio.NewClient("localhost", 39999, 10*time.Second)
  39. path := "/test_path"
  40. exists, err := fs.Exists(path, &option.Exists{})
  41. if err != nil {
  42. log.Fatal(err)
  43. }
  44. if exists {
  45. if err := fs.Delete(path, &option.Delete{}); err != nil {
  46. log.Fatal(err)
  47. }
  48. }
  49. if err := write(fs, path, "Success"); err != nil {
  50. log.Fatal(err)
  51. }
  52. content, err := read(fs, path)
  53. if err != nil {
  54. log.Fatal(err)
  55. }
  56. fmt.Printf("Result: %v\n", content)
  57. }