一、开发环境
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用户的密码。