作者:Damian Eads, June 7, 2016 盡管在數據驅動的工作中,大多數人們都會使用分布式數據庫與文件系統(tǒng),但是在單機上快速讀取一個文件的需求仍然堅挺地存在著。令人驚訝的是,大多數現代的文件讀取器并沒有利用起多核的架構,導致在高性能存儲系統(tǒng)中大量的I/O帶寬被閑置。在這里介紹的ParaText可以在單個多核機器上并行地讀取文件以更有效地使用帶寬。Alpha版本包含了一個并行CSV讀取器。 在大約50年里,CSV一直被用做表格式數據的格式。由于CSV文件隨處可見,且在實際的工作流中處理CSV文件的需求也隨處可見——在這里速度,精度和容錯率都是必須的指標——因而我們決定構建一個并行的CSV讀取器。 我們還額外比較了ParaText和7個CSV讀取器以及5個二進制讀取器的性能。更多細節(jié)請參考我們的性能白皮書。在我們的測試中,ParaText可以以2.5GB/s的速度從一個磁盤加載一個CSV文件到內存,以及4.2GB/s的速度從內存寫入外存。ParaText可以在30分鐘內對一個5TB的CSV文件完成解析及基于外存的計算。 為什么選CSV? CSV的簡潔性是十分誘人的。從概念上講,CSV十分易于解析。它也是人類可讀的。電子表格軟件以及COBOL時期遺留的一些數據庫至少可以讀寫CSV文件。的確,CSV被廣泛用于交換表格化數據,但是不幸的是,RFC標準沒有跟緊實踐的步伐,導致CSV文件的擴展道路被扭曲了。CSV的格式缺少一個全世界都接受的模式,導致即使是“合適”的CSV文件也可能有模糊不清的語義,進而使每個應用對其有了不同的解釋。 盡管CSV存在這樣的問題,社區(qū)仍舊需要魯棒的工具來處理CSV數據。我們開始時構建了一個迅速的,內存使用高效的,通用的多核文本讀取器。我們的CSV讀取器是第一個使用這一基礎讀取器的成果。 發(fā)布與性能的亮點 ParaText CSV讀取器支持整型,浮點型,文本以及可分類數據類型。它總是使用最窄的比特深度來節(jié)省內存。文本域可以多行擴展。一個小型的可分類編碼可以將重復的字符串映射為整數來降低內存占用率。 ParaText可以用一行代碼加載一個CSV文件到Pandas DataFrame。
在我們的性能分析中,我們證明了ParaText的速度,效率,更多細節(jié)請參考性能白皮書。 數據 用于我們的性能測試的文件的大小從21MB到5.076TB。白皮書中描述了每個數據集的特性以及如何下載他們。 每個數據集及每種文件格式的文件大小。二進制文件要比CSV文件更小。 1.ParaText是很快的! ParaText有比其他任何在每個數據集上都測試過的CSV讀取器更高的吞吐量。
2.ParaText內存使用很有效! ParaText有最少的內存使用量。對Dato SFrame來說,如果數據幀存儲在Dato的內核時,它就有非常低的內存使用量。Spark預留了大量的堆空間。因此很難表述它的內存使用效率,進而更好地指導如何為Spark任務準備資源。
3.ParaText對陣二進制:仍然很快! 出色的二進制讀取器可以不經任何解析,類型判斷或錯誤檢查地讀取大量小型的文件。正如預料的那樣,二進制讀取器在比CSV小10倍的二進制文件讀取上超過了CSV。
然而,我們測試的二進制讀取器和ParaText相比,其I/O帶寬要低的多。
4.數據幀的快速轉換 Spark DataFrame, Dato SFrame, 和ParaText都可以用一行代碼將他們內部表示的數據轉換為一個Python的對象。這提高了數據科學的交互體驗。 這種轉換是數據科學中交互體驗的一個重要部分。ParaText可以在數秒內轉換一個數GB的數據集,而Spark和Dato卻需要幾分鐘。
5.ParaText更加便宜! 按比例分配的Amazon Web Services(AWS)對Wise ParaText的成本與其他方法相比卻是不成比例地低。
6.ParaText接近了硬件極限! 我們定義了兩個基準任務來建立CSV加載吞吐量的上界:換行符計數以及外存CSV解析。ParaText達到了非常接近由任務預估的I/O帶寬的吞吐量。
7.ParaText是媒介數據 ParaText可以輕松處理數TB級別的數據。在我們的測試中,ParaText和Spark是僅有的能夠單機成功加載并計算一個超過1TB的文件。
感興趣嗎? 訪問GitHub并試一試ParaText吧。我們期待聽到你的聲音! 英文原文:http://www./tech/paratext |
|