sql >> データベース >  >> RDS >> MariaDB

SQLとPrestoを使用したビッグデータ分析クエリの実行

    Prestoは、ビッグデータ処理用のオープンソースの並列分散SQLエンジンです。 Facebookによってゼロから開発されました。最初の内部リリースは2013年に行われ、ビッグデータの問題に対する非常に革新的なソリューションでした。

    地理的に配置された数百のサーバーとペタバイトのデータを使用して、FacebookはHadoopクラスターの代替プラットフォームを探し始めました。彼らのインフラストラクチャチームは、組織で広く知られているプログラミング言語であるSQLを使用して、分析バッチジョブの実行に必要な時間を短縮し、パイプライン開発を簡素化したいと考えていました。

    Presto Foundationによると、「Facebookは、300PBデータウェアハウスを含むいくつかの内部データストアに対するインタラクティブなクエリにPrestoを使用しています。 1,000人を超えるFacebookの従業員が毎日Prestoを使用して、1日あたりペタバイトを超える合計スキャンを行う30,000を超えるクエリを実行しています。」

    Facebookには例外的なデータウェアハウス環境がありますが、ビッグデータを扱う多くの組織にも同じ課題があります。

    このブログでは、tarファイルからDockerサーバーを使用して基本的なpresto環境をセットアップする方法を見ていきます。データソースとして、MySQLデータソースに焦点を当てますが、他の一般的なRDBMSでもかまいません。

    ビッグデータ環境でのPrestoの実行

    始める前に、その主要なアーキテクチャの原則を簡単に見てみましょう。 Prestoは、HiveなどのMapReduceジョブのパイプラインを使用してHDFSをクエリするツールの代替手段です。 Hive Prestoとは異なり、MapReduceは使用しません。 Prestoは、高レベルの演算子とインメモリ処理を備えた専用のクエリ実行エンジンで実行されます。

    Hive Prestoとは対照的に、データチャンクを同時に実行すると、すべてのステージでデータをストリーミングできます。これは、単一または分散した異種データソースに対してアドホック分析クエリを実行するように設計されています。 Hadoopプラットフォームから連絡を取り、リレーショナルデータベースやフラットファイルなどの他のデータストアにクエリを実行できます。

    Prestoは、集計、結合、または分析ウィンドウ関数を含む標準のANSISQLを使用します。 SQLはよく知られており、Javaで記述されたMapReduceと比較してはるかに使いやすいです。

    PrestoをDockerにデプロイする

    基本的なPresto構成は、事前構成されたDockerイメージまたはprestoサーバーtarballを使用してデプロイできます。

    DockerサーバーとPrestoCLIコンテナーは、次の方法で簡単にデプロイできます。

    docker run -d -p 127.0.0.1:8080:8080 --name presto starburstdata/presto
    docker exec -it presto presto-cli

    2つのPrestoサーバーバージョンから選択できます。 Starburstのコミュニティバージョンとエンタープライズバージョン。非本番サンドボックス環境で実行するため、この記事ではApacheバージョンを使用します。

    前提条件

    Prestoは完全にJavaで実装されており、システムにJVMをインストールする必要があります。 OpenJDKとOracleJavaの両方で動作します。最小バージョンはJava8u151またはJava11です。

    JAVA JDKをダウンロードするには、https://openjdk.java.net/またはhttps://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

    にアクセスしてください。

    Javaのバージョンは

    で確認できます
    $ java -version
    openjdk version "1.8.0_222"
    OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_222-b10)
    OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.222-b10, mixed mode)

    プレストインストール

    Prestoをインストールするには、サーバーtarとPrestoCLIjar実行可能ファイルをダウンロードします。

    tarballには、インストールディレクトリと呼ばれる単一のトップレベルディレクトリpresto-server-0.223が含まれます。

    $ wget https://repo1.maven.org/maven2/com/facebook/presto/presto-server/0.223/presto-server-0.223.tar.gz
    $ tar -xzvf presto-server-0.223.tar.gz
    $ cd presto-server-0.223/
    $ wget https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/0.223/presto-cli-0.223-executable.jar
    $ mv presto-cli-0.223-executable.jar presto
    $ chmod +x presto

    さらに、Prestoにはログなどを保存するためのデータディレクトリが必要です。

    インストールディレクトリの外にデータディレクトリを作成することをお勧めします。

    $ mkdir -p ~/data/presto/

    この場所は、トラブルシューティングを開始するときの場所です。

    Prestoの構成

    最初のインスタンスを開始する前に、一連の構成ファイルを作成する必要があります。インストールディレクトリ内にetc/ディレクトリを作成することから始めます。この場所には、次の構成ファイルが保持されます。

    など/

    • ノードのプロパティ-ノードの環境構成
    • JVM構成(jvm.config)-Java仮想マシン構成
    • Config Properties(config.properties)-Prestoサーバーの構成
    • カタログプロパティ-コネクタ(データソース)の構成
    • ログのプロパティ-ロガーの構成

    以下に、Prestoサンドボックスを実行するための基本的な構成をいくつか示します。詳細については、ドキュメントをご覧ください。

    vi etc / config.properties

    Config.properties
    coordinator = true
    node-scheduler.include-coordinator = true
    http-server.http.port = 8080
    query.max-memory = 5GB
    query.max-memory-per-node = 1GB
    discovery-server.enabled = true
    discovery.uri = http://localhost:8080
    vi etc/jvm.config
    -server
    -Xmx8G
    -XX:+UseG1GC
    -XX:G1HeapRegionSize=32M
    -XX:+UseGCOverheadLimit
    -XX:+ExplicitGCInvokesConcurrent
    -XX:+HeapDumpOnOutOfMemoryError
    -XX:+ExitOnOutOfMemoryError
    vi etc/log.properties
    com.facebook.presto = INFO

    vi etc / node.properties

    node.environment = production
    node.id = ffffffff-ffff-ffff-ffff-ffffffffffff
    node.data-dir = /Users/bartez/data/presto

    基本的なetc/構造は次のようになります。

    次のステップは、MySQLコネクタを設定することです。
    3つのノードMariaDBクラスタの1つに接続します。

    そして、OracleMySQL5.7を実行している別のスタンドアロンインスタンス。

    MySQLコネクタを使用すると、外部MySQLデータベースでテーブルをクエリおよび作成できます。これは、MariaDBやOracleのMySQLなどの異なるシステム間でデータを結合するために使用できます。

    Prestoはプラグ可能なコネクタを使用しており、設定は非常に簡単です。 MySQLコネクタを設定するには、etc / catalogにmysql.propertiesなどの名前のカタログプロパティファイルを作成して、MySQLコネクタをmysqlカタログとしてマウントします。他のサーバーへの接続を表す各ファイル。この場合、2つのファイルがあります:

    vi etc / catalog / mysq.properties:

    connector.name=mysql
    connection-url=jdbc:mysql://node1.net:3306
    connection-user=bart
    connection-password=secret

    vi etc / catalog / mysq2.properties

    connector.name=mysql
    connection-url=jdbc:mysql://node4.net:3306
    connection-user=bart2
    connection-password=secret

    Prestoの実行

    すべてが設定されたら、Prestoインスタンスを開始します。 prestoを開始するには、presoインストールの下のbinディレクトリに移動し、次のコマンドを実行します。

    $ bin/launcher start
    Started as 18363

    Prestoの実行を停止するには

    $ bin/launcher stop

    これで、サーバーが稼働しているときに、CLIを使用してPrestoに接続し、MySQLデータベースにクエリを実行できます。

    Prestoコンソールの実行を開始するには:

    ./presto --server localhost:8080 --catalog mysql --schema employees

    これで、CLIを介してデータベースにクエリを実行できます。

    presto:mysql> select * from mysql.employees.departments;
     dept_no |     dept_name
    ---------+--------------------
     d009    | Customer Service
     d005    | Development
     d002    | Finance
     d003    | Human Resources
     d001    | Marketing
     d004    | Production
     d006    | Quality Management
     d008    | Research
     d007    | Sales
    (9 rows)
    
    Query 20190730_232304_00019_uq3iu, FINISHED, 1 node
    Splits: 17 total, 17 done (100,00%)
    0:00 [9 rows, 0B] [81 rows/s, 0B/s]

    MariaDBクラスターとMySQLの両方のデータベースに従業員データベースが提供されています。
    wgethttps://github.com/datacharmer/test_db/archive/master.zip

    mysql -uroot -psecret < employees.sql

    クエリのステータスは、Presto Webコンソールにも表示されます: http:// localhost:8080 / ui /#

    Prestoクラスターの概要

    結論

    多くの有名な企業(Airbnb、Netflix、Twitterなど)は、低遅延パフォーマンスのためにPrestoを採用しています。これは間違いなく非常に興味深いソフトウェアであり、大量のETLデータウェアハウスプロセスを実行する必要がなくなる可能性があります。このブログでは、MySQLコネクタについて簡単に説明しましたが、これを使用して、HDFS、オブジェクトストア、RDBMS(SQL Server、Oracle、PostgreSQL)、Kafka、Cassandra、MongoDBなどのデータを分析できます。

    >
    1. SQLServerの列で数値以外の値を検索する

    2. WiXからSQLExpressをブートストラップしますか?

    3. microsoft.sqlserver.batchparser.dllが見つかりません

    4. PostgreSQLでの高可用性の管理–パートII:Replication Manager