Spark2.x整合Hive

一、開發環境

spark:2.1.1
hive:1.2.2
hadoop:2.7.6
開發工具:Idea

二、在Idea中創建maven項目,pom文件引入以下依賴。

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <!-- spark-core依賴 -->
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-core_2.11</artifactId>
      <version>2.1.1</version>
    </dependency>
    <!-- spark-sql依賴 -->
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-sql_2.11</artifactId>
      <version>2.1.1</version>
    </dependency>
    <!-- spark和hive整合的依賴 -->
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-hive_2.11</artifactId>
      <version>2.1.1</version>
    </dependency>
    <!-- mysql驅動包依賴 -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.38</version>
    </dependency>
  </dependencies>

三、將core-site.xml、hdfs-site.xml、hive-site.xml拷貝到項目的resources目錄下,spark應用根據這些配置文件連接hive。

四、編寫spark測試程序,讀取hive中某個表的信息並打印到控制檯。

object SparkOnHiveTest {

  def main(args: Array[String]): Unit = {
    //1.創建sparkConf
    val conf = new SparkConf().setMaster("local[*]")
      .setAppName("sparkOnHive")
    //2.創建sparkSession
    val spark = SparkSession.builder()
      .config(conf)
        .config("spark.sql.warehouse.dir","./spark-warehouse")
      .enableHiveSupport()
      .getOrCreate()
    //3.讀取hive信息
    spark.sql("use bigdata")
    val resultDF: DataFrame = spark.sql("select * from page_click")
    //4.打印結果
    resultDF.show(10)
    //5.關閉會話
    spark.close()
  }

}

五、查詢結果如下:

六、可能遇到的錯誤: java.sql.SQLException: null, message from server: "Host '192.168.18.1' is not allowed to connect to this MySQL server"。

上述步驟都完成後,運行程序發現無法連接hive的存放元數據的mysql,該異常表示該Host不是遠程對象,不能通過該對象遠程訪問數據庫,即該host沒有遠程訪問數據庫的權限,只需登錄mysql爲該host授權即可。

授權語句:

grant all on *.* to root@'192.168.18.1' identified by 'root';

flush privileges;

其中,@後面是主機名,to後面是用戶名,這裏使用root;by 後面爲root用戶的密碼。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章