すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:Spark SQLを使用したLindormデータの読み取り

最終更新日:Sep 10, 2024

AnalyticDB for MySQLでは、Spark SQLを使用してLindormデータにアクセスできます。 このトピックでは、Spark SQLを使用してLindormのHiveテーブルとwideテーブルのデータにアクセスする方法について説明します。

前提条件

  • 単一ゾーンのLindormインスタンスが作成されます。 詳細は、インスタンスの作成をご参照ください。

    重要

    Lindormインスタンスに対して、LindormTable、Lindorm分散処理システム (LDPS) 、およびLindormDFSを有効化する必要があります。 LDPSの有効化方法については、「LDPSの有効化と設定の変更」をご参照ください。

  • OSSが有効化されています。 バケットとディレクトリがOSSに作成されます。 詳細については、「OSSの有効化」、「バケットの作成」、「ディレクトリの作成」をご参照ください。

  • AnalyticDB for MySQL Data Lakehouse Editionクラスターが作成されます。

  • AnalyticDB for MySQLのジョブリソースグループが作成されます。 Data Lakehouse Editionクラスター。 詳細については、「リソースグループの作成」をご参照ください。

  • AnalyticDB for MySQLのデータベースアカウントが作成されました Data Lakehouse Editionクラスター。

準備

  1. Lindormコンソールにログインし、インスタンスの詳細ページに移動して、LindormインスタンスのvSwitch IDを表示します。

  2. Lindormコンソールにログインし、アクセス制御ページに移動します。 [セキュリティグループ] タブをクリックして、Lindormインスタンスが属するセキュリティグループのIDを表示します。 セキュリティグループの追加方法については、「セキュリティグループの追加」をご参照ください。

LindormのHiveテーブルのデータにアクセスする

  1. Hadoop分散ファイルシステム (hdfs) クライアントHDFS-site構成情報を取得します。

    説明

    hdfsサイトの設定情報を取得するには、Lindormテクニカルサポート (DingTalk ID: s0s3eg3) にお問い合わせください。

  2. AnalyticDB for MySQL コンソールにログインします。 ホームページの左上でリージョンを選択します。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。   [Data Lakehouse Edition] タブで、管理するクラスターを見つけ、クラスターIDをクリックします。

  3. 左側のナビゲーションウィンドウで、[ジョブの開発]> [SQLの開発] を選択します。

  4. [SQLConsole] タブで、Sparkエンジンとジョブリソースグループを選択します。

  5. SQLConsoleタブで、次のコードを入力します。

    SET spark.adb.connectors = oss,external_hive;
    SET spark.adb.eni.enabled=true;
    SET spark.adb.eni.vswitchId=vsw-bp14pj8h0k5p0kwu3****;
    SET spark.adb.eni.securityGroupId=sg-bp11m93k021tp4ca****;
    SET spark.sql.catalog.lindorm_catalog = org.apache.spark.sql.hive.V2HiveExternalCatalog;
    SET spark.adb.eni.adbHostAlias.enabled=true;
    SET spark.sql.catalogImplementation = hive;
    -- Configure HDFS-related parameters.
    SET spark.sql.catalog.lindorm_catalog.spark.hadoop.hive.metastore.uris=thrift://ld-bp1ttz8833x9c****-proxy-ldps-hms.lindorm.aliyuncs.com:9083;
    SET spark.hadoop.dfs.nameservices=ld-bp1ttz8833x9c****;
    SET spark.hadoop.dfs.client.failover.proxy.provider.ld-bp1ttz8833x9c****=org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider;
    SET spark.hadoop.dfs.ha.automatic-failover.enabled=true;
    SET spark.hadoop.dfs.ha.namenodes.ld-bp1ttz8833x9c****=nn1,nn2;
    SET spark.hadoop.dfs.namenode.rpc-address.ld-bp1ttz8833x9c****.nn1=ld-bp1ttz8833x9c-master1-001.lindorm.rds.aliyuncs.com:8020;
    SET spark.hadoop.dfs.namenode.rpc-address.ld-bp1ttz8833x9c****.nn2=ld-bp1ttz8833x9c****-master2-001.lindorm.rds.aliyuncs.com:8020;
    SET spark.hadoop.dfs.namenode.http-address.ld-bp1ttz8833x9c****.nn1=ld-bp1ttz8833x9c****-master1-001.lindorm.rds.aliyuncs.com:50071;
    SET spark.hadoop.dfs.namenode.http-address.ld-bp1ttz8833x9c****.nn2=ld-bp1ttz8833x9c****-master2-001.lindorm.rds.aliyuncs.com:50071;
    
    -- Create an external database and an external table in OSS.
    CREATE DATABASE external_oss_db location 'oss://testBucketName/warehouse/db';
    CREATE TABLE external_oss_db.test(id int, name string) using parquet location 'oss://testBucketName/warehouse/db/test';
    
    -- Insert the data of a Hive table into the OSS external table.
    INSERT INTO external_oss_db.test SELECT * FROM lindorm_catalog.spark_test.test;
    
    -- Read the data of the OSS external table.
    SELECT * FROM external_oss_db.test;

    パラメーター

    必須

    説明

    spark.adb.connectors

    あり

    有効にするAnalyticDB for MySQL Sparkの組み込みコネクタの名前。 複数の名前はコンマ (,) で区切ります。 有効な値: oss、hudi、delta、adb、odps、external_hive、jindo。

    この例では、ossとexternal_hiveが使用されています。

    spark.adb.eni.enabled

    あり

    Elastic Network Interface (ENI) を有効にするかどうかを指定します。

    外部テーブルを使用して他の外部データソースにアクセスする場合は、ENIを有効にする必要があります。 有効な値:

    • true

    • false

    この例では、このパラメーターをtrueに設定します。

    spark.adb.eni.vswitchId

    あり

    準備中に取得されるLindormインスタンスのvSwitch ID。

    spark.adb.eni.securityGroupId

    あり

    準備中に取得したLindormインスタンスのセキュリティグループID。

    spark.sql.ca talog.lindorm_catalog

    あり

    Spark SQLがデータソースを構成するために使用するメソッド。

    このパラメーターは自動的にorg.apache.spark.sql.hive.V2HiveExternalCatalogに設定されます。

    説明

    talog_nameパラメーターのカスタムcatalog_name値を設定できe spark.sql.catalog.ca。 この例では、lindorm_catalogが使用されています。

    spark.adb.eni.adbHostAlias.enabled

    あり

    AnalyticDB for MySQLが必要とするドメイン名解決情報をドメイン名とIPアドレスのマッピングテーブルに自動的に書き込むかどうかを指定します。 有効な値:

    • true

    • false

    ENIを使用してEMR Hiveからデータを読み書きする場合は、このパラメーターをtrueに設定する必要があります。

    HDFS関連のパラメータ

    あり

    手順1で取得したhdfs-site構成情報。 形式: set spark.hadoop.<name >=< value>

    説明

    <name> および <value> パラメーターを設定情報の実際の値に置き換えます。

    場所

    あり

    外部テーブルのOSSパス。 形式: oss://<bucketname/database/table> この例では、oss:// testBucketName/warehouse/db/testが使用されています。

    説明

    <bucketname/database/table> パラメーターを実際のOSSパスに置き換えます。

  6. [実行] をクリックします。

  7. Sparkジョブを実行したら、スパークJAR開発ページをクリックし、ログのアクション列にアプリケーションタブでテーブルデータを表示します。 詳細については、「Sparkエディター」をご参照ください。

Lindormのワイドテーブルのデータにアクセスする

  1. HBase Java APIを使用したアクセス用のLindormTableのVPC (Virtual Private Cloud) エンドポイントを取得します。 詳細については、「エンドポイントの表示」トピックの「LindormTableのエンドポイントの表示」をご参照ください。

  2. Lindormインスタンスへの接続に必要なJARパッケージをダウンロードします。 JARパッケージを解凍してOSSにアップロードします。 詳細については、「OSSコンソールを使用して開始する」トピックの「オブジェクトのアップロード」セクションをご参照ください。

  3. AnalyticDB for MySQL コンソールにログインします。 ホームページの左上でリージョンを選択します。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。   [Data Lakehouse Edition] タブで、管理するクラスターを見つけ、クラスターIDをクリックします。

  4. 左側のナビゲーションウィンドウで、[ジョブの開発]> [SQLの開発] を選択します。

  5. [SQLConsole] タブで、Sparkエンジンとジョブリソースグループを選択します。

  6. SQLConsoleタブで、次のコードを入力します。

    SET spark.adb.eni.enabled=true;
    SET spark.adb.eni.vswitchId=vsw-bp14pj8h0k5p0kwu3****;
    SET spark.adb.eni.securityGroupId=sg-bp11m93k021tp4ca****;
    SET spark.sql.catalog.lindorm_table = com.alibaba.lindorm.ldspark.datasources.v2.LindormCatalog;
    SET spark.sql.catalog.lindorm_table.url=ld-bp1ttz8833x9c****-proxy-lindorm.lindorm.rds.aliyuncs.com:30020;
    SET spark.sql.catalog.lindorm_table.username=test;
    SET spark.sql.catalog.lindorm_table.password=password;
    add jar "oss://<bucketname>/hbase_jars/*";
    
    -- Create an external database and an external table in OSS.
    CREATE DATABASE IF NOT exists external_oss_db location 'oss://testBucketName/warehouse/db';
    CREATE TABLE IF NOT exists external_oss_db.lindorm_table_2(id string, name string) using parquet location 'oss://testBucketName/warehouse/db/lindorm_table_2';
    
    -- Insert the data of a wide table into the OSS external table.
    INSERT INTO external_oss_db.lindorm_table_2 SELECT * FROM lindorm_table.spark_test.tb;
    
    -- Read the data of the OSS external table.
    SELECT * FROM external_oss_db.lindorm_table_2;

    下表に、各パラメーターを説明します。

    パラメーター

    必須

    説明

    spark.adb.eni.enabled

    あり

    Elastic Network Interface (ENI) を有効にするかどうかを指定します。

    外部テーブルを使用して他の外部データソースにアクセスする場合は、ENIを有効にする必要があります。 有効な値:

    • true

    • false

    この例では、このパラメーターをtrueに設定します。

    spark.adb.eni.vswitchId

    あり

    準備中に取得されるLindormインスタンスのvSwitch ID。

    spark.adb.eni.securityGroupId

    あり

    準備中に取得したLindormインスタンスのセキュリティグループID。

    spark.sql.ca talog.lindorm_table

    あり

    Spark SQLがデータソースを構成するために使用するメソッド。

    このパラメーターは自動的にcom.alibaba.lindorm.ldspark.datasources.v2.LindormCatalogに設定されます。

    説明

    talog_nameパラメーターのカスタムcatalog_name値を設定できe spark.sql.catalog.ca。 この例では、lindorm_tableが使用されています。

    spark.sql.ca talog.lindorm_table.url

    あり

    手順1で取得したHBase Java APIによるアクセス用のVPCエンドポイント。

    spark.sql.ca talog.lindorm_table.username

    あり

    LindormTableのユーザー名とパスワード。

    パスワードを忘れた場合は、LindormTableのクラスター管理システムでパスワードを変更できます。

    spark.sql.ca talog.lindorm_table.password

    あり

    あり

    ステップ2でダウンロードされたパッケージのOSSパス。 この例では、oss:// testBucketName/hbase_jars/* が使用されています。

    場所

    あり

    外部テーブルのOSSパス。 形式: oss://<bucketname/database/table> この例では、oss:// testBucketName/warehouse/db/lindorm_table_2が使用されています。

    説明

    <bucketname/database/table> パラメーターを実際のOSSパスに置き換えます。

  7. [実行] をクリックします。

  8. Sparkジョブを実行したら、スパークJAR開発ページをクリックし、ログのアクション列にアプリケーションタブでテーブルデータを表示します。 詳細については、「Sparkエディター」をご参照ください。