web-dev-qa-db-fra.com

Spark SQL - Différence entre les formats de compression gzip, snappy et lzo

J'essaie d'utiliser Spark SQL pour écrire le fichier parquet.

Par défaut, Spark SQL prend en charge gzip, mais il prend également en charge d'autres formats de compression tels que snappy et lzo.

Quelle est la différence entre ces formats de compression et lequel convient le mieux pour charger Hive.

8
Shankar

Essayez-les simplement sur vos données.

lzo et snappy sont des compresseurs rapides et des décompresseurs très rapides, mais avec moins de compression, par rapport à gzip qui compresse mieux, mais est un peu plus lent.

14
Mark Adler

Utilisez Snappy si vous pouvez gérer une utilisation plus importante du disque pour des performances optimales (processeur plus faible et divisible). 

Lorsque Spark est passé de GZIP à Snappy par défaut, voici le raisonnement suivant:

D'après nos tests, la décompression gzip est très lente (<100 Mo/s), Rendant les requêtes liées à la décompression. Snappy peut décompresser à environ 500 Mo/s Sur un seul noyau.

Snappy:

  • Espace de stockage: élevé
  • Utilisation du processeur: faible
  • Splittable: Yes (1)

GZIP:

  • Espace de stockage: moyen
  • Utilisation du processeur: moyen
  • Splittable: No

1) http://boristyukin.com/is-snappy-compressed-parquet-file-splittable/

12
Garren S

Je suis d'accord avec 1 réponse (@Mark Adler) et j'ai quelques infos de recherche [1], mais je ne suis pas d'accord avec la deuxième réponse (@Garren S) [2]. Peut-être que Garren a mal compris la question, parce que: [2] Parquet divisible avec tous les codecs pris en charge: Le fichier Parquet gzippé peut-il être scindé en HDFS pour Spark? , Hadoop de Tom White: Le guide définitif, 4e édition, chapitre 5: Hadoop I/O, page 106. [1] Ma recherche: Données source - 205 Go. Texte (champs séparés), non compressé. Données de sortie:

<!DOCTYPE html>
<html>

<head>
  <style>
    table,
    th,
    td {
      border: 1px solid black;
      border-collapse: collapse;
    }
  </style>
</head>

<body>

  <table style="width:100%">
    <tr>
      <th></th>
      <th>time of computing, hours</th>
      <th>volume, GB</th>
    </tr>
    <tr>
      <td>ORC with default codec</td>
      <td>3-3,5</td>
      <td>12.3</td>
    </tr>
    <tr>
      <td>Parquet with GZIP</td>
      <td>3,5-3,7</td>
      <td>12.9</td>
    </tr>
    <tr>
      <td>Parquet with SNAPPY</td>
      <td>2,5-3,0</td>
      <td>60.4</td>
    </tr>
  </table>

</body>

</html>

La transformation a été réalisée en utilisant Hive sur un DME composé de 2 m4,16xlarge. Transformation - sélectionnez tous les champs avec une commande en plusieurs champs. Cette recherche, bien sûr, n’est pas standard, mais montre au moins un peu la comparaison réelle. Avec d'autres jeux de données, les résultats de calcul peuvent être différents.

0
sunKazakh