我正在尝试访问Hive群集,而没有在我的计算机上下载Hive。我在这里读到,我只需要一个jdbc客户端即可。我有一个配置单元群集的URL,用户名和密码。我尝试用它们来制作hive-site.xml并以编程方式进行,尽管此方法似乎没有地方输入用户名和密码。无论我做什么,似乎以下错误使我无法访问hive: 无法实例化 org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
我觉得这是因为我没有从网上针对此错误的答案中下载Hive。在没有下载配置单元的情况下,我到底需要执行什么操作才能访问它,或者实际上我必须下载它?这是我的代码供参考:
spark = SparkSession \
.builder \
.appName("interfacing spark sql to hive metastore without
configuration file") \
.config("hive.metastore.uris", "https://prod-fmhdinsight-
eu.azurehdinsight.net") \
.enableHiveSupport() \
.getOrCreate()
data = [('First', 1), ('Second', 2), ('Third', 3), ('Fourth', 4),
('Fifth', 5)]
df = spark.createDataFrame(data)
# see the frame created
df.show()
# write the frame
df.write.mode("overwrite").saveAsTable("t4")
和hive-site.xml:
<configuration>
<property>
<name>hive.metastore.uris</name>
<value>https://prod-fmhdinsight-eu.azurehdinsight.net</value>
</property>
<!--
<property>
<name>hive.metastore.local</name>
<value>true</value>
</property>
<-->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>https://prod-fmhdinsight-eu.azurehdinsight.net</value>
<description>metadata is stored in a MySQL server</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>MySQL JDBC driver class</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>username</value>
<description>user name for connecting to mysql server
</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>password</value>
<description>password for connecting to mysql server
</description>
</property>
答案 0 :(得分:0)
tl; dr 将spark.sql.hive.metastore.jars
配置属性与maven
配合使用,以使Spark SQL下载所需的jar。
其他选项是builtin
(仅假设Hive 1.2.1)和Hive JAR的类路径(例如spark.sql.hive.metastore.jars="/Users/jacek/dev/apps/hive/lib/*"
)。
如果您的Hive Metastore可通过节俭协议远程访问,则您可能需要创建$SPARK_HOME/conf/hive-site.xml
,如下所示:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hive.metastore.uris</name>
<value>thrift://localhost:9083</value>
</property>
</configuration>
Hive的一个不错的功能是将配置属性定义为系统属性,因此上面的内容如下所示:
$SPARK_HOME/bin/spark-shell \
--driver-java-options="-Dhive.metastore.uris=thrift://localhost:9083"
您可能希望将以下内容添加到conf/log4j.properties
中以进行更底层的日志记录:
log4j.logger.org.apache.spark.sql.hive.HiveUtils$=ALL
log4j.logger.org.apache.spark.sql.internal.SharedState=ALL