- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经使用 Spark 在本地安装了 Alluxio,并且在 Alluxio 内存中插入了 1000 个文件。
然而读取文件的速度非常慢。从 Alluxio 内存读取文件的时间与从磁盘读取文件的时间相同。我不明白为什么。
File Name Size Block Size In-Memory Persistence State Pin Creation Time Modification Time
file1 54.73KB 512.00MB 100% NOT_PERSISTED NO 08-16-2016 12:52:31:278 08-16-2016 12:52:31:372
file2 54.73KB 512.00MB 100% NOT_PERSISTED NO 08-16-2016 12:52:31:377 08-16-2016 12:52:31:384
file3 54.72KB 512.00MB 100% NOT_PERSISTED NO 08-16-2016 12:52:31:386 08-16-2016 12:52:31:393
file4 54.71KB 512.00MB 100% NOT_PERSISTED NO 08-16-2016 12:52:31:394 08-16-2016 12:52:31:400
file5 54.72KB 512.00MB 100% NOT_PERSISTED NO 08-16-2016 12:52:31:401 08-16-2016 12:52:31:407
...
我使用文件 API 读取数据:
FileSystem fs = FileSystem.Factory.get();
AlluxioURI path = new AlluxioURI(/partition0);
List<URIStatus> status = fs.listStatus(path);
for (int i=0; i<status.size(); i++)
{
path = new AlluxioURI(status.get(i).getPath());
if(fs.exists(path)==true)
{
FileInStream in = fs.openFile(path);
String file = "";
InputStreamReader ipsr = new InputStreamReader(in);
BufferedReader br=new BufferedReader(ipsr);
String line;
line=br.readLine();
while (line != null){
//System.out.println(line);
file = file + line;
line=br.readLine();
}
byte[] cfv = file.getBytes();
br.close();
// Close file relinquishing the lock
in.close();
}
}
我现在不使用Spark,因为读取1000个文件的分区的测试非常慢...(我希望以后使用Spark按分区读取文件)。
为什么使用这个方法/库读取时间这么慢?
最佳答案
在您的示例中,有一些事情看起来有点不对劲。
首先,您在文件上显示的信息表明这些文件非常小,每个文件大约 50 kB,但您已将 Alluxio 配置为使用 512 MB block 。这可能意味着您传输的数据远多于实际需要的数据。因此需要考虑的一件事是,如果您打算主要拥有小文件,那么最好配置更小的 block 大小。
其次,您在测试用例中实际读取文件的方式效率非常低。您将作为字符串逐行读取,使用字符串连接来构建文件,然后将其转换回字节。因此,您将从内存中的字节转到字符串,然后再返回字节。另外,通过使用字符串连接,您可以强制将迄今为止读取的整个文件复制到您读取的内存技术附加行中。
通常,您可以将文件逐行读取到 StringBuilder
/写入另一个 Writer
,或者将文件作为字节读取到 byte[ ]
/写入另一个 OutputStream
例如ByteArrayOutputStream
如果您想最终获得一个 byte[]
并且事先不知道大小。
第三个考虑因素是代码在集群中运行的位置。即使文件位于内存中,它们也可能并不位于集群中每个节点的内存中。如果您从尚未在内存中的节点读取文件,则必须通过网络读取它们,此时性能将会降低。
最后要考虑的是操作系统文件缓存。如果您生成了测试文件,然后立即运行测试,那么这些文件可能会被操作系统缓存在内存中。此时,您将获得与 Alluxio 一样好的性能,甚至更好,因为缓存是在操作系统级别的。如果您确实想进行有意义的比较,那么您需要确保在运行任何基于文件的测试之前刷新操作系统文件缓存。
关于java - 使用 Spark java 从 Alluxio 读取多个文件很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38974674/
本文整理了Java中alluxio.client.WriteType类的一些代码示例,展示了WriteType类的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等
本文整理了Java中alluxio.uri.ZookeeperAuthority类的一些代码示例,展示了ZookeeperAuthority类的具体用法。这些代码示例主要来源于Github/Stack
我正在使用 Alluxio 2.0 来加速计算层的性能。 当没有查询执行时,我发现有大约详细的netty输出附加到$Alluxio_home/logs/master.log。 2019-11-25 1
本文整理了Java中alluxio.client.WriteType.isAsync()方法的一些代码示例,展示了WriteType.isAsync()的具体用法。这些代码示例主要来源于Github/
本文整理了Java中alluxio.client.WriteType.toString()方法的一些代码示例,展示了WriteType.toString()的具体用法。这些代码示例主要来源于Githu
本文整理了Java中alluxio.client.WriteType.valueOf()方法的一些代码示例,展示了WriteType.valueOf()的具体用法。这些代码示例主要来源于Github/
本文整理了Java中alluxio.client.WriteType.toProto()方法的一些代码示例,展示了WriteType.toProto()的具体用法。这些代码示例主要来源于Github/
本文整理了Java中alluxio.client.WriteType.getUnderStorageType()方法的一些代码示例,展示了WriteType.getUnderStorageType()
本文整理了Java中alluxio.client.WriteType.fromProto()方法的一些代码示例,展示了WriteType.fromProto()的具体用法。这些代码示例主要来源于Git
本文整理了Java中alluxio.client.WriteType.isThrough()方法的一些代码示例,展示了WriteType.isThrough()的具体用法。这些代码示例主要来源于Git
本文整理了Java中alluxio.client.WriteType.getAlluxioStorageType()方法的一些代码示例,展示了WriteType.getAlluxioStorageTy
本文整理了Java中alluxio.client.WriteType.isCache()方法的一些代码示例,展示了WriteType.isCache()的具体用法。这些代码示例主要来源于Github/
本文整理了Java中alluxio.uri.ZookeeperAuthority.toString()方法的一些代码示例,展示了ZookeeperAuthority.toString()的具体用法。这
本文整理了Java中alluxio.uri.ZookeeperAuthority.getZookeeperAddress()方法的一些代码示例,展示了ZookeeperAuthority.getZoo
我正在尝试使用 map reduce 将数据写入 alluxio。我在 hdfs 上有大约 11 g 的数据,我正在写到 alluxio。它在 MUST_CACHE 写入类型(alluxio.user
我已经部署了一个基于HDFS 集群的Alluxio 集群。当我使用 Alluxio Native Java Api 将一些文件写入 Alluxio 并设置 writetype ASYNC_THROUG
我有一个使用 HDFS 作为底层存储分布式文件系统的集群,但我刚刚读到有关 alluxio 的文章,它既快速又灵活。所以,我的问题是:我应该将 Alluxio 与 HDFS 一起使用,还是 Allux
我已经使用 Spark 在本地安装了 Alluxio,并且在 Alluxio 内存中插入了 1000 个文件。 然而读取文件的速度非常慢。从 Alluxio 内存读取文件的时间与从磁盘读取文件的时间相
我在使用 Spark 的 Alluxio 上遇到了一个奇怪的错误。我使用 Spark 从 Alluxio 读取了 20,000 个文件,并且它有效。但我用 Spark 从 Alluxio 读取了 40
我可以使用 cloudera 提供的示例 jar 在 alluxio 上运行 wordcount,使用: sudo -u hdfs hadoop jar /usr/lib/hadoop-0.20-ma
我是一名优秀的程序员,十分优秀!