System.setProperty("hive.metastore.uris", "thrift://METASTORE:9083");
final SparkConf conf = new SparkConf();
SparkContext sc = new SparkContext(conf);
HiveContext hiveContext = new HiveContext(sc);
或
final SparkConf conf = new SparkConf();
SparkContext sc = new SparkContext(conf);
HiveContext hiveContext = new HiveContext(sc);
hiveContext.setConf("hive.metastore.uris", "thrift://METASTORE:9083");
val spark=SparkSession.builder.master(“local”).appName(“testing”).enableHiveSupport().getOrCreate()
示例代码:
package sparkSQL
/**
* Created by venuk on 7/12/16.
*/
import org.apache.spark.sql.SparkSession
object hivetable {
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder.master("local[*]").appName("hivetable").enableHiveSupport().getOrCreate()
spark.sql("create table hivetab (name string, age int, location string) row format delimited fields terminated by ',' stored as textfile")
spark.sql("load data local inpath '/home/hadoop/Desktop/asl' into table hivetab").show()
val x = spark.sql("select * from hivetab")
x.write.saveAsTable("hivetab")
}
}
11条答案
按热度按时间zengzsys1#
对于Spark 1.x,可以设置为:
或
如果您的配置单元被Kerberized,请更新:
尝试在创建HiveContext之前设置这些:
snvhrwxg2#
在spark 2.0.+中,它应该看起来像这样:
别忘了用你的“hive.metastore.uri”替换它。这假设您已经启动了配置单元元存储服务(而不是配置单元服务器)。
wbgh16ku3#
我也面临同样的问题,但解决了。只需在Spark 2.0版本中执行以下步骤
**步骤1:**复制配置单元站点。从Hive conf文件夹到spark conf.的xml文件
**步骤2:**编辑Spark环境。sh文件并配置mysql驱动程序。(如果您使用Mysql作为配置单元元存储。)
或者将MySQL驱动程序添加到Maven/SBT(如果使用这些驱动程序)
**步骤3:**创建spark会话时,添加enableHiveSupport()
val spark=SparkSession.builder.master(“local”).appName(“testing”).enableHiveSupport().getOrCreate()
示例代码:
输出:
qcbq4gxm4#
Spark版本:2.0.2
配置单元版本:1.2.1
下面是我从Spark连接到Hive元存储的Java代码:
gmol16395#
有些类似问题标记为重复,这是为了从Spark连接到配置单元,而不使用
hive.metastore.uris
或单独的节约服务器(9083),也不复制配置单元站点。xml到SPARK_CONF_DIR。y1aodyip6#
在尝试从spark连接到hive元存储时,我观察到一个奇怪的行为,而没有使用hive-site.xml。
当我们在创建SparkSession时在spark代码中使用
hive.metastore.uris
属性时,一切都正常。但如果我们不在代码中指定,而是在使用带有--conf
标志的spark-shell
或spark-submit
时指定,则它将不起作用。它将引发如下所示的警告,并且不会连接到远程元存储。
一种解决方法是使用下面的属性。
4ngedf3f7#
对于Spark 3.x:
检查可用的数据库:
source
but5z9lq8#
下面的代码对我有用。我们可以忽略本地元存储的
hive.metastore.uris
配置,spark将在本地备用仓库目录中创建hive对象。w8biq8rn9#
在Hadoop 3中,Spark和Hive目录是分开的,因此:
对于Spark外壳(默认为
.enableHiveSupport()
),只需尝试:对于spark submit作业,创建如下所示的spark session:
然后在spark-submit命令中添加以下conf:
但对于ORC表(以及更一般的内部表),建议使用HiveWareHouse Connector。
0g0grzrc10#
正在设置spark.hadoop.metastore.catalog。default=Hive对我有效。
up9lanfz11#
我在Spark 2.4.8、Spark 3.1.3或Spark 3.2.2中遇到以下错误。hadoop版本是3.2、Hbase 2.4.14、Hive 3.1.13和Scala 2.12
线程“main”java.io中出现异常。IOException:由于以前的错误,无法创建记录读取器。有关更多详细信息,请查看任务完整日志中以前的日志行。在org.apache.spark.rdd.NewHadoopRDD.getPartitions(NewHadoopRDD.scala:131)的org.apacher.hadoop.hbase.mapreduce.TableInputFormatBase.getSplits(TableInput_FormatBase.java:253),在org.aaphe.sparket.rdd.rdd.$anonfun$partitions$2(rdd.scala:300),我调用spark-submit,如下所示
配置单元外部表是在Hbase顶部创建的,如下所示。
元存储在mysql中,我可以查询tbls表来验证hive中的外部表。还有其他人面临类似的问题吗?
注意:我这里没有使用HiveSpark连接器。