文章目录
1. Spark SQL的功能
- Spark SQL可操作Hive、HBase、MySQL、Oracle、DB2等中的数据
- 提升了数据仓库的计算能力和计算复杂度
- 基于Spark SQL推出的DataFrame可实现数据仓库直接使用机器学习、图计算等复杂算法库深度数据挖掘数据仓库
- Spark SQL是数据仓库、数据挖掘及其科学计算和分析引擎工具
2. 配置与启动
2.1 添加配置文件
vi apache-hive-1.2.2-bin/conf/hive-site.xml
首先找到配置项
/hive.metastore.uris 回车
<property>
<name>hive.metastore.uris</name>
<value>thrift://master001:9083</value>
<description>Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.</description>
</property>
上述thrift协议的uri指向Hive服务端(Hive的安装节点),将配置文件拷贝到spark/conf目录下:
scp hive-site.xml ~/software/spark-2.3.3-bin-hadoop2.6/conf/
2.2 启动MySQL服务
service mysqld start
2.3 启动Hive元数据服务
nohup hive --service metastore &>metasotre.log &
2.4 启动Hadoop和Spark集群
cd /home/hadoop/software/hadoop-2.6.5/sbin
start-dfs.sh
cd /home/hadoop/software/spark-2.3.3-bin-hadoop2.6/sbin
./start-all.sh
3. 测试
3.1 启动Spark-Shell
./spark-shell --master spark://master001:7077
3.2 创建HiveContext对象
val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc)
3.3 显示Hive库中的所有表
hiveContext.sql("show tables").collect.foreach(println)
3.4操作Hive中的表
hiveContext.table("person").show()
hiveContext.sql("select count(*) from person").collect.foreach(println)
hiveContext.sql("select count(*) from person where age>22").collect.foreach(println)
hiveContext.sql("select count(*) from person where age>22 and name like '%dh%'").collect.foreach(println)
4. 小注
Spark SQL和SparkStreaming均基于SparkCore内核完成RDD计算
SQLContext是HiveContext的超接口,HiveContext是SQLContext接口的Hive实现(即底层的数据仓库可使用非Hive的其他存储来实现)