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

时间:2018-10-27 10:18:43

标签: hadoop hdfs

我使用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)

3 个答案:

答案 0 :(得分:1)

Hadoop FS put命令将使用hdfs / webhdfs,但是即使最小的文件启动进程的开销也会使此操作受到损害。我将看看将hadoop copyfromlocal与尽可能多的源文件和每个核心1-2个线程一起使用。

适用于处理多GB文件的任何人; hadoop fs -appendToFile应该允许您从本地部分构建更大的文件,尽管它在命令行中不支持任何范围(实际上可以)。最新版本的Hadoop主干中正在进行一些工作,以便为HDFS提供更好的分段上传API,并设计用于并行上传块并最终合并的对象存储。

答案 1 :(得分:0)

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

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

如果您不使用HDFS,请使用各自的存储库。例如Azure或S3


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

答案 2 :(得分:0)

如果您正在使用Sqoop导入,则可以尝试使用如下所述的性能改进参数: 1. --fetch-size数字 2.-直接 3.-分割 4. -m计数 5.边界查询
在sqoop工具中