如何通过API调用alluxio 文件系统
一般来说,不论从spark,hfds等等大数据分布式框架,甚至使用公有云api,来说,与集群进行交互不外乎以下这些套路:
- 设置configuration(有很重要的主节点host,port,等等)
- 通过configuration生成context
- 通过context,得到一个client
- 这时候,通过这个client去调用各种法方法
当然alluxio文件系统,也不例外,但是也稍微有那么一点点小个性。
我们可以先介绍一下,alluxio的对外接口 alluxio.client.file.FileSystem
我们可以看到FileSystem有一个内部类Factory,然后就是一些方法,基本囊括了文件系统的各种方法,当然其中也有个别方法已经在现在版本不建议使用,未来甚至可能被移除(如loadMetadata)。
风格也是一致,每种功能都有两个重载方法,一个只需要 AlluxioURI一个参数,另外一个除了AlluxioURI,还需要一个对应的Options参数。
Options这个参数阿里云api中的Options很像,他们是一个类,用成员变量记录了该操作的各种参数。拿createFile举例说明,我们如果想要按照自己搭建的alluxio集群的配置文件中的设置去创建文件(若未设置某配置项,则为默认值),我们就使用createFile(AlluxioURI) 这个方法,在FIleSystem的实现类BaseFileSystem的createFile(AlluxioURI)中,会调用一个CreateFileOption的defaults()方法,这个方法就是从配置项中读取各个操作参数到自己实例的成员变量中,这样用这么一个Opthions,进行创建。倘若,你想使用的创建方式不是集群里配置的那样,但是又不想停掉集群,更改配置,那么你就可以自己创建一个Options,设置好各个成员,然后作为参数传入,就能达到效果。这体现了接口的灵活性。
以下为得到FIleSystem的方法:
Configuration.set(PropertyKey.MASTER_HOSTNAME,host);ClientContext.init();FileSystem fs = FileSystem.Factory.get();
这里alluxio 与spark 不同,并不需要那样得到conf,再通过conf得到context,这样一直传参数。
alluxio:
首先,使用Configuration的set方法,传入一个枚举的MASTER_HOSTNAME,和一个String的参数(这里可以是能解析的域名,主机名,ip地址),这样,就在Configuration中,配置了好了最重要的一项,master的地址。port可以不用写,因为它有默认的19998。
然后,ClientContext.init方法,可以将从设置好的Configuration读到master的地址和端口,并传给ClientContext。
最后,我们通过FileSystem的内部类Factory的get方法得到FileSystem的实现类BaseFileSystem。
有了这个fs,之后就可能各种调用啦。~~~~
谢谢。