Spark-SQL连接Hive

1,首先运行一个简单程序:
   
object SparkSqlHive {
def main(args: Array[String]) {
val sparkConf = new SparkConf().setAppName("Spark SQL Hive")
val sc = new SparkContext(sparkConf)
val hiveContext = new HiveContext(sc)
hiveContext.sql("CREATE TABLE IF NOT EXISTS SCR (key INT, value STRING)")
//hiveContext.sql("")
}
}
根据报错提示,分别引入SPARK_HOME/lib_managed/jar下的三个包:
    
运行程序报错,内存溢出

可调整默认内存设置,如下图所示

文字为:-Dspark.master=local -Xms256m -Xmx512m -XX:PermSize=256m -XX:MaxPermSize=600m
运行结果,创建了/user/hive/warehouse/scr的空目录:
2.插入数据
    增加两行代码,
iveContext.sql("LOAD DATA LOCAL INPATH '/usr/local/spark-1.4.0/examples/src/main/resources/kv1.txt' INTO TABLE SCR")
hiveContext.sql("FROM src SELECT key, value").collect().foreach(println)
运行程序报错, 

提示无此表,
解决办法:
(1)命令行启动spark-sql
    (a)若提示1s之类的错误,将SPARK_HOME/conf/hive-site.xml文件中,设定为s,ms单位的参数修改.默认为ms.建议将localhost直接写成ip地址
    (b)若提示The specified datastore driver ("com.mysql.jdbc.Driver") was not found in the CLASSPATH, 将SPARK_HOME/conf/spark-env.sh文件最后加上两行
    export HIVE_HOME=/usr/local/hive-1.0.1
export SPARK_CLASSPATH=$SPARK_CLASSPATH:/usr/local/hive-1.0.1/lib/mysql-connector-java-5.1.29.jar
正常启动命令行:

     
可以show databases;
    显示default.
  spark-sql>use default;
  spark-sql>show tables;
显示spark_sql.即hive中存在的表.
spark-sql>select * from spark_sql;
报错,内存不足.(偶尔)
结果:  

若出现内存溢出现象,通过spark-sql --help可以看出,可以在启动时设置内存参数
spark-sql --driver-memory 2G --executor-memory 2G
可以查看结果,建表成功,数据保存在
(2)

你可能感兴趣的:(Spark-SQL连接Hive)