• <nav id="dstbx"></nav>

    <nav id="dstbx"></nav>
    1. <form id="dstbx"></form>
    2. <small id="dstbx"></small>

      教育行業A股IPO第一股(股票代碼 003032)

      全國咨詢/投訴熱線:400-618-4000

      Spark SQL如何實現Hive數據倉庫的操作?

      更新時間:2021年04月14日16時43分 來源:傳智教育 瀏覽次數:

      傳智教育-一樣的教育,不一樣的品質


      Apache Hive是Hadoop上的SQL引擎,也是大數據系統中重要的數據倉庫工具,Spark SQL支持訪問Hive數據倉庫,然后在Spark引擎中進行統計分析。接下來介紹通過Spark SQL操作Hive數據倉庫的具體實現步驟。

      1. 準備環境

      Hive采用MySQL數據庫存放Hive元數據,因此為了能夠讓Spark訪問Hive,就需要將MySQL驅動包拷貝到Spark安裝路徑下的Jars目錄下,具體命令如下。

      $ cp mysql-connector-java-5.1.32.jar /export/servers/spark/jars/
      要把Spark SQL連接到一個部署好的Hive時,就必須要把hive-site.xml配置文件復制到Spark的配置文件目錄中,這里采用軟連接方式,具體命令如下。
      ln -s /export/servers/apache-hive-1.2.1-bin/conf/hive-site.xml \
       /export/servers/spark/conf/hive-site.xml

      2. 在Hive中創建數據庫和表

      接下來,我們首先在hadoop01節點上啟動Hive服務,創建數據庫和表,具體命令如下所示。

      #啟動hive程序
      $ hive
      #創建數據倉庫
      hive > create database sparksqltest;
      #創建數據表
      hive > create table if not exists \
      sparksqltest.person(id int,name string,age int);
      #切換數據庫
      hive > use sparksqltest;
      #向數據表中添加數據
      hive > insert into person values(1,"tom",29);
      hive > insert into person values(2,"jerry",20);

      目前,我們創建成功person數據表,并在該表中插入了兩條數據,下面克隆hadoop01會話窗口,執行Spark-Shell。



      3. Spark SQL操作Hive數據庫

      執行Spark-Shell,首先進入sparksqltest數據倉庫,查看當前數據倉庫中是否存在person表,具體代碼如下所示。

      $ spark-shell --master spark://hadoop01:7077
      scala > spark.sql("use sparksqltest")
      res0: org.apache.spark.sql.DataFrame = []
      scala > spark.sql("show tables").show;
      +------------+---------+-----------+
      | database  |tableName|isTemporary|
      +------------+---------+-----------+
      |sparksqltest| person |  false  |
      +------------+---------+-----------+

      從上述返回結果看出,當前Spark-Shell成功顯示出Hive數據倉庫中的person表。

      4.向Hive表寫入數據

      在插入數據之前,首先查看當前表中數據,具體代碼如下所示。

      scala> spark.sql("select * from person").show
      +---+--------+---+| id| name |age|
      +---+--------+---+| 1|  tom  | 29|| 2| jerry  | 20|
      +---+--------+---+

      從上述返回結果看出,當前person表中僅有兩條數據信息。

      下面在Spark-Shell中編寫代碼,添加兩條數據到person表中,代碼具體如下所示。

         scala > import java.util.Properties
         scala > import org.apache.spark.sql.types._
         scala > import org.apache.spark.sql.Row
         #創建數據
         scala > val personRDD = spark.sparkContext
            .parallelize(Array("3 zhangsan 22","4 lisi 29")).map(_.split(" "))
         #設置personRDD的Schema
         scala > val schema = 
              StructType(List(
                StructField("id",IntegerType,true),
                StructField("name",StringType,true),
                StructField("age",IntegerType,true)))
        #創建Row對象,每個Row對象都是rowRDD中的一行
        scala > val rowRDD = 
                personRDD.map(p => Row(p(0).toInt,p(1).trim,p(2).toInt))
        #建立rowRDD與Schema對應關系,創建DataFrame
        scala > val personDF = spark.createDataFrame(rowRDD,schema)
        #注冊臨時表
        scala > personDF.registerTempTable("t_person")
        #將數據插入Hive表
        scala > spark.sql("insert into person select * from t_person")
        #查詢表數據
        scala > spark.sql("select * from person").show
        +---+--------+---+                           
        | id|  name|age|
        +---+--------+---+
        | 1|   tom|  29|
        | 2|  jerry|  20|
        | 3|zhangsan|  22|
        | 4|  lisi | 29|
        +---+--------+---+

      上述代碼中,第5-6行代碼表示先創建2條數據,并將其轉換為RDD格式,由于Hive表中含有Schema信息,因此我們在第8-12行代碼中采用編程方式定義Schema信息,第14-17行代碼表示創建相應的DataFrame對象,第19-23行代碼表示通過DataFrame對象向Hive表中插入新數據,從24-31行代碼看出,數據已經成功插入到Hive表中。

      猜你喜歡:

      怎樣安裝Hive?本地和遠程操作安裝區別在哪里

      Redis、傳統數據庫、HBase以及Hive的區別

      大數據之Hive視頻教程[大數據培訓教程]

      傳智教育大數據培訓

      神马影院我不卡,农村丰满肥熟老妇女,午夜电影网,2018日日摸夜夜添夜夜添 网站地图 <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>