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中时候:(将分布式文件系统文件加载到内存)
1当slave1 slave2 全部挂掉的时候 3秒后 No available Alluxio worker found
2当slave1 slave2 Master全部挂掉时候 30秒后 ConnectionFailedException
3.假设此时有1个文件此文件在slave1上占30%,slave2上占70%,先挂掉slave1(此时在内存中的内容会消失),假设slave1再开启,此时InMemory是70%(就是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
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