Použití Apache Sparku ke čtení a zápisu dat Apache HBaseUse Apache Spark to read and write Apache HBase data

Apache HBase je dotazovaný obvykle s jeho nízké úrovně rozhraní API (kontrol, získá a vloží) nebo se syntaxí SQL pomocí Apache Phoenix.Apache HBase is typically queried either with its low-level API (scans, gets, and puts) or with a SQL syntax using Apache Phoenix. Apache také poskytuje Apache Spark HBase konektor, který je pohodlnou a výkonnější alternativou k dotazování a modifikaci dat uložených v HBase.Apache also provides the Apache Spark HBase Connector, which is a convenient and performant alternative to query and modify data stored by HBase.

PožadavkyPrerequisites

Celkový procesOverall process

Proces vysoké úrovně pro povolení váš cluster Spark na HDInsight cluster dotazovat vypadá takto:The high-level process for enabling your Spark cluster to query your HDInsight cluster is as follows:

  1. Příprava nějaká ukázková data v HBase.Prepare some sample data in HBase.
  2. Získejte hbase-site.xml soubor ze složky Konfigurace clusteru HBase (/ etc/hbase/potvrzení).Acquire the hbase-site.xml file from your HBase cluster configuration folder (/etc/hbase/conf).
  3. Ve složce Konfigurace Spark 2 (/ etc/spark2/conf), umístěte kopii hbase-site.xml.Place a copy of hbase-site.xml in your Spark 2 configuration folder (/etc/spark2/conf).
  4. Spustit spark-shell odkazující na konektoru Spark HBase pomocí jeho Maven v koordinuje packages možnost.Run spark-shell referencing the Spark HBase Connector by its Maven coordinates in the packages option.
  5. Definujte katalog, který mapuje schématu ze Spark HBase.Define a catalog that maps the schema from Spark to HBase.
  6. Práce s daty HBase pomocí RDD nebo rozhraní API datového rámce.Interact with the HBase data using either the RDD or DataFrame APIs.

Příprava ukázkových dat v Apache HBasePrepare sample data in Apache HBase

V tomto kroku vytvoření a vyplnění tabulky v Apache HBase, který potom můžete dotazovat pomocí Sparku.In this step, you create and populate a table in Apache HBase that you can then query using Spark.

  1. Použití ssh příkazu se připojte ke svému clusteru HBase.Use the ssh command to connect to your HBase cluster. Upravte následující příkaz tak, že nahradíte HBASECLUSTER s názvem vaší HBase clusteru a potom zadejte příkaz:Edit the command below by replacing HBASECLUSTER with the name of your HBase cluster, and then enter the command:

    ssh sshuser@HBASECLUSTER-ssh.azurehdinsight.net
    
  2. Použití hbase shell příkaz ke spuštění interaktivního prostředí HBase.Use the hbase shell command to start the HBase interactive shell. Zadejte následující příkaz v připojení SSH:Enter the following command in your SSH connection:

    hbase shell
    
  3. Použití create příkaz pro vytvoření tabulky HBase se dvěma skupinami sloupců.Use the create command to create an HBase table with two-column families. Zadejte následující příkaz:Enter the following command:

    create 'Contacts', 'Personal', 'Office'
    
  4. Použití put příkaz pro vložení hodnot v zadaném sloupci v zadaný řádek v určité tabulce.Use the put command to insert values at a specified column in a specified row in a particular table. Zadejte následující příkaz:Enter the following command:

    put 'Contacts', '1000', 'Personal:Name', 'John Dole'
    put 'Contacts', '1000', 'Personal:Phone', '1-425-000-0001'
    put 'Contacts', '1000', 'Office:Phone', '1-425-000-0002'
    put 'Contacts', '1000', 'Office:Address', '1111 San Gabriel Dr.'
    put 'Contacts', '8396', 'Personal:Name', 'Calvin Raji'
    put 'Contacts', '8396', 'Personal:Phone', '230-555-0191'
    put 'Contacts', '8396', 'Office:Phone', '230-555-0191'
    put 'Contacts', '8396', 'Office:Address', '5415 San Gabriel Dr.'
    
  5. Použití exit příkaz k zastavení interaktivní prostředí HBase.Use the exit command to stop the HBase interactive shell. Zadejte následující příkaz:Enter the following command:

    exit
    

Zkopírujte hbase-site.xml ke clusteru SparkCopy hbase-site.xml to Spark cluster

Zkopírujte hbase-site.xml z místního úložiště do kořenového adresáře výchozí úložiště clusteru Spark.Copy the hbase-site.xml from local storage to the root of your Spark cluster's default storage. Upravte následující příkaz tak, aby odrážely konfiguraci.Edit the command below to reflect your configuration. V otevřít relaci SSH pro HBase cluster, zadejte příkaz:Then, from your open SSH session to the HBase cluster, enter the command:

Hodnota syntaxeSyntax value Nová hodnotaNew value
Schéma identifikátoru URIURI scheme Upravte tak, aby odrážely úložiště.Modify to reflect your storage. Níže uvedené syntaxe je pro úložiště objektů blob s povoleným zabezpečeným přenosem.The syntax below is for blob storage with secure transfer enabled.
SPARK_STORAGE_CONTAINER Nahraďte výchozí název kontejneru úložiště používají pro clustery Spark.Replace with the default storage container name used for the Spark cluster.
SPARK_STORAGE_ACCOUNT Nahraďte výchozí název účtu úložiště pro Spark cluster.Replace with the default storage account name used for the Spark cluster.
hdfs dfs -copyFromLocal /etc/hbase/conf/hbase-site.xml wasbs://SPARK_STORAGE_CONTAINER@SPARK_STORAGE_ACCOUNT.blob.core.windows.net/

Ukončete vaše ssh připojení k vašemu clusteru HBase.Then exit your ssh connection to your HBase cluster.

Vložit hbase-site.xml na svém clusteru SparkPut hbase-site.xml on your Spark cluster

  1. Připojení k hlavnímu uzlu clusteru Sparku pomocí protokolu SSH.Connect to the head node of your Spark cluster using SSH.

  2. Zadejte následující příkaz pro kopírování hbase-site.xml z výchozí úložiště clusteru Spark ke složce Spark 2 konfigurace v místním úložišti clusteru:Enter the command below to copy hbase-site.xml from your Spark cluster's default storage to the Spark 2 configuration folder on the cluster's local storage:

    sudo hdfs dfs -copyToLocal /hbase-site.xml /etc/spark2/conf
    

Spusťte prostředí Sparku odkazující na konektor Spark HBaseRun Spark Shell referencing the Spark HBase Connector

  1. V otevřít relaci SSH ke clusteru Spark zadejte následující příkaz ke spuštění prostředí sparku:From your open SSH session to the Spark cluster, enter the command below to start a spark shell:

    spark-shell --packages com.hortonworks:shc-core:1.1.1-2.1-s_2.11 --repositories https://repo.hortonworks.com/content/groups/public/
    
  2. Ponechat otevřené tuto instanci prostředí Spark a pokračovat k dalšímu kroku.Keep this Spark Shell instance open and continue to the next step.

Zadejte katalogu a dotazDefine a Catalog and Query

V tomto kroku definujete objekt katalogu, který se mapuje schéma z Apache Spark pro Apache HBase.In this step, you define a catalog object that maps the schema from Apache Spark to Apache HBase.

  1. Otevřete prostředí Sparku, zadejte následující import příkazy:In your open Spark Shell, enter the following import statements:

    import org.apache.spark.sql.{SQLContext, _}
    import org.apache.spark.sql.execution.datasources.hbase._
    import org.apache.spark.{SparkConf, SparkContext}
    import spark.sqlContext.implicits._
    
  2. Zadejte následující příkaz k definování katalogu pro tabulky kontaktů, že kterou jste vytvořili v HBase:Enter the command below to define a catalog for the Contacts table you created in HBase:

    def catalog = s"""{
        |"table":{"namespace":"default", "name":"Contacts"},
        |"rowkey":"key",
        |"columns":{
        |"rowkey":{"cf":"rowkey", "col":"key", "type":"string"},
        |"officeAddress":{"cf":"Office", "col":"Address", "type":"string"},
        |"officePhone":{"cf":"Office", "col":"Phone", "type":"string"},
        |"personalName":{"cf":"Personal", "col":"Name", "type":"string"},
        |"personalPhone":{"cf":"Personal", "col":"Phone", "type":"string"}
        |}
    |}""".stripMargin
    

    Kód provede následující akce:The code performs the following:

    a.a. Definovat schéma katalogu s názvem tabulky HBase Contacts.Define a catalog schema for the HBase table named Contacts.
    b.b. Identifikujte rowkey jako keya mapování názvů sloupce používané v rodině sloupců, název sloupce a typ sloupce v HBase Spark.Identify the rowkey as key, and map the column names used in Spark to the column family, column name, and column type as used in HBase.
    c.c. Také musí být definováno v podrobnosti jako sloupec s názvem rowkey (rowkey), který má konkrétní sloupce řady cf z rowkey.The rowkey also has to be defined in detail as a named column (rowkey), which has a specific column family cf of rowkey.

  3. Zadejte následující příkaz k definování metodu, která poskytuje datový rámec kolem vašeho Contacts tabulky v HBase:Enter the command below to define a method that provides a DataFrame around your Contacts table in HBase:

    def withCatalog(cat: String): DataFrame = {
        spark.sqlContext
        .read
        .options(Map(HBaseTableCatalog.tableCatalog->cat))
        .format("org.apache.spark.sql.execution.datasources.hbase")
        .load()
     }
    
  4. Vytvoření instance datového rámce:Create an instance of the DataFrame:

    val df = withCatalog(catalog)
    
  5. Dotaz datového rámce:Query the DataFrame:

    df.show()
    
  6. Měli byste vidět dva řádky dat:You should see two rows of data:

     +------+--------------------+--------------+-------------+--------------+
     |rowkey|       officeAddress|   officePhone| personalName| personalPhone|
     +------+--------------------+--------------+-------------+--------------+
     |  1000|1111 San Gabriel Dr.|1-425-000-0002|    John Dole|1-425-000-0001|
     |  8396|5415 San Gabriel Dr.|  230-555-0191|  Calvin Raji|  230-555-0191|
     +------+--------------------+--------------+-------------+--------------+
    
  7. Zaregistrujte dočasnou tabulku můžete zadat dotaz na tabulku HBase pomocí Spark SQL:Register a temporary table so you can query the HBase table using Spark SQL:

    df.createTempView("contacts")
    
  8. Vydávání dotazů SQL proti contacts tabulky:Issue a SQL query against the contacts table:

    val query = spark.sqlContext.sql("select personalName, officeAddress from contacts")
    query.show()
    
  9. Měli byste vidět výsledky, jako jsou tyto:You should see results like these:

    +-------------+--------------------+
    | personalName|       officeAddress|
    +-------------+--------------------+
    |    John Dole|1111 San Gabriel Dr.|
    |  Calvin Raji|5415 San Gabriel Dr.|
    +-------------+--------------------+
    

Vložte nová dataInsert new data

  1. Chcete-li vložit nový záznam kontaktu, definujte ContactRecord třídy:To insert a new Contact record, define a ContactRecord class:

    case class ContactRecord(
        rowkey: String,
        officeAddress: String,
        officePhone: String,
        personalName: String,
        personalPhone: String
        )
    
  2. Vytvoření instance ContactRecord a vložit ho do pole:Create an instance of ContactRecord and put it in an array:

    val newContact = ContactRecord("16891", "40 Ellis St.", "674-555-0110", "John Jackson","230-555-0194")
    
    var newData = new Array[ContactRecord](1)
    newData(0) = newContact
    
  3. Pole nová data uložte do HBase:Save the array of new data to HBase:

    sc.parallelize(newData).toDF.write.options(Map(HBaseTableCatalog.tableCatalog -> catalog, HBaseTableCatalog.newTable -> "5")).format("org.apache.spark.sql.execution.datasources.hbase").save()
    
  4. Podívejte se na výsledky:Examine the results:

    df.show()
    
  5. Měl by se zobrazit výstup podobný tomuto:You should see output like this:

    +------+--------------------+--------------+------------+--------------+
    |rowkey|       officeAddress|   officePhone|personalName| personalPhone|
    +------+--------------------+--------------+------------+--------------+
    |  1000|1111 San Gabriel Dr.|1-425-000-0002|   John Dole|1-425-000-0001|
    | 16891|        40 Ellis St.|  674-555-0110|John Jackson|  230-555-0194|
    |  8396|5415 San Gabriel Dr.|  230-555-0191| Calvin Raji|  230-555-0191|
    +------+--------------------+--------------+------------+--------------+
    
  6. Ukončete prostředí sparku tak, že zadáte následující příkaz:Close the spark shell by entering the following command:

    :q
    

Další postupNext steps