历史上存在的原理,以前都是使用hive来构建数据仓库,所以存在大量对hive所管理的数据查询的需求。而hive、shark、sparlSQL都可以进行hive的数据查询。shark是使用了hive的sql语法解析器和优化器,修改了执行器,使之物理执行过程是跑在spark上;而sparkSQL是使用了自身的语法解析器、优化器和执行器,同时sparkSQL还扩展了接口,不单单支持hive数据的查询,可以进行多种数据源的数据查询。
park+shark ,可以直接用hive原来的表。
phpHiveAdmin将HQL请求发送给HAproxy负载的Hive server集群。 三、phpHiveAdmin读取Metadata的数据,注意这里是只读,并不存在对Metadata的读写。因为元数据非常重要,涉及到底层数据的正确性,所以不能随意修改。
一、启动方法
/data/spark-140-bin-cdh4/bin/spark-sql --master spark://master:7077 --total-executor-cores 10 --executor-memory 1g --executor-cores 2
注:/data/spark-140-bin-cdh4/为spark的安装路径
/data/spark-140-bin-cdh4/bin/spark-sql –help 查看启动选项
--master MASTER_URL 指定master url
--executor-memory MEM 每个executor的内存,默认为1G
--total-executor-cores NUM 所有executor的总核数
-e <quoted-query-string> 直接执行查询SQL
-f <filename> 以文件方式批量执行SQL
二、Spark sql对hive支持的功能
1、查询语句:SELECT GROUP BY ORDER BY CLUSTER BY SORT BY
2、hive *** 作运算:
1) 关系运算:= ==, <>, <, >, >=, <=
2) 算术运算:+, -, , /, %
3) 逻辑运算:AND, &&, OR, ||
4) 复杂的数据结构
5) 数学函数:(sign, ln, cos, etc)
6) 字符串函数:
3、 UDF
4、 UDAF
5、 用户定义的序列化格式
6、join *** 作:JOIN {LEFT|RIGHT|FULL} OUTER JOIN LEFT SEMI JOIN CROSS JOIN
7、 unions *** 作:
8、 子查询: SELECT col FROM ( SELECT a + b AS col from t1) t2
9、Sampling
10、 Explain
11、 分区表
12、 视图
13、 hive ddl功能:CREATE TABLE、CREATE TABLE AS SELECT、ALTER TABLE
14、 支持的数据类型:TINYINT SMALLINT INT BIGINT BOOLEAN FLOAT DOUBLE STRING BINARY TIMESTAMPDATE ARRAY MAP STRUCT
三、Spark sql 在客户端编程方式进行查询数据
1、启动spark-shell
/spark-shell --master spark://master:7077 --total-executor-cores 10 --executor-memory 1g --executor-cores 2
2、编写程序
val sqlContext = new orgapachesparksqlSQLContext(sc)
val df = sqlContextreadjson("/examples/src/main/resources/peoplejson")
查看所有数据:dfshow()
查看表结构:dfprintSchema()
只看name列:dfselect("name")show()
对数据运算:dfselect(df("name"), df("age") + 1)show()
过滤数据:dffilter(df("age") > 21)show()
分组统计:dfgroupBy("age")count()show()
1、查询txt数据
import sqlContextimplicits_
case class Person(name: String, age: Int)
val people = sctextFile("/examples/src/main/resources/peopletxt")map(_split(","))map(p => Person(p(0), p(1)trimtoInt))toDF()
peopleregisterTempTable("people")
val teenagers = sqlContextsql("SELECT name, age FROM people WHERE age >= 13 AND age <= 19")
2、parquet文件
val df = sqlContextreadload("/examples/src/main/resources/usersparquet")
3、hdfs文件
val df = sqlContextreadload("hdfs://namenodeHadoop:9000/user/hive/warehouse/spark_testdb/test_parquet/part-r-00001gzparquet")
4、保存查询结果数据
val df = sqlContextreadload("/examples/src/main/resources/usersparquet")
dfselect("name", "favorite_color")writesave("namesAndFavColorsparquet“)
四、Spark sql性能调优
缓存数据表:sqlContextcacheTable("tableName")
取消缓存表:sqlContextuncacheTable("tableName")
sparksqlinMemoryColumnarStoragecompressedtrue 当设置为true时,Spark SQL将为基于数据统计信息的每列自动选择一个压缩算法。
sparksqlinMemoryColumnarStoragebatchSize 10000 柱状缓存的批数据大小。更大的批数据可以提高内存的利用率以及压缩效率,但有OOMs的风险
以上就是关于spark SQL和hive到底什么关系全部的内容,包括:spark SQL和hive到底什么关系、hive kerberos sparksql怎么创建hivecontext、如何使用 Spark SQL等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)