【问题标题】:Spark hiveContext won't load for DataframesSpark hiveContext 不会为 Dataframes 加载
【发布时间】:2016-03-12 20:00:12
【问题描述】:

我正在尝试在 Spark DataFrames 中使用“窗口”函数。我知道我需要使用 HiveContext(需要 Hive)。所以我用以下命令构建了 Spark:

./make-distribution.sh --name custom-spark --tgz -Phadoop-2.6 -Pyarn -Phive -Phive-thriftserver

然而,当我尝试从 Python 调用 HiveContext 时,我收到以下错误:

您必须使用 Hive 构建 Spark。 Export 'SPARK_HIVE=true' and run build/sbt assembly", Py4JJavaError(u'An error occurred while calling None.org.apache.spark.sql.hive.HiveContext.\n', JavaObject id=o264))

当我使用 sqlContext._get_hive_ctx() 打印有关 Hive 错误的详细信息时,我得到:

Py4JJavaError:调用 None.org.apache.spark.sql.hive.HiveContext 时出错。 :java.lang.RuntimeException:java.lang.RuntimeException:无法实例化org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient 在 org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:522) 在 org.apache.spark.sql.hive.client.ClientWrapper.(ClientWrapper.scala:171) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:526) 在 org.apache.spark.sql.hive.client.IsolatedClientLoader.liftedTree1$1(IsolatedClientLoader.scala:183) 在 org.apache.spark.sql.hive.client.IsolatedClientLoader.(IsolatedClientLoader.scala:179) 在 org.apache.spark.sql.hive.HiveContext.metadataHive$lzycompute(HiveContext.scala:226) 在 org.apache.spark.sql.hive.HiveContext.metadataHive(HiveContext.scala:185) 在 org.apache.spark.sql.hive.HiveContext.setConf(HiveContext.scala:392) 在 org.apache.spark.sql.hive.HiveContext.defaultOverrides(HiveContext.scala:174) 在 org.apache.spark.sql.hive.HiveContext.(HiveContext.scala:177) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:526) 在 py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:234) 在 py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:379) 在 py4j.Gateway.invoke(Gateway.java:214) 在 py4j.commands.ConstructorCommand.invokeConstructor(ConstructorCommand.java:79) 在 py4j.commands.ConstructorCommand.execute(ConstructorCommand.java:68) 在 py4j.GatewayConnection.run(GatewayConnection.java:207) 在 java.lang.Thread.run(Thread.java:745) 引起:java.lang.RuntimeException:无法实例化 org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient 在 org.apache.hadoop.hive.metastore.MetaStoreUtils.newInstance(MetaStoreUtils.java:1523) 在 org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.(RetryingMetaStoreClient.java:86) 在 org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.getProxy(RetryingMetaStoreClient.java:132) 在 org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.getProxy(RetryingMetaStoreClient.java:104) 在 org.apache.hadoop.hive.ql.metadata.Hive.createMetaStoreClient(Hive.java:3005) 在 org.apache.hadoop.hive.ql.metadata.Hive.getMSC(Hive.java:3024) 在 org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:503) 还有 23 个 引起:java.lang.reflect.InvocationTargetException 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:526) 在 org.apache.hadoop.hive.metastore.MetaStoreUtils.newInstance(MetaStoreUtils.java:1521) 还有 29 个 原因:javax.jdo.JDOFatalDataStoreException:无法使用类加载器 org.apache.spark.sql.hive.client.IsolatedClientLoader$$anon$1@7ffe486b 启动数据库“metastore_db”,有关详细信息,请参阅下一个异常。 嵌套的Throwables: java.sql.SQLException: 无法使用类加载器 org.apache.spark.sql.hive.client.IsolatedClientLoader$$anon$1@7ffe486b 启动数据库“metastore_db”,有关详细信息,请参阅下一个异常。 在 org.datanucleus.api.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:436) 在 org.datanucleus.api.jdo.JDOPersistenceManagerFactory.freezeConfiguration(JDOPersistenceManagerFactory.java:788) 在 org.datanucleus.api.jdo.JDOPersistenceManagerFactory.createPersistenceManagerFactory(JDOPersistenceManagerFactory.java:333) 在 org.datanucleus.api.jdo.JDOPersistenceManagerFactory.getPersistenceManagerFactory(JDOPersistenceManagerFactory.java:202) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 javax.jdo.JDOHelper$16.run(JDOHelper.java:1965) 在 java.security.AccessController.doPrivileged(本机方法) 在 javax.jdo.JDOHelper.invoke(JDOHelper.java:1960) 在 javax.jdo.JDOHelper.invokeGetPersistenceManagerFactoryOnImplementation(JDOHelper.java:1166) 在 javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:808) 在 javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:701) 在 org.apache.hadoop.hive.metastore.ObjectStore.getPMF(ObjectStore.java:365) 在 org.apache.hadoop.hive.metastore.ObjectStore.getPersistenceManager(ObjectStore.java:394) 在 org.apache.hadoop.hive.metastore.ObjectStore.initialize(ObjectStore.java:291) 在 org.apache.hadoop.hive.metastore.ObjectStore.setConf(ObjectStore.java:258) 在 org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:73) 在 org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:133) 在 org.apache.hadoop.hive.metastore.RawStoreProxy.(RawStoreProxy.java:57) 在 org.apache.hadoop.hive.metastore.RawStoreProxy.getProxy(RawStoreProxy.java:66) 在 org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.newRawStore(HiveMetaStore.java:593) 在 org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.getMS(HiveMetaStore.java:571) 在 org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.createDefaultDB(HiveMetaStore.java:624) 在 org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.init(HiveMetaStore.java:461) 在 org.apache.hadoop.hive.metastore.RetryingHMSHandler.(RetryingHMSHandler.java:66) 在 org.apache.hadoop.hive.metastore.RetryingHMSHandler.getProxy(RetryingHMSHandler.java:72) 在 org.apache.hadoop.hive.metastore.HiveMetaStore.newRetryingHMSHandler(HiveMetaStore.java:5762) 在 org.apache.hadoop.hive.metastore.HiveMetaStoreClient.(HiveMetaStoreClient.java:199) 在 org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient.(SessionHiveMetaStoreClient.java:74) 还有 34 个 原因:java.sql.SQLException:无法使用类加载器 org.apache.spark.sql.hive.client.IsolatedClientLoader$$anon$1@7ffe486b 启动数据库“metastore_db”,有关详细信息,请参阅下一个异常。 在 org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(未知来源) 在 org.apache.derby.impl.jdbc.Util.newEmbedSQLException(未知来源) 在 org.apache.derby.impl.jdbc.Util.seeNextException(未知来源) 在 org.apache.derby.impl.jdbc.EmbedConnection.bootDatabase(未知来源) 在 org.apache.derby.impl.jdbc.EmbedConnection.(未知来源) 在 org.apache.derby.impl.jdbc.EmbedConnection40.(未知来源) 在 org.apache.derby.jdbc.Driver40.getNewEmbedConnection(未知来源) 在 org.apache.derby.jdbc.InternalDriver.connect(未知来源) 在 org.apache.derby.jdbc.Driver20.connect(未知来源) 在 org.apache.derby.jdbc.AutoloadedDriver.connect(未知来源) 在 java.sql.DriverManager.getConnection(DriverManager.java:571) 在 java.sql.DriverManager.getConnection(DriverManager.java:187) 在 org.apache.commons.dbcp.DriverManagerConnectionFactory.createConnection(DriverManagerConnectionFactory.java:78) 在 org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582) 在 org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1148) 在 org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106) 在 org.datanucleus.store.rdbms.ConnectionFactoryImpl$ManagedConnectionImpl.getConnection(ConnectionFactoryImpl.java:501) 在 org.datanucleus.store.rdbms.RDBMSStoreManager.(RDBMSStoreManager.java:298) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:526) 在 org.datanucleus.plugin.NonManagedPluginRegistry.createExecutableExtension(NonManagedPluginRegistry.java:631) 在 org.datanucleus.plugin.PluginManager.createExecutableExtension(PluginManager.java:301) 在 org.datanucleus.NucleusContext.createStoreManagerForProperties(NucleusContext.java:1187) 在 org.datanucleus.NucleusContext.initialise(NucleusContext.java:356) 在 org.datanucleus.api.jdo.JDOPersistenceManagerFactory.freezeConfiguration(JDOPersistenceManagerFactory.java:775) 还有 63 个 原因:java.sql.SQLException:无法使用类加载器 org.apache.spark.sql.hive.client.IsolatedClientLoader$$anon$1@7ffe486b 启动数据库“metastore_db”,有关详细信息,请参阅下一个异常。 在 org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(未知来源) 在 org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(未知来源) 还有 90 个 原因:java.sql.SQLException:另一个 Derby 实例可能已经启动了数据库 /Applications/spark-1.5.2/metastore_db。 在 org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(未知来源) 在 org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(未知来源) 在 org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(未知来源) 在 org.apache.derby.impl.jdbc.Util.generateCsSQLException(未知来源) 还有 87 个 原因:错误 XSDB6:另一个 Derby 实例可能已经启动了数据库 /Applications/spark-1.5.2/metastore_db。 在 org.apache.derby.iapi.error.StandardException.newException(未知来源) 在 org.apache.derby.impl.store.raw.data.BaseDataFileFactory.privGetJBMSLockOnDB(未知来源) 在 org.apache.derby.impl.store.raw.data.BaseDataFileFactory.run(未知来源) 在 java.security.AccessController.doPrivileged(本机方法) 在 org.apache.derby.impl.store.raw.data.BaseDataFileFactory.getJBMSLockOnDB(未知来源) 在 org.apache.derby.impl.store.raw.data.BaseDataFileFactory.boot(未知来源) 在 org.apache.derby.impl.services.monitor.BaseMonitor.boot(未知来源) 在 org.apache.derby.impl.services.monitor.TopService.bootModule(未知来源) 在 org.apache.derby.impl.services.monitor.BaseMonitor.startModule(未知来源) 在 org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(未知来源) 在 org.apache.derby.impl.store.raw.RawStore.boot(未知来源) 在 org.apache.derby.impl.services.monitor.BaseMonitor.boot(未知来源) 在 org.apache.derby.impl.services.monitor.TopService.bootModule(未知来源) 在 org.apache.derby.impl.services.monitor.BaseMonitor.startModule(未知来源) 在 org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(未知来源) 在 org.apache.derby.impl.store.access.RAMAccessManager.boot(未知来源) 在 org.apache.derby.impl.services.monitor.BaseMonitor.boot(未知来源) 在 org.apache.derby.impl.services.monitor.TopService.bootModule(未知来源) 在 org.apache.derby.impl.services.monitor.BaseMonitor.startModule(未知来源) 在 org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(未知来源) 在 org.apache.derby.impl.db.BasicDatabase.bootStore(未知来源) 在 org.apache.derby.impl.db.BasicDatabase.boot(未知来源) 在 org.apache.derby.impl.services.monitor.BaseMonitor.boot(未知来源) 在 org.apache.derby.impl.services.monitor.TopService.bootModule(未知来源) 在 org.apache.derby.impl.services.monitor.BaseMonitor.bootService(未知来源) 在 org.apache.derby.impl.services.monitor.BaseMonitor.startProviderService(未知来源) 在 org.apache.derby.impl.services.monitor.BaseMonitor.findProviderAndStartService(未知来源) 在 org.apache.derby.impl.services.monitor.BaseMonitor.startPersistentService(未知来源) 在 org.apache.derby.iapi.services.monitor.Monitor.startPersistentService(未知来源)

我正在运行 Spark 1.5.2 并通过 IPython 调用它。作为参考,这是我生成错误的代码:

from __future__ import print_function

import os
import sys
import pandas as pd
import time

from pyspark import SparkConf, SparkContext
from pyspark.sql import HiveContext, SQLContext
from pyspark.sql.types import Row, StructField, StructType, StringType, IntegerType, DoubleType
from pyspark import context
from pyspark.sql import functions as F
from pyspark.sql.window import Window

from pyspark.sql.functions import *

sc = SparkContext(appName="Bench")
sqlContext = HiveContext(sc)

DATA=

try:
    df = sqlContext.read.load(DATA+"/converted/dataset.parquet", format="parquet") 
    windowSpec = Window.partitionBy('A').orderBy('B')    
    df.select(rank().over(window), min('C').over(window)).show()
    sc.stop()
except Exception, e:
    print(str(e))
    print(sqlContext._get_hive_ctx())
    sc.stop()

【问题讨论】:

    标签: python apache-spark dataframe pyspark


    【解决方案1】:

    我发现您的配置中遗漏了一步(复制 hive-site.xml):
    http://spark.apache.org/docs/latest/sql-programming-guide.html#hive-tables

    通过将 hive-site.xml 文件放在 conf/ 中来完成 Hive 的配置。请注意,在 YARN 集群上运行查询时(yarn-cluster 模式),lib_managed/jars 目录下的 datanucleus jar 和 conf/ 目录下的 hive-site.xml 需要在 YARN 启动的驱动程序和所有执行程序上可用簇。方便的方法是通过 spark-submit 命令的 --jars 选项和 --file 选项添加它们。

    【讨论】:

      猜你喜欢
      • 2016-04-17
      • 1970-01-01
      • 1970-01-01
      • 2017-05-19
      • 1970-01-01
      • 1970-01-01
      • 2016-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多