SparkSQL:Spark整合Hive

1.安装Hive

Hive的安装,可以参看Hadoop-Hive快速入门,这里不再重述

2.拷贝Hive的配置文件

拷贝$HIVE_HOME/conf/hive-site.xml文件到$SPARK_HOME/conf下

3.测试Hive

本地数据测试文件people.txt

1       user01  123456
2       user02  123456
3       user03  123456
4       user04  123456
测试过程:新建一个内部表,导入本地数据,查询数据

    //实例化一个HiveContext
    val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
    //新建一个内部表
    sqlContext.sql("CREATE TABLE IF NOT EXISTS people (id bigint, username string, password string) row format delimited fields terminated by '\t'")
    //导入本地数据
    sqlContext.sql("LOAD DATA LOCAL INPATH '/tmp/people.txt' INTO TABLE people")
    //查询数据
    sqlContext.sql("FROM people SELECT id,username").collect().foreach(println)
导入数据后,会在hdfs上面得到相对应的文件

SparkSQL:Spark整合Hive_第1张图片

在Spark-shell中的执行结果:

16/11/19 17:34:30 INFO scheduler.DAGScheduler: Job 5 finished: collect at :30, took 2.737685 s
[1,user01]
[2,user02]
[3,user03]
[4,user04]

4.细节问题

默认情况下,Hive是使用derby保存metadata元数据,若使用Mysql来保存metadata,在启动Spark-shell是会出现一个异常
Exception in thread "main" Java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.Hadoop.hive.metastore.HiveMetaStoreClient

解决的方法是添加mysql的连接驱动到

export SPARK_CLASSPATH=$SPARK_CLASSPATH:/hadoop/hive-1.2.1/lib/mysql-connector-java-5.1.26-bin.jar



你可能感兴趣的:(Spark)