Cel: pobrać Sparka i uruchomić za jego pomocą prostą apkę w Scali.
Rozwiązanie
Aktualną wersję można pobrać wprost ze strony Apache, a starsze z archiwum: https://archive.apache.org/dist/spark/:
Np. w archiwum wersji 2.4.7 zobaczymy pliki:
SparkR_2.4.7.tar.gz 2020-09-08 07:13 310K
SparkR_2.4.7.tar.gz.asc 2020-09-08 07:13 819
SparkR_2.4.7.tar.gz.sha512 2020-09-08 07:13 207
pyspark-2.4.7.tar.gz 2020-09-08 07:13 208M
pyspark-2.4.7.tar.gz.asc 2020-09-08 07:13 819
pyspark-2.4.7.tar.gz.sha512 2020-09-08 07:13 210
spark-2.4.7-bin-hadoop2.6.tgz 2020-09-08 07:13 221M
spark-2.4.7-bin-hadoop2.6.tgz.asc 2020-09-08 07:13 819
spark-2.4.7-bin-hadoop2.6.tgz.sha512 2020-09-08 07:13 268
spark-2.4.7-bin-hadoop2.7.tgz 2020-09-08 07:13 223M
spark-2.4.7-bin-hadoop2.7.tgz.asc 2020-09-08 07:13 819
spark-2.4.7-bin-hadoop2.7.tgz.sha512 2020-09-08 07:13 268
spark-2.4.7-bin-without-hadoop-scala-2.12.tgz 2020-09-08 07:13 140M
spark-2.4.7-bin-without-hadoop-scala-2.12.tgz.asc 2020-09-08 07:13 819
spark-2.4.7-bin-without-hadoop-scala-2.12.tgz.sha512 2020-09-08 07:13 193
spark-2.4.7-bin-without-hadoop.tgz 2020-09-08 07:13 161M
spark-2.4.7-bin-without-hadoop.tgz.asc 2020-09-08 07:13 819
spark-2.4.7-bin-without-hadoop.tgz.sha512 2020-09-08 07:13 288
spark-2.4.7.tgz 2020-09-08 07:13 15M
spark-2.4.7.tgz.asc 2020-09-08 07:13 819
spark-2.4.7.tgz.sha512 2020-09-08 07:13 195
Paczki tgz
mają odpowiednie pliki kontrolne - hash SHA512 (.sha512
) i
podpis GPG (.asc
).
$ wget https://archive.apache.org/dist/spark/spark-2.4.7/spark-2.4.7-bin-hadoop2.7.tgz \
https://archive.apache.org/dist/spark/spark-2.4.7/spark-2.4.7-bin-hadoop2.7.tgz.asc \
https://archive.apache.org/dist/spark/spark-2.4.7/spark-2.4.7-bin-hadoop2.7.tgz.sha512
$ sha512sum spark-2.4.7-bin-hadoop2.7.tgz
0f5455672045f6110b030ce343c049855b7ba86c0ecb5e39a075ff9d093c7f648da55ded12e72ffe65d84c32dcd5418a6d764f2d6295a3f894a4286cc80ef478 spark-2.4.7-bin-hadoop2.7.tgz
$ cat spark-2.4.7-bin-hadoop2.7.tgz.sha512
spark-2.4.7-bin-hadoop2.7.tgz: 0F545567 2045F611 0B030CE3 43C04985 5B7BA86C
0ECB5E39 A075FF9D 093C7F64 8DA55DED 12E72FFE
65D84C32 DCD5418A 6D764F2D 6295A3F8 94A4286C
C80EF478
$ gpg --verify spark-2.4.7-bin-hadoop2.7.tgz.asc spark-2.4.7-bin-hadoop2.7.tgz
gpg: Signature made Tue 08 Sep 2020 07:48:32 AM CEST
gpg: using RSA key 66827234BC7B750E
gpg: Good signature from "Prashant Sharma (CODE SIGNING KEY) <prashant@apache.org>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: 234B 23A6 DCE2 B210 1781 D00E 6682 7234 BC7B 750E
$ tar xvzf spark-2.4.7-bin-hadoop2.7.tgz
minim.scala:
case class Foo(x: Int)
val ds = spark.createDataset(List(Foo(1), Foo(2), Foo(3), Foo(98)))
ds.filter(_.x % 2 == 0).show()
Uruchomienie:
spark-2.4.7-bin-hadoop2.7/bin/spark-shell -I minim.scala
+---+
| x|
+---+
| 2|
| 98|
+---+
scala>
Bonus
PySparka można zainstalować pip-em w wirtualnym środowisku:
$ python3 -m venv venv
$ source venv/bin/activate
$ pip install pyspark
$ pyspark
# ...
>>> spark.version
'3.1.1'
Można też doinstalować Jupytera:
$ pip install jupyter
$ jupyter notebook
Rozmaitości
- Sparka buduje się Mavenem,
build/mvn -DskipTests clean package
. Build trwa kilkanaście minut - i to już po pobraniu zależności, których jest dużo. - Jakie znaczenie ma wersja Hadoopa? API zmienia się między wersjami - więc Spark musi być skompilowany z tą samą wersją Hadoopa, która jest na klastrze.
- Czym różnią się wersje 2.6/2.7 Hadoopa? Przede wszystkim wersja
2.6
wspiera jeszcze Javę 6, a2.7
działa tylko pod JDK7+. Poza tym różnią je zwykłe drobiazgi - poprawki, usprawnienia, nowe funkcjonalności. - Jakie znaczenie ma wersja Scali? Kompatybilność binarna jest zachowywana
tylko w obrębie wersji “minor”. To znaczy, że kod skompilowany konkretną
wersją Scali da się zlinkować i uruchomić zarówno z nowszą, jak i starszą
Scalą w obrębie tej samej wersji “major”. Czyli np. biblioteka zbudowana
Scalą
2.11.4
będzie kompatybilna z2.11.2
lub2.11.8
- ale z2.12.3
już nie. - Maven Central udostępnia obecnie (w marcu 2021) JARy z wersją Scali
2.12
dla Sparka 3; najnowsze JARy dla Scali2.11
pochodzą ze Sparka2.4.7
. Włączenie wsparcia dla Scali2.13
jest planowane w wersji3.2.0
Sparka.
Linki
- Więcej o kompatybilności binarnej w Scali: https://docs.scala-lang.org/overviews/core/binary-compatibility-of-scala-releases.html
- Klucze PGP developerów Apache: https://downloads.apache.org/spark/KEYS
- Weryfikacja plików pobieranych z serwerów Apache: https://www.apache.org/info/verification.html