在spark sql select查询中执行.show()时出错

o2gm4chl  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(530)

我用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'
谢谢!

9udxz4iz

9udxz4iz1#

我认为问题不在于.show(),而在于查询本身的执行。
在配置文件中搜索hdfs(hdfs site)并更改namenode的值:

<configuration>
 <property>
     <name>dfs.namenode.http-address</name>
     <value>webhdfs://localhost:50070</value>
 </property>
</configuration>

我使用localhost作为地址,假设您使用的是独立的conf,否则您需要找出namenode的名称。而且它可能只需要hdfs而不是webhdfs作为地址的前缀。
之后,您可以尝试重新启动namenode:

$HADOOP_HOME/bin/stop.dfs.sh
$HADOOP_HOME/bin/hadoop-daemon.sh stop namenode
$HADOOP_HOME/bin/start.dfs.sh
$HADOOP_HOME/bin/hadoop-daemon.sh start namenode
ars1skjm

ars1skjm2#

也许问题不在你的代码里。
检查您正在使用的javajdk的版本。我只知道 spark.sql().show() 与java jdk 11不兼容。如果您使用的是这个版本,只需降级到版本8。唐呢´不要忘记正确配置jdk8的环境变量。

相关问题