将任何大小和格式的文件发送到Hadoop的最快方法是什么



我使用Angular 6前端、Django 1.11后端和Hadoop构建用于数据分析的web应用程序。我需要以最快的方式将任何大小和格式的文件发送到Hadoop。我想支持私人用户和公司。我想知道将任何大小和格式的文件发送到Hadoop的最快方法是什么?

我的解决方案:

file = request.FILES['file']
path = default_storage.save(str(file), ContentFile(file.read()))
os.path.join(settings.MEDIA_ROOT, path)
command = 'hadoop fs -put ' + str(file) + ' /user/' + str(user_name) + '/' + str(file)
os.system(command)
command = 'rm -r ' + str(file)
os.system(command)

Hadoop FS put命令将使用hdfs/webhdfs,但即使是最小的文件启动进程的开销也会使此操作受到影响。我会考虑使用hadoop copyfromlocal,其中包含尽可能多的源文件,每个核心有1-2个线程。

对于任何有多GB文件问题的人;hadoop fs -appendToFile应该允许您从本地部分构建一个更大的文件,尽管它在命令行中不支持任何范围(实际上可以(。在Hadoop主干的最新版本中,为HDFS和对象存储设计了更好的多部分上传API,用于并行上传块,并在最后进行最终合并。

允许任何大小的唯一方法是遵循HDFS RPC写入协议。例如hdfs dfs -put

否则,对于大文件(超过几个GB(,webhdfs或NFS网关可能会超时。

如果您没有使用HDFS,那么请为您的存储使用相应的库。Azure或S3,例如


比上传文件更好的解决方案是使用一些RDMBS或Cassandra进行分析,然后使用Sqoop或Spark以并行方式将数据导出到Hadoop中

如果您正在使用Sqoop导入,您可以尝试使用下面提到的性能改进参数:1.--获取大小编号2.--直接3.--除以4.-m计数5.sqoop工具中的边界查询

最新更新