我的本地文件系统中有24GB文件夹。我的任务是将该文件夹移动到HDFS。我做的两种方式。 1)hdfs dfs -copyFromLocal / home / data / / home /
这需要大约15分钟才能完成。
2)使用Flume。
这是我的经纪人
if #available(iOS 10.0, *) {
automaticallyAdjustsScrollViewInsets = false
tableView.contentInset = UIEdgeInsetsMake(64, 0, 44, 0)
}
此步骤花了将近一个小时将数据推送到HDFS。
根据我的知识,Flume是分布式的,因此Flume不应该比copyFromLocal命令更快地加载数据。
答案 0 :(得分:1)
如果您在读取和写入操作上看起来很简单,那么在您使用文件通道时,您的配置将减少至少2倍的速度 - 从磁盘读取的每个文件都封装在水槽事件中(在内存中)然后通过文件通道序列化回磁盘。接收器然后从文件通道(磁盘)读回事件,然后将其推送到hdfs。
您还没有在spoolDir源上设置blob反序列化器(因此它一次从源文件读取一行,包装在水槽事件中,然后写入文件通道),因此与HDFS接收器配对默认的rollXXX值,你将获得每10个事件/ 30s / 1k的hdfs文件,而不是你使用copyFromLocal获得的每个输入文件的文件。
所有这些因素加起来会降低性能。如果你想获得更具可比性的性能,你应该使用spoolDir源上的BlobDeserializer,再加上一个内存通道(但是要知道,如果JRE过早终止,内存通道不能保证传递事件。
答案 1 :(得分:0)
Apache Flume不用于将文件夹从本地文件系统移动或复制到HDFS。 Flume用于有效地收集,聚合和将来自许多不同来源的大量日志数据移动到集中式数据存储。 (参考:Flume User Guide)
如果您想移动大型文件或目录,则应使用已提及的hdfs dfs -copyFromLocal
。