PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Big Data z PostgreSQL i Apache Spark

PostgreSQL jest dobrze znany jako najbardziej zaawansowana baza danych o otwartym kodzie źródłowym i pomaga zarządzać danymi bez względu na to, jak duży, mały lub inny jest zbiór danych, dzięki czemu można go używać do zarządzania lub analizowania dużych zbiorów danych. kilka sposobów, aby było to możliwe, np. Apache Spark. W tym blogu zobaczymy, czym jest Apache Spark i jak możemy go używać do pracy z naszą bazą danych PostgreSQL.

W przypadku analizy dużych zbiorów danych mamy dwa różne rodzaje analiz:

  • Analiza zbiorcza:na podstawie danych zebranych przez pewien okres.
  • Analiza w czasie rzeczywistym (strumień):na podstawie natychmiastowych danych w celu uzyskania natychmiastowego wyniku.

Co to jest Apache Spark?

Apache Spark to ujednolicony silnik analityczny do przetwarzania danych na dużą skalę, który może pracować zarówno na analizach wsadowych, jak i w czasie rzeczywistym w szybszy i łatwiejszy sposób.

Zapewnia interfejsy API wysokiego poziomu w językach Java, Scala, Python i R oraz zoptymalizowany silnik, który obsługuje ogólne wykresy wykonania.

Składniki Apache Spark

Biblioteki Apache Spark

Apache Spark zawiera różne biblioteki:

  • Spark SQL:to moduł do pracy z ustrukturyzowanymi danymi za pomocą SQL lub DataFrame API. Zapewnia powszechny sposób uzyskiwania dostępu do różnych źródeł danych, w tym Hive, Avro, Parquet, ORC, JSON i JDBC. Możesz nawet łączyć dane z tych źródeł.
  • Spark Streaming:Ułatwia tworzenie skalowalnych, odpornych na awarie aplikacji do przesyłania strumieniowego przy użyciu zintegrowanego z językiem interfejsu API do przetwarzania strumieniowego, umożliwiając pisanie zadań przesyłania strumieniowego w taki sam sposób, jak zadania wsadowe. Obsługuje Javę, Scala i Pythona. Spark Streaming odzyskuje zarówno utraconą pracę, jak i stan operatora po wyjęciu z pudełka, bez dodatkowego kodu z Twojej strony. Umożliwia ponowne użycie tego samego kodu do przetwarzania wsadowego, dołączanie do strumieni danych historycznych lub uruchamianie zapytań ad hoc w stanie strumienia.
  • MLib (uczenie maszynowe):to skalowalna biblioteka uczenia maszynowego. MLlib zawiera wysokiej jakości algorytmy, które wykorzystują iterację i mogą dawać lepsze wyniki niż aproksymacje jednoprzebiegowe czasami używane w MapReduce.
  • GraphX:Jest to interfejs API do wykresów i obliczeń równoległych do wykresów. GraphX ​​łączy ETL, analizę eksploracyjną i iteracyjne obliczanie wykresów w ramach jednego systemu. Możesz wyświetlać te same dane, co wykresy i kolekcje, efektywnie przekształcać i łączyć wykresy za pomocą RDD oraz pisać niestandardowe iteracyjne algorytmy wykresów za pomocą interfejsu API Pregel.

Zalety Apache Spark

Zgodnie z oficjalną dokumentacją, niektóre zalety Apache Spark to:

  • Szybkość:uruchamiaj zadania 100 razy szybciej. Apache Spark osiąga wysoką wydajność zarówno w przypadku danych wsadowych, jak i strumieniowych, korzystając z najnowocześniejszego harmonogramu DAG (Direct Acyclic Graph), optymalizatora zapytań i fizycznego silnika wykonawczego.
  • Łatwość użytkowania:Szybkie pisanie aplikacji w językach Java, Scala, Python, R i SQL. Spark oferuje ponad 80 operatorów wysokiego poziomu, które ułatwiają tworzenie równoległych aplikacji. Możesz go używać interaktywnie z powłok Scala, Python, R i SQL.
  • Ogólność:połącz SQL, przesyłanie strumieniowe i złożoną analizę. Spark obsługuje stos bibliotek, w tym SQL i DataFrames, MLlib do uczenia maszynowego, GraphX ​​i Spark Streaming. Możesz bezproblemowo łączyć te biblioteki w tej samej aplikacji.
  • Działa wszędzie:Spark działa na Hadoop, Apache Mesos, Kubernetes, samodzielnie lub w chmurze. Ma dostęp do różnych źródeł danych. Możesz uruchomić Spark w trybie autonomicznego klastra, na EC2, na Hadoop YARN, na Mesos lub na Kubernetes. Uzyskaj dostęp do danych w HDFS, Alluxio, Apache Cassandra, Apache HBase, Apache Hive i setkach innych źródeł danych.

Zobaczmy teraz, jak możemy zintegrować to z naszą bazą danych PostgreSQL.

Jak używać Apache Spark z PostgreSQL

Załóżmy, że masz działający klaster PostgreSQL. Do tego zadania użyjemy serwera PostgreSQL 11 działającego na CentOS7.

Najpierw utwórzmy naszą testową bazę danych na naszym serwerze PostgreSQL:

postgres=# CREATE DATABASE testing;
CREATE DATABASE
postgres=# \c testing
You are now connected to database "testing" as user "postgres".

Teraz utworzymy tabelę o nazwie t1:

testing=# CREATE TABLE t1 (id int, name text);
CREATE TABLE

I wstaw tam jakieś dane:

testing=# INSERT INTO t1 VALUES (1,'name1');
INSERT 0 1
testing=# INSERT INTO t1 VALUES (2,'name2');
INSERT 0 1

Sprawdź utworzone dane:

testing=# SELECT * FROM t1;
 id | name
----+-------
  1 | name1
  2 | name2
(2 rows)

Aby połączyć Apache Spark z naszą bazą danych PostgreSQL, użyjemy łącznika JDBC. Możesz go pobrać stąd.

$ wget https://jdbc.postgresql.org/download/postgresql-42.2.6.jar

Teraz zainstalujmy Apache Spark. W tym celu musimy pobrać pakiety Spark stąd.

$ wget http://us.mirrors.quenda.co/apache/spark/spark-2.4.3/spark-2.4.3-bin-hadoop2.7.tgz
$ tar zxvf spark-2.4.3-bin-hadoop2.7.tgz
$ cd spark-2.4.3-bin-hadoop2.7/

Aby uruchomić powłokę Spark, potrzebujemy zainstalowanej na naszym serwerze JAVA:

$  yum install java

Teraz możemy uruchomić naszą Spark Shell:

$ ./bin/spark-shell
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Spark context Web UI available at http://ApacheSpark1:4040
Spark context available as 'sc' (master = local[*], app id = local-1563907528854).
Spark session available as 'spark'.
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 2.4.3
      /_/

Using Scala version 2.11.12 (OpenJDK 64-Bit Server VM, Java 1.8.0_212)
Type in expressions to have them evaluated.
Type :help for more information.

scala>

Możemy uzyskać dostęp do naszego kontekstowego interfejsu użytkownika Sparka dostępnego w porcie 4040 na naszym serwerze:

Interfejs użytkownika Apache Spark

Do powłoki Spark musimy dodać sterownik PostgreSQL JDBC:

scala> :require /path/to/postgresql-42.2.6.jar
Added '/path/to/postgresql-42.2.6.jar' to classpath.
scala> import java.util.Properties
import java.util.Properties

I dodaj informacje JDBC, które będą używane przez Spark:

scala> val url = "jdbc:postgresql://localhost:5432/testing"
url: String = jdbc:postgresql://localhost:5432/testing
scala> val connectionProperties = new Properties()
connectionProperties: java.util.Properties = {}
scala> connectionProperties.setProperty("Driver", "org.postgresql.Driver")
res6: Object = null

Teraz możemy wykonywać zapytania SQL. Najpierw zdefiniujmy zapytanie1 jako SELECT * FROM t1, naszą tabelę testową.

scala> val query1 = "(SELECT * FROM t1) as q1"
query1: String = (SELECT * FROM t1) as q1

I utwórz ramkę DataFrame:

scala> val query1df = spark.read.jdbc(url, query1, connectionProperties)
query1df: org.apache.spark.sql.DataFrame = [id: int, name: string]

Teraz możemy wykonać akcję na tej ramce DataFrame:

scala> query1df.show()
+---+-----+
| id| name|
+---+-----+
|  1|name1|
|  2|name2|
+---+-----+
scala> query1df.explain
== Physical Plan ==
*(1) Scan JDBCRelation((SELECT * FROM t1) as q1) [numPartitions=1] [id#19,name#20] PushedFilters: [], ReadSchema: struct<id:int,name:string>

Możemy dodać więcej wartości i uruchomić go ponownie, aby potwierdzić, że zwraca bieżące wartości.

PostgreSQL

testing=# INSERT INTO t1 VALUES (10,'name10'), (11,'name11'), (12,'name12'), (13,'name13'), (14,'name14'), (15,'name15');
INSERT 0 6
testing=# SELECT * FROM t1;
 id |  name
----+--------
  1 | name1
  2 | name2
 10 | name10
 11 | name11
 12 | name12
 13 | name13
 14 | name14
 15 | name15
(8 rows)

Iskra

scala> query1df.show()
+---+------+
| id|  name|
+---+------+
|  1| name1|
|  2| name2|
| 10|name10|
| 11|name11|
| 12|name12|
| 13|name13|
| 14|name14|
| 15|name15|
+---+------+

W naszym przykładzie pokazujemy tylko, jak Apache Spark współpracuje z naszą bazą danych PostgreSQL, a nie jak zarządza naszymi informacjami Big Data.

Wniosek

W dzisiejszych czasach dość często pojawia się wyzwanie związane z zarządzaniem dużymi danymi w firmie, a jak widzieliśmy, możemy użyć Apache Spark, aby sobie z tym poradzić i wykorzystać wszystkie funkcje, o których wspomnieliśmy wcześniej. Big data to ogromny świat, więc możesz sprawdzić oficjalną dokumentację, aby uzyskać więcej informacji na temat korzystania z Apache Spark i PostgreSQL i dopasować ją do swoich wymagań.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zmienić pozycję kolumny w tabeli bazy danych PostgreSQL?

  2. Porównanie tabel tymczasowych dla PostgreSQL i Oracle GTT

  3. GROUP BY w Postgres - brak równości dla typu danych JSON?

  4. Uporządkowana liczba kolejnych powtórzeń/duplikatów

  5. Zduplikowana wartość klucza IntegrityError narusza ograniczenie unikalności — django/postgres