Napotkałem wiele problemów podczas próby zapisania bardzo dużego SchemaRDD, jak w formacie Parquet na S3. Zadałem już szczegółowe pytania dotyczące tych problemów, ale tak naprawdę muszę to zrobić. Kod powinien wyglądać mniej więcej takZapisywanie >> 25T SchemaRDD w formacie Parkiet na S3
import org.apache.spark._
val sqlContext = sql.SQLContext(sc)
val data = sqlContext.jsonFile("s3n://...", 10e-6)
data.saveAsParquetFile("s3n://...")
ja napotkasz problemy, jeśli mam więcej niż około 2000 partycje lub jeśli istnieje partycja większa niż 5G. Spowoduje to umieszczenie górnej granicy na maksymalnym rozmiarze SchemaRDD, który mogę przetwarzać w ten sposób. Prctical limit jest bliższy 1T, ponieważ rozmiary partycji różnią się znacznie i potrzebujesz tylko 1 5G partycji, aby proces się nie powiódł.
pytania dotyczące specyficznych problemów, jakie napotykają są
- Multipart uploads to Amazon S3 from Apache Spark
- Error when writing a repartitioned SchemaRDD to Parquet with Spark SQL
- Spark SQL unable to complete writing Parquet data with a large number of shards
to pytanie jest, aby zobaczyć, czy są jakieś rozwiązania głównego bramką niekoniecznie wiąże się z rozwiązaniem jednego z powyższych problemów bezpośrednio.
destylować rzeczy tam są 2 problemy
pisania pojedynczej odłamek większy niż 5G do S # zawiedzie. AFAIK to wbudowany limit łyżek
s3n://
. To powinno być możliwe dla wiaders3://
, ale nie działa ze Spark ihadoop distcp
z lokalnego HDFS też tego nie potrafi.Pisanie pliku podsumowania zwykle kończy się niepowodzeniem, gdy pojawi się tysiąc shardów. Wydaje się, że z tym wiąże się wiele problemów. Napisanie bezpośrednio do S3 powoduje błąd w powyższym linku. Napisanie bezpośrednio do lokalnego HDFS powoduje błąd OOM nawet na r3.8xlarge (244G RAM) raz, gdy istnieje około 5000 odłamków. Wydaje się to być niezależne od rzeczywistej objętości danych. Plik podsumowania wydaje się być niezbędny do wydajnego wysyłania zapytań.
Łącznie te problemy ograniczają parkiet na S3 do 25T. W praktyce jest to w rzeczywistości znacznie mniej, ponieważ rozmiary odłamków mogą się znacznie różnić w RDD, a limit 5G dotyczy największego odłamka.
Jak mogę napisać >> 25T RDD jako Parkiet do S3?
Używam Spark-1.1.0.