【问题标题】:Uploading data to HDFS cluster from custom format从自定义格式上传数据到 HDFS 集群
【发布时间】:2017-06-15 13:03:11
【问题描述】:

我有几台机器,其中包含 TB 的自定义格式的日志数据,可以使用 c++ 库读取。我想将所有数据上传到 hadoop 集群 (HDFS),同时将其转换为 parquet 文件。
这是一个持续的过程(意味着每天我都会获得更多数据),而不是一次性的努力。
什么是最好的选择来做它的性能明智(有效地做)?
parquet C++ 库和 Java 库一样好吗? (更新、错误等)
该解决方案应该每天处理数十个 TB 甚至更多。 日志数据持续到达并且应该立即在 HDFS 集群上可用。

【问题讨论】:

    标签: hadoop hdfs parquet


    【解决方案1】:

    性能方面,最好的方法是分批收集数据,然后每批写出一个新的 Parquet 文件。如果您的数据以单行形式接收并且您想立即将它们保存在 HDFS 上,那么您也可以将它们写出为基于行的格式(支持单行追加),例如AVRO 并定期运行将它们压缩成单个 Parquet 文件的作业。

    在库方面,parquet-cpp 目前比 parquet-mr(Java 库)更加活跃。这主要是由于大约 1.5 年前(2016 年冬/春)开始积极的 parquet-cpp 开发(重新)。因此,目前对 C++ 库的更新将很快发生,而 Java 库已经非常成熟,因为它在很长一段时间内就拥有庞大的用户群。 parquet-cpp 中还没有实现一些特性,比如谓词下推,但是这些都在读取路径上,所以对于写入来说它们并不重要。

    我们现在使用 parquet-cpp,它已经在不同的生产环境中运行非常稳定,所以最后,您选择使用 C++ 还是 Java 库应该主要取决于我们的系统环境。如果您的所有代码当前都在 JVM 中运行,则使用 parquet-mr,否则,如果您是 C++/Python/Ruby 用户,请使用 parquet-cpp。

    免责声明:我是 parquet-cpp 开发人员之一。

    【讨论】:

    • 谢谢!我很欣赏详细的答案。 @xhochy
    猜你喜欢
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 2018-09-04
    • 2017-07-04
    • 1970-01-01
    • 2017-05-13
    • 2019-05-12
    • 2016-10-19
    相关资源
    最近更新 更多