赞
踩
Spark整个生态群中,底层计算引擎是基于RDD的。这个也是为什么Spark计算性能比较快的原因。
通常我们狭隘上理解的SparkRDD计算引擎,是指RDD底层生成DAG执行计划,基于DAG生成详细的excutor和更细粒度的多线程池模型来减少task启动开销。有如下特点:
示例:
object MyScalaWordCount {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("MyScalaWordCount").setMaster("local");
//创建一个SparkContext对象
val sc = new SparkContext(conf)
//执行WordCount
val result = sc.textFile("hdfs://bigdata02:9000/wordcount.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_)
//打印在屏幕上
result.foreach(println)
//释放资源
sc.stop()
}
}
spark sql的目的就是为懂得dbms但是不熟悉spark的同学准备的。
spark sql的实现过程就是用spark sql解析引擎解析sql语句(中间可能会有一些优化),最终还是转换为spark rdd的方式去执行。
个人理解spark sql = spark sql解析引擎 + spark rdd计算。
示例:
// Primitive types (Int, String, etc) and Product types (case classes) encoders are
// supported by importing this when creating a Dataset.
import spark.implicits._
// A JSON dataset is pointed to by path.
// The path can be either a single text file or a directory storing text files
val path = "examples/src/main/resources/people.json"
val peopleDF = spark.read.json(path)
// The inferred schema can be visualized using the printSchema() method
peopleDF.printSchema()
// root
// |-- age: long (nullable = true)
// |-- name: string (nullable = true)
// Creates a temporary view using the DataFrame
peopleDF.createOrReplaceTempView("people")
// SQL statements can be run by using the sql methods provided by spark
val teenagerNamesDF = spark.sql("SELECT name FROM people WHERE age BETWEEN 13 AND 19")
teenagerNamesDF.show()
个人感觉spark rdd的性能更高一些,毕竟不需要解析sql语句。
将hive底层的计算引擎由mr换位spark。
个人理解 hive on spark = hive sql解析引擎 + spark rdd计算。
在使用conn进行SQL操作之前,先执行SQL将hive.exection.engine设置为spark即可使用Hive on Spark。
Spark通过Spark-SQL使用hive 语句,操作hive,底层运行的还是 spark rdd:
个人理解,知识单纯hive当成了数据源,其他的用spark实现。
前置配置:
代码:
import org.apache.spark.sql.SparkSession
val warehouseLocation = "spark-warehouse"
val spark = SparkSession
.builder()
.appName("Spark Hive Example")
.config("spark.sql.warehouse.dir", warehouseLocation)
.enableHiveSupport()
.getOrCreate()
import spark.implicits._
import spark.sql
// 到这里,你就可以随意读取Hive了
// test是hive中的表名
df = sql("select * from test") // 返回spaek的DataFrame
df.show()
// 这里可以用sql语句,对Hive中的数据表进行任何的读写操作
sql(".....")
最终都转换为spark rdd进行计算。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。