Я использую Spark 1.3 и пытаюсь создать таблицу из одного RDD. Это псевдокод:
val sc = new org.apache.spark.SparkContext(conf)
val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
import sqlContext.implicits._
val rdd1=sc.textFile(path_1).map(........) // RDD[(string,Double)]
val rdd2=sc.textFile(path_2).map(........) // RDD[(string,Double)]
val rdd_join=rdd1.fullOuterJoin(rdd2) // RDD[String,(Option(Double),Option(Double)))
val rdd_get = rdd_join.map(....} // RDD[(String,Double,Double)]
rdd_get.toDF().saveAsTable("database.tablename")
При запуске этого кода я получаю ошибку разрешений:
org.apache.hadoop.security.AccessControlException: Permission denied: user = XXXXXXXX, access = WRITE, inode = "/ user / hive / inventory": hive: hive: drwxrwx - x: user: hive: rwx, group :: ---, группа: улей: rwx
Если я создам таблицу как:
rdd_get.toDF().registerTempTable("rdd_get_temp")
sqlContext.sql("CREATE TABLE database.tablename AS SELECT * FROM rdd_get_temp")
Затем он работает и создает таблицу. Похоже, что saveAsTable () пытается использовать моего пользователя для записи в "/ user / hive / inventory" (это запрещено керберизацией), в то время как sqlContext.sql правильно использует для этого пользовательский "hive".
Я прав?? Это ошибка ?? Работает ли в более новых версиях Spark?
Спасибо всем.
hive
учетной записи службы. Но тогда вам нужно управлять ACL в каждом каталоге HDFS, используемом таблицей Hive - точно так же, как вы это делаете для сетевого диска (для каждого пользователя, для каждой группы и т. Д.). Этот общий аккаунтhive
- очень хромая вещь, а Sentry / Ranger - просто нелепые повязки, создающие иллюзию безопасности для корпоративных лохов. - person Samson Scharfrichter   schedule 29.04.2016hdfs
), вы можете создать ACL в каталоге, в который вы хотите, чтобы Spark создавал файлы, чтобы ваш пользователь получил права записи. Sthg нравитсяhdfs dfs -setfacl -m user:johndoe:r-x /user/hive/warehouse/
, затемhdfs dfs -setfacl -m user:johndoe:rwx /user/hive/warehouse/sometable/
- person Samson Scharfrichter   schedule 29.04.2016