spark 整合 hive
spark-shell 整合 hive
-------------------------------------------------------------------------------------------------------------------------------
1、将 hive/conf/hive-site.xml 拷贝到 spark/conf 下 (目前只是在spark的master节点112,执行以下针对hive-site.xml 和各种jar的 操作,分节点没有操作,可能在做spark HA高可用的时候需要操作。)
将 hive/lib/mysql-connector-java-8.0.14.jar 拷贝到 spark-244/jars/mysql-connector-java-8.0.14.jar
2、启动错误 【The connection pool plugin of type “HikariCP” was not found in the CLASSPATH】
相关修正,
A : HikariCP 修改为dbcp 方式
修改连接池配置方式 spark/conf/【hive-site.xml】
如下:<name>dettanucleus.connectionPoolingType</name>
<value>dbcp</value>
B:拷贝 hive/lib/HikariCP-2.6.1.jar 到spark/jars
3、错误:Hive Schema version 1.2.0 does not match metastore‘s schema version 3.1.0 Metastore is not upgraded or corrupt
修改 spark/conf/hvie-site.xml中关闭版本验证
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
也可以修改数据库,方式如下:
select * from version;
update VERSION set SCHEMA_VERSION=‘2.1.1’ where VER_ID=1
****************************************************************************************
验证脚本:
bin/spark-shell --master yarn (或者集群方式启动 bin/spark-shell --master spark://master:7077 )
scala> import org.apache.spark.sql.hive.HiveContext
val hc=new HiveContext(sc)
hc.sql("show databases").show
hc.sql("use rdw").show
hc.sql("show tables").show
hc.sql("select * from dh_call_info2 ").show
结果如下:
scala> hc.sql("select * from dh_call_info2 ").show
+---+---------+----+-----------+-----------+
| id|telephone|name|create_time|update_time|
+---+---------+----+-----------+-----------+
| 1| 13511001|张三| 0| 0|
| 2| 13611001|李四| 0| 0|
+---+---------+----+-----------+-----------+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
spark-sql 整合 hive
完成以上spark-shell 整合 hive的步骤之后可以直接使用 spark-sql
bin/spark-sql --master yarn
执行命令
spark-sql> use rdw;
2019-12-10 15:02:51,968 INFO metastore.HiveMetaStore: 0: get_database: rdw
2019-12-10 15:02:51,968 INFO HiveMetaStore.audit: ugi=hadoop ip=unknown-ip-addr cmd=get_database: rdw
Time taken: 0.121 seconds
2019-12-10 15:02:52,032 INFO thriftserver.SparkSQLCLIDriver: Time taken: 0.121 seconds
spark-sql> select * from dh_call_info2;
XXXXXX..........
2019-12-10 15:02:16,646 INFO scheduler.DAGScheduler: Job 1 finished: processCmd at CliDriver.java:376, took 0.456059 s
1 13511001 张三 0 0
1 13511001 张三 0 0
2 13611001 李四 0 0
Time taken: 0.786 seconds, Fetched 3 row(s)
2019-12-10 15:02:16,649 INFO thriftserver.SparkSQLCLIDriver: Time taken: 0.786 seconds, Fetched 3 row(s)
=====================================================
SparkSession、SparkContext、SQLContext和HiveContext之间的区别。
参考地址: https://www.cnblogs.com/lillcol/p/11233456.html
SparkContext 是什么?
- 驱动程序使用SparkContext与集群进行连接和通信,它可以帮助执行Spark任务,并与资源管理器(如YARN 或Mesos)进行协调。
- 使用SparkContext,可以访问其他上下文,比如SQLContext和HiveContext。
- 使用SparkContext,我们可以为Spark作业设置配置参数。
如果您在spark-shell中,那么SparkContext已经为您提供了,并被分配给变量sc。
如果还没有SparkContext,可以先创建一个SparkConf。
//set up the spark configuration val sparkConf = new SparkConf().setAppName("hirw").setMaster("yarn") //get SparkContext using the SparkConf val sc = new SparkContext(sparkConf)
SQLContext 是什么?
SQLContext是通往SparkSQL的入口。下面是如何使用SparkContext创建SQLContext。
// sc is an existing SparkContext. val sqlContext = new org.apache.spark.sql.SQLContext(sc)
一旦有了SQLContext,就可以开始处理DataFrame、DataSet等。
HiveContext 是什么?
HiveContext是通往hive入口。
HiveContext具有SQLContext的所有功能。
实际上,如果查看API文档,就会发现HiveContext扩展了SQLContext,这意味着它支持SQLContext支持的功能以及更多(Hive特定的功能)
public class HiveContext extends SQLContext implements Logging
下面是如何使用SparkContext获得HiveContext
// sc is an existing SparkContext. val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
SparkSession 是什么?
SparkSession是在Spark 2.0中引入的,
它使开发人员可以轻松地使用它,这样我们就不用担心不同的上下文,
并简化了对不同上下文的访问。通过访问SparkSession,我们可以自动访问SparkContext。
下面是如何创建一个SparkSession
val spark = SparkSession .builder() .appName("hirw-test") .config("spark.some.config.option", "some-value") .getOrCreate()
SparkSession现在是Spark的新入口点,它替换了旧的SQLContext和HiveContext。注意,保留旧的SQLContext和HiveContext是为了向后兼容。
一旦我们访问了SparkSession,我们就可以开始使用DataFrame和Dataset了。
下面是我们如何使用Hive支持创建SparkSession。
val spark = SparkSession .builder() .appName("hirw-hive-test") .config("spark.sql.warehouse.dir", warehouseLocation) .enableHiveSupport() .getOrCreate()
因此,如果您正在使用Spark 2.0或更高版本,建议使用SparkSession。