2015-03-07 1 views
2

У меня есть этот код, который сохраняет schemaRDD (человек) к столу улей хранится в виде паркета (person_parquet)Spark: Улей Вставить перезапись бросает ClassNotFoundException

 hiveContext.sql("insert overwrite table person_parquet select * from person") 

Но выдает ошибку:

Java. lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.ClassNotFoundException: org.apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLStdConfOnlyAuthorizerFactory at org.apache.hadoop .hive.ql.session.SessionState.setupAuth (SessionState.java:399) at org.apache.hadoop.hive.ql.session .SessionState.getAuthenticator (SessionState.java:867) at org.apache.hadoop.hive.ql.session.SessionState.getUserFromAuthenticator (SessionState.java:589) at org.apache.hadoop.hive.ql.metadata.Table .getEmptyTable (Table.java:174) at org.apache.hadoop.hive.ql.metadata.Table. (Table.java:116) по адресу org.apache.hadoop.hive.ql.metadata.Hive.newTable (Hive.java:2566) at org.apache.hadoop.hive.ql.metadata.Hive.getTable (Hive.java:917) at org.apache.hadoop.hive.ql.metadata.Hive.loadTable (Hive. java: 1464) at org.apache.spark.sql.hive.execution.InsertIntoHiveTable.sideEffectResult $ lzycompute (InsertIntoHiveTable.scala: 243) at org.apache.spark.sql.hive.execution.InsertIntoHiveTable.sideEffectResult (InsertIntoHiveTable. scala: 137) at org.apache.spark.sql.execution.Command $ class.execute (commands.scala: 46) at org.apache.spark.sql.hecution.execution.InsertIntoHiveTable.execute (InsertIntoHiveTable.scala: 51) at org.apache.spark.sql.SQLContext $ QueryExecution.toRdd $ lzycompute (SQLContext.scala: 425) at org.apache.spark.sql.SQLContext $ QueryExecution.toRdd (SQLContext.scala: 425) at org.apache. spark.sql.SchemaRDDLike $ class. $ init $ (SchemaRDDLike.scala: 58) at org.apache.spark.sql.SchemaRDD. (SchemaRDD.scala: 108) at org.apache.spark.sql.hive.HiveContext .sql (HiveContext.scala: 94) at com.example.KafkaConsumer $$ anonfun $ main $ 2.apply (KafkaConsumer.scala: 114) at com.example.KafkaConsumer $$ anonfun $ main $ 2.apply (KafkaConsumer.scala : 83) по адресу: org.apache.spark.streaming.dstream.DStream $$ anonfun $ foreachRDD $ 1.apply (DStream.scala: 529) at org.apache.spark.streaming.dstream.DStream $$ anonfun $ foreachRDD $ 1.apply (DStream. scala: 529) at org.apache.spark.streaming.dstream.ForEachDStream $$ anonfun $ 1.apply $ mcV $ sp (ForEachDStream.scala: 42) at org.apache.spark.streaming.dstream.ForEachDStream $$ anonfun $ 1.apply (ForEachDStream.scala: 40) at org.apache.spark.streaming.dstream.ForEachDStream $$ anonfun $ 1.apply (ForEachDStream.scala: 40) at scala.util.Try $ .apply (Try.scala : 161) at org.apache.spark.streaming.scheduler.Job.run (Job.scala: 32) at org.apache.spark.streaming.scheduler.JobScheduler $ JobHandler.run (JobScheduler.scala: 171) в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExe cutor.java:1145) at java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:615) at java.lang.Thread.run (Thread.java:745) Вызвано: org.apache. hasoop.hive.ql.metadata.HiveException: java.lang.ClassNotFoundException: org.apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLStdConfOnlyAuthorizerFactory at org.apache.hadoop.hive.ql.metadata.HiveUtils .getAuthorizeProviderManager (HiveUtils.java:376) at org.apache.hadoop.hive.ql.session.SessionState.setupAuth (SessionState.java:381) ... 29 еще Вызвано: java.lang.ClassNotFoundException: org .apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLStdConfOnlyAuthorizerFactory at java.net.URLClassLoader $ 1.run (URLClassLoader.java: 366) at java.net.URLClassLoader $ 1.run (URLClassLoader.java:355) at java.security.AccessController.doPrivileged (собственный метод) at java.net.URLClassLoader.findClass (URLClassLoader.java:354) на java.lang.ClassLoader.loadClass (ClassLoader.java:425) в java.lang.ClassLoader.loadClass (ClassLoader.java:358) в java.lang.Class.forName0 (нативный метод) в java.lang .Class.forName (Class.java:274) в org.apache.hadoop.hive.ql.metadata.HiveUtils.getAuthorizeProviderManager (HiveUtils.java:366) ... 30 более


  1. Я изменил свой улей-site.xml к этому, но по-прежнему бросает то же исключение

    <property>hive.security.authenticator.manager</property> 
    <value>org.apache.hadoop.hive.ql.security.HadoopDefaultAuthenticator</value> 
    
    <property>hive.security.authorization.enabled</property> 
    <value>false</value> 
    
    <property>hive.security.authorization.manager</property 
    <value>org.apache.hadoop.hive.ql.security.authorization.DefaultHiveAuthorizationProvid‌​er</value> 
    
  2. (такое же улей-site.xml, как # 1) Когда я добавил улей-Exec 1.0 в моих зависимости , он бросил другое исключение (AbstractMethodError)

  3. (тот же hive-site.xml как # 1) Я попробовал добавить hive-exec 0.13 в мои зависимости. Во время первого запуска (вставка) он все равно выдает ошибку, но во второй и последующей вставке он успешно выполнен.

Я использую Sandbox HDP 2.2 (Hive 0.14.0.2.2.0.0-2041) и Spark 1.2.0.

Зависимости:

<dependency> 
     <groupId>org.apache.hive</groupId> 
     <artifactId>hive-exec</artifactId> 
     <version>0.13.0</version> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.spark</groupId> 
     <artifactId>spark-core_2.10</artifactId> 
     <version>1.2.0</version> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.spark</groupId> 
     <artifactId>spark-streaming_2.10</artifactId> 
     <version>1.2.0</version> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.spark</groupId> 
     <artifactId>spark-streaming-kafka_2.10</artifactId> 
     <version>1.2.0</version> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.spark</groupId> 
     <artifactId>spark-hive_2.10</artifactId> 
     <version>1.2.0</version> 
    </dependency> 

ответ

0

класса "SQLStdConfOnlyAuthorizerFactory" был добавлен в улой 0.14.0 версии (HIVE-8045), но Свечи 1.2 зависит от улья 0,13. Ваш hive-site.xml должен иметь «hive.security.authorization.manager», установленный как «org.apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLStdConfOnlyAuthorizerFactory», и ваш путь к классам не будет иметь улей -exec 0,14 JAR, поэтому его бросание ClassNotFoundException. Так как включить свой улей-Exec 0.14.0 JAR в пути к классам (и до собственных ульев искру в JAR-файлы) или изменить запись в улье-site.xml к чему-то вроде этого: -

<property> 
    <name>hive.security.authorization.manager</name> 
    <value>org.apache.hadoop.hive.ql.security.authorization.DefaultHiveAuthorizationProvider</value> 
</property> 

Бывший не рекомендуется, так как аналогичный проблемы могут возникнуть в дальнейшем в связи с ульем версии несовпадения

+0

По-прежнему выдает сообщение об ошибке. Исключение из потока "pool-5-thread-1" java.lang.AbstractMethodError: org.apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLStdConfOnlyAuthorizerFactory.createHiveAuthorizer (Lorg/apache/hadoop/hive/QL/безопасность/авторизация/плагин/HiveMetastoreClientFactory; Lorg/Apache/Hadoop/ульи/CONF/HiveConf; Lorg/Apache/Hadoop/ульи/QL/безопасность/HiveAuthenticationProvider;) Lorg/Apache/Hadoop/ульи/QL/безопасность/авторизации/плагин/HiveAuthorizer; – sophie

+0

У меня есть следующие настройки: «hive.security.authenticator.manager» установлен как «org.apache.hadoop.hive.ql.security.HadoopDefaultAuthenticator "и " hive.security.authorization.enabled "установлено как" false "и" hive.security.authorization.manager "установлено как" org.apache.hadoop.hive.ql.security.authorization.DefaultHiveAuthorizationProvider " – sophie

+0

Можете ли вы установить улей 13 вместо улья 14 на вашей машине и попробовать? Также, какая версия искры вы? – DexterMorgan

0

Изменения значения для

hive.security.authorization.manager = org.apache.hadoop.hive.ql.security.authorization.DefaultHiveAuthorizationProvider

работал.

Изменена улей-site.xml

0

Я думаю, это происходит потому, что у вас есть повторяющиеся банки на пути к классам.

 Смежные вопросы

  • Нет связанных вопросов^_^