我有几台机器带有tbs的自定义格式的日志数据,可以用c库读取。我想上传所有数据到hadoop集群(hdfs),同时将其转换为Parquet文件。这是一个持续的过程(意味着每天我都会得到更多的数据),而不是一次性的努力。在性能方面(高效地)做it的最佳选择是什么?parquet c库和java库一样好吗(更新、错误等)这个解决方案应该每天处理几十个tb,将来甚至更多。日志数据正在到达,应该立即在hdfs集群上可用。
r7xajy2e1#
性能方面,最好的方法是成批收集数据,然后每批编写一个新的Parquet文件。如果您的数据是以单行形式接收的,并且您希望在hdfs上立即保存它们,那么您还可以将它们写入基于行的格式(支持单行附加),例如avro,并定期运行一个作业,将它们压缩到单个Parquet文件中。就库而言,parquet cpp目前比parquet mr(java库)更为活跃。这主要是由于1.5年前(2016年冬/春)开始积极开发Parquet地板cpp(重新)。因此,c库的更新将很快发生,而java库已经非常成熟,因为它有一个庞大的用户群,因为已经有相当长的时间了。parquet cpp中还没有实现诸如 predicate 下推(predicate pushdown)之类的特性,但是这些特性都在读路径上,所以对于写来说它们并不重要。我们现在使用parquet cpp,它已经在不同的生产环境中非常稳定地运行,因此最终,使用c或java库的选择应该主要取决于我们的系统环境。如果您的所有代码当前都在jvm中运行,请使用parquet mr,否则,如果您是c++/python/ruby用户,请使用parquet cpp。免责声明:我是Parquetcpp开发商之一。
1条答案
按热度按时间r7xajy2e1#
性能方面,最好的方法是成批收集数据,然后每批编写一个新的Parquet文件。如果您的数据是以单行形式接收的,并且您希望在hdfs上立即保存它们,那么您还可以将它们写入基于行的格式(支持单行附加),例如avro,并定期运行一个作业,将它们压缩到单个Parquet文件中。
就库而言,parquet cpp目前比parquet mr(java库)更为活跃。这主要是由于1.5年前(2016年冬/春)开始积极开发Parquet地板cpp(重新)。因此,c库的更新将很快发生,而java库已经非常成熟,因为它有一个庞大的用户群,因为已经有相当长的时间了。parquet cpp中还没有实现诸如 predicate 下推(predicate pushdown)之类的特性,但是这些特性都在读路径上,所以对于写来说它们并不重要。
我们现在使用parquet cpp,它已经在不同的生产环境中非常稳定地运行,因此最终,使用c或java库的选择应该主要取决于我们的系统环境。如果您的所有代码当前都在jvm中运行,请使用parquet mr,否则,如果您是c++/python/ruby用户,请使用parquet cpp。
免责声明:我是Parquetcpp开发商之一。