在win环境下开发spark应用,不可避免的会要在开发完功能模块后进行单元测试,期间我就遇到过问题,在spark本地模式下始终无法操作hive,不是找不到database就是找不到table。这里我将最终解决的方法记录下来。
依赖:jdk1.8,scala-2.11.8
开发环境:ideaIU-2016.2.1
测试环境:win7
本地操作hive:
SparkTestHive.scala
package com.dtxy.xbdp.widget.dataIO import org.apache.spark.sql.types.{StringType, StructField, StructType} import org.apache.spark.sql.{Row, SaveMode, SparkSession} /** * Created by MANGOCOOL on 2016/9/18. */ object SparkTestHive { def main(args: Array[String]): Unit = { System.setProperty("hadoop.home.dir", "E:\\Program Files\\hadoop-2.7.0") val spark = SparkSession .builder() .appName("Spark SQL Example") .master("local") .config("spark.some.config.option", "some-value") .enableHiveSupport() .config("spark.sql.warehouse.dir","file:///") //不加则报错 Relative path in absolute URI: file:/spark-warehouse .getOrCreate() val pointRDD = spark.sparkContext.textFile("D:\\your_project\\src\\main\\resources\\point.txt") val schemaString = "name val1 val2" val fields = schemaString.split(" ") .map(fieldName => StructField(fieldName, StringType, nullable = true)) val schema = StructType(fields) val rowRDD = pointRDD .map(_.split(",")) .map(attributes => Row(attributes(0), attributes(1), attributes(2))) val pointDF = spark.createDataFrame(rowRDD, schema) val path = "default.point" pointDF.write.mode(SaveMode.Overwrite).saveAsTable(path) spark.sql("select * from point").show() } }point.txt
point0,101,200 point1,201,300 point2,300,200 point3,300,500 point4,500,600 point5,800,700 point6,700,800 point7,800,900 point8,900,100 point9,800,900
代码执行完成后,你会发现在本机项目盘符下生成了一个point的文件夹,里面还有4个数据文件,这个就是point表的数据了。
其实在集群中,存储也是一样的,只不过文件系统是hdfs。
其中point就是你的表,而default数据库则是你的盘符。
你可以根据最后一句代码得到验证:
spark.sql("select * from point").show()
远程操作hive:
package com.dtxy.xbdp.widget.dataIO import org.apache.spark.sql.types.{StringType, StructField, StructType} import org.apache.spark.sql.{Row, SaveMode, SparkSession} /** * Created by MANGOCOOL on 2016/9/18. */ object SparkTestHive { def main(args: Array[String]): Unit = { System.setProperty("hadoop.home.dir", "E:\\Program Files\\hadoop-2.7.0") val spark = SparkSession .builder() .appName("Spark SQL Example") .master("local") .config("spark.some.config.option", "some-value") .enableHiveSupport() .config("spark.sql.warehouse.dir","file:///") //不加则报错 Relative path in absolute URI: file:/spark-warehouse .getOrCreate() val pointRDD = spark.sparkContext.textFile("hdfs://masters/point.txt")//不同点 val schemaString = "name val1 val2" val fields = schemaString.split(" ") .map(fieldName => StructField(fieldName, StringType, nullable = true)) val schema = StructType(fields) val rowRDD = pointRDD .map(_.split(",")) .map(attributes => Row(attributes(0), attributes(1), attributes(2))) val pointDF = spark.createDataFrame(rowRDD, schema) val path = "xbdp.point"//不同点 pointDF.write.mode(SaveMode.Overwrite).saveAsTable(path) spark.sql("select * from xbdp.point").show()//不同点 } }
代码的改动不是很大,还有一个重要的变化就是需要将hadoop和hive的配置文件(core-site.xml, hdfs-site.xml, hive-site.xml, yarn-site.xml)cp到工程的resources,idea会默认加载,如果是eclipse的话需要通过代码载入
标签: win7 dataframe hive local remote
分享:
上一篇解决IDEA maven变更后自动重置LanguageLevel和JavaCompiler版本的问题
下一篇The root scratch dir: /tmp/hive on HDFS should be writable. Current permissions are: rwx------
崇尚极简,热爱技术,喜欢唱歌,热衷旅行,爱好电子产品的一介码农。
联系QQ:58742094
联系电话:
工作邮箱:
当你的才华还撑不起你的野心的时候,你就应该静下心来学习,永不止步!
人生之旅历途甚长,所争决不在一年半月,万不可因此着急失望,招精神之萎葸。
Copyright 2015- 芒果酷(mangocool.com) All rights reserved. 湘ICP备14019394号
免责声明:本网站部分文章转载其他媒体,意在为公众提供免费服务。如有信息侵犯了您的权益,可与本网站联系,本网站将尽快予以撤除。