【发布时间】: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