第5章 从Hive平滑过渡到Spark SQL
5-1 -课程目录
5-2 -A SQLContext的使用
The entry point into all functionality in Spark SQL is the SQLContext class, or one of its descendants. To create a basic SQLContext, all you need is a SparkContext.
val sc: SparkContext // An existing SparkContext. val sqlContext = new org.apache.spark.sql.SQLContext(sc) // this is used to implicitly convert an RDD to a DataFrame. import sqlContext.implicits._
5-3 -B HiveContext的使用
源码
只需要有hive.site
package com.imooc.spark
import org.apache.spark.sql.hive.HiveContext
import org.apache.spark.{SparkConf, SparkContext}
/**
* HiveContext的使用
* 使用时需要通过--jars 把mysql的驱动传递到classpath
*/
object HiveContextApp {
def main(args: Array[String]) {
//1)创建相应的Context
val sparkConf = new SparkConf()
//在测试或者生产中,AppName和Master我们是通过脚本进行指定
//sparkConf.setAppName("HiveContextApp").setMaster("local[2]")
val sc = new SparkContext(sparkConf)
val hiveContext = new HiveContext(sc)
//2)相关的处理:
hiveContext.table("emp").show
//3)关闭资源
sc.stop()
}
}
5-4 -C SparkSession的使用
参考源码:
package com.imooc.spark
import org.apache.spark.sql.SparkSession
/**
* SparkSession的使用
*/
object SparkSessionApp {
def main(args: Array[String]) {
val spark = SparkSession.builder().appName("SparkSessionApp")
.master("local[2]").getOrCreate()
val people = spark.read.json("file:///Users/rocky/data/people.json")
people.show()
spark.stop()
}
}
5-5 spark-shell&spark-sql的使用
1、启动hive
2、hive里面的表
3、另外的终端
拷贝到目录
缺少驱动包
总结:1 、配置hive.site.xml配置文件
2、--jars传递mysql驱动包
5-6 -thriftserver&beeline的使用
参考文档:
http://spark.apache.org/docs/latest/sql-programming-guide.html#running-the-thrift-jdbcodbc-server
To start the JDBC/ODBC server, run the following in the Spark directory:
./sbin/start-thriftserver.sh
thriftserver和普通的spark-shell/spark-sql有什么区别?
1)spark-shell/spark-sql都是一个spark application;
2)thriftserver,不管你启动多少个客户端(beeline/code),永远都是一个spark application 解决了一个数据共享的问题,多个客户端可以共享数据;
5-7 -jdbc方式编程访问
package com.imooc.spark
import java.sql.DriverManager
/**
* 通过JDBC的方式访问
*/
object SparkSQLThriftServerApp {
def main(args: Array[String]) {
Class.forName("org.apache.hive.jdbc.HiveDriver")
val conn = DriverManager.getConnection("jdbc:hive2://hadoop001:14000","hadoop","")
val pstmt = conn.prepareStatement("select empno, ename, sal from emp")
val rs = pstmt.executeQuery()
while (rs.next()) {
println("empno:" + rs.getInt("empno") +
" , ename:" + rs.getString("ename") +
" , sal:" + rs.getDouble("sal"))
}
rs.close()
pstmt.close()
conn.close()
}
}