我们在做Spark开发的时候有时候需要用SparkSQL将数据写入Hive表中,今天就来看看SparkSQL与Hive的整合。
SparkSQL就是借助的Hive构建的数据仓库。
一、首先要配置Hive-site.xml。
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop1:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>aura</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>aura</value>
</property>
</configuration>
二、把Hive-site.xml配置文件 复制到 $SPARK_HOME/conf目录下,在idea中开发需要将core-site.xml、hdfs-site.xml、hive-site.xml放在resources包下。
三、涉及驱动包的问题:
spark-sql --driver-class-path /usr/local/soft/spark/lib/mysql-connector-java-5.1.10.jar //mysql驱动
切记SPARK_CLASSPATH这一行必须的配置:(否则报错)
export SPARK_CLASSPATH=$HIVE_HOME/lib/mysql-connector-java-5.1.15-bin.jar:$SPARK_CLASSPATH
这里有点模糊,到底是怎么做的?以后再更新把。
四、Maven配置:
如果spark和Hive需要整合,那么需要在pom.xml文件中添加如下依赖:
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_2.11</artifactId>
<version>1.6.3</version>
<scope>provided</scope>
</dependency>
五、使用方式:
Spark1.6:
val conf = new SparkConf().setMaster("local").setAppName("HiveSourceTest")
val sc = new SparkContext(conf)
val hiveContext = new HiveContext(sc)
hiveContext.sql("create table worker (id string,salary double,bon double,dep int)")
hiveContext.sql("load data local inpath '/root/worker.txt' into table worker")
hiveContext.sql("select * from worker").show()
Spark2.0:
val sparkSession = SparkSession.builder.
master("local")
.appName("spark session example")
.config("spark.sql.warehouse.dir", "hdfs://hadoop1:9000/user/hive/warehouse")
.enableHiveSupport()
.getOrCreate()
spark.sql("") //与1.6写法一致
可以看出主要就是创建表和载入数据这两个语句。