Spark - lokalna instalacja

Andrzej Galiński · 2021-03-03

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, a 2.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 z 2.11.2 lub 2.11.8 - ale z 2.12.3 już nie.
  • Maven Central udostępnia obecnie (w marcu 2021) JARy z wersją Scali 2.12 dla Sparka 3; najnowsze JARy dla Scali 2.11 pochodzą ze Sparka 2.4.7. Włączenie wsparcia dla Scali 2.13 jest planowane w wersji 3.2.0 Sparka.

Linki