一、開發環境
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用戶的密碼。