alluxio的相关测试和结论

                                                                                                                                Alluxio文档  

                                                                                    author:guochenbing   email:[email protected]

假如master同时做worker使用,则存储数据的时候,如果不指定ip有先存储在本机worker

为什么??:LocalFirstPolicy(alluxio.client.file.policy.LocalFirstPolicy)

首先返回本地主机,如果本地Worker没有足够的容量容纳一个数据块,那么就会从有效的Worker列表中随机选择一个Worker。这也是默认策略

 

分布式环境中,很可能距出现某一台机器宕机了,无法使用了,假如alluxio(底层有分布式文件系统)宕机了:

现有Master   slave1   slave2        master不作worker使用)

:

为什么要将数据载入到alluxio????如果不载入的话,直接读hdfs根本就没必要用alluxio

 

Load将底层文件加载到alluxio中时候:(将分布式文件系统文件加载到内存)

1slave1 slave2 全部挂掉的时候        3秒后  No available Alluxio worker found

2slave1 slave2 Master全部挂掉时候   30秒后  ConnectionFailedException

3.假设此时有1个文件此文件在slave1上占30%slave2上占70%,先挂掉slave1(此时在内存中的内容会消失),假设slave1再开启,此时InMemory70%(就是slave2上的),此时load会将刚才失效的百分之30重新分配到机子上,当然这个分配slave1,slave2都有可能去分配

最后说一句:(第二个参数就是一些规则)

loadMetadata(AlluxioURI path, LoadMetadataOptions options) 

Deprecated. 

since version 1.1 and will be removed in version 2.0     <-----------重点

 

 

:使用readType  默认读取就会将文件载入到alluxio中    默认CACHE_PROMOTE

CACHE_PROMOTE

如果读取的数据在Worker上时,该数据被移动到Worker的最高层。如果该数据不在本地Worker的Alluxio存储中,那么就将一个副本添加到本地Alluxio Worker中,用于每次完整地读取数据快。这是默认的读类型。

CACHE

如果该数据不在本地Worker的Alluxio存储中,那么就将一个副本添加到本地Alluxio Worker中,用于每次完整地读取数据快。

NO_CACHE

不会创建副本。

 

 

 

 

如何获得一个文件信息:

    AlluxioURI uri = new AlluxioURI("alluxio://master:19998/bbb0.txt");
//  FileSystem fs = FileSystem.Factory.get();
  InetSocketAddress inetSocketAddress = new InetSocketAddress("192.168.38.128", 19998);
  FileSystemMasterClient fsmc = new FileSystemMasterClient(inetSocketAddress);
  fsmc.connect();
  URIStatus status = fsmc.getStatus(uri);
  List fileBlockInfos = status.getFileBlockInfos();
  System.out.println(fileBlockInfos);

 

最后可以拿到文件块的ip

 

ReadType:默认 (流读完了记得关闭,否则不会载入内存)

1读的时候会把好多文件载入到内存,如果内存不够,则清除最早插入的,有空间之后,继续载入内存

2:如果读单个文件会把文件载入到内存余量足够的机器上(整个文件都会载入过去)

3:重要:如果是默认的,并且该文件过大,每台worker都无法独自载入内存的话,会报错

Exception in thread "main" java.lang.RuntimeException: No available Alluxio worker found

设置为no catch就可以了直接从hdfs读取,为什么会报错??很简单,我没分块

首先返回本地主机,如果本地Worker没有足够的容量容纳一个数据块,那么就会从有效的Worker列表中随机选择一个Worker。这也是默认策略

 

 

WriteType:CATCH_THROUGH 

1:如果指定ip 一次性写入多个文件假如100个   到30个时候内存不够了,继续插入会把原来前30依次清除掉从内存中(先进先出)   web监控:内存百分比条一会儿占用多一会儿占用少正说明了这一切     

2:假如指定ip后,该文件大小大于该内存分配,则文件不会占用内存(不是一部分在内存,也不会占用其他机器内存)

3:假如指定ip后,该ip挂掉,写不进去,报异常

Exception in thread "main" java.io.IOException: org.apache.thrift.transport.TTransportException: SASL authentication not complete

你可能感兴趣的:(alluxio的相关测试和结论)