我用docker创建了一个配置单元容器,创建了poke表,在调用show()函数后执行select查询时出现了这个错误。
代码:
from pyspark import SparkContext, SparkConf
from pyspark.sql import SparkSession, HiveContext
spark = SparkSession \
.builder \
.appName("Python Spark SQL Hive integration example") \
.config("hive.metastore.uris", "thrift://localhost:9083") \
.enableHiveSupport() \
.getOrCreate()
spark.sql("SELECT * FROM pokes").show()
错误是:
18/04/25 11:58:34信息sparkcontext:从traceback创建广播0(最近一次调用):file“/users/xx/scripts/hive/hive.py”,第12行,在spark.sql(“select*from pokes”).show()file“/usr/local/cell/apache spark/2.2.1/libexec/python/lib/pyspark.zip/pyspark/sql/dataframe.py”,第336行,在显示文件“/usr/local/cellar/apache spark/2.2.1/libexec/python/lib/py4j-0.10.4-src.zip/py4j/javaïgateway.py”的第1133行中,在调用文件“/usr/local/cellar/apache spark/2.2.1/libexec/python/lib/pyspark.zip/pyspark/sql/utils.py”的第79行中,在deco pyspark.sql.utils.illegalargumentexception:u'java.net.unknownhosteexception:namenode'
谢谢!
2条答案
按热度按时间9udxz4iz1#
我认为问题不在于.show(),而在于查询本身的执行。
在配置文件中搜索hdfs(hdfs site)并更改namenode的值:
我使用localhost作为地址,假设您使用的是独立的conf,否则您需要找出namenode的名称。而且它可能只需要hdfs而不是webhdfs作为地址的前缀。
之后,您可以尝试重新启动namenode:
ars1skjm2#
也许问题不在你的代码里。
检查您正在使用的javajdk的版本。我只知道
spark.sql().show()
与java jdk 11不兼容。如果您使用的是这个版本,只需降级到版本8。唐呢´不要忘记正确配置jdk8的环境变量。