Member since
11-30-2017
6
Posts
0
Kudos Received
0
Solutions
02-19-2018
11:08 PM
I have already provided the principal and keytab. UserGroupInformation.loginUserFromKeytabAndReturnUGI( properties.getProperty("hadoop.kerberos.principal"), sparkContext.getConf.get("spark.yarn.keytab") )
... View more
02-19-2018
10:42 PM
Hi, I am working on spark-streaming project. My hadoop cluster has Kerberos enabled. I have added some properties while creating hiveContext- @transient private var instance: HiveContext = _ def getHiveContext(sparkContext: SparkContext, properties: Properties): HiveContext = { synchronized { val configuration = new Configuration configuration.addResource("/etc/hadoop/conf/hdfs-site.xml") UserGroupInformation.setConfiguration(configuration) UserGroupInformation.getCurrentUser.setAuthenticationMethod(AuthenticationMethod.KERBEROS) if (instance == null) { System.setProperty("hive.metastore.uris", properties.getProperty("hive.metastore.uris")); if (properties.getProperty("kerberosSecurity").toBoolean) { System.setProperty("hive.metastore.sasl.enabled", "true") System.setProperty("hive.metastore.kerberos.keytab.file", sparkContext.getConf.get("spark.yarn.keytab")) System.setProperty("hive.security.authorization.enabled", "false") System.setProperty("hive.metastore.kerberos.principal", properties.getProperty("hive.metastore.kerberos.principal")) System.setProperty("hive.metastore.execute.setugi", "true") } UserGroupInformation.loginUserFromKeytabAndReturnUGI( properties.getProperty("hadoop.kerberos.principal"), sparkContext.getConf.get("spark.yarn.keytab")) .doAs(new PrivilegedExceptionAction[HiveContext]() { @Override def run(): HiveContext = { instance = new HiveContext(sparkContext) instance } }) } UserGroupInformation.loginUserFromKeytabAndReturnUGI( properties.getProperty("hadoop.kerberos.principal"), sparkContext.getConf.get("spark.yarn.keytab")) .doAs(new PrivilegedExceptionAction[HiveContext]() { @Override def run(): HiveContext = { instance } }) } } Program run fine. Spark can access hive to save the data into hive in every 5 mins. But after about 24hr or 30hr my spark program gives error regarding kerbores authentication. Caused by: java.io.IOException: org.apache.hadoop.security.authentication.client.AuthenticationException: org.apache.hadoop.security.token.SecretManager$InvalidToken: token (kms-dt owner=svc-dev, renewer=yarn, realUser=, issueDate=1518875523811, maxDate=1519480323811, sequenceNumber=85825, masterKeyId=1062) can't be found in cache at org.apache.hadoop.crypto.key.kms.LoadBalancingKMSClientProvider.decryptEncryptedKey(LoadBalancingKMSClientProvider.java:216) at org.apache.hadoop.crypto.key.KeyProviderCryptoExtension.decryptEncryptedKey(KeyProviderCryptoExtension.java:388) at org.apache.hadoop.hdfs.DFSClient.decryptEncryptedDataEncryptionKey(DFSClient.java:1440) at org.apache.hadoop.hdfs.DFSClient.createWrappedInputStream(DFSClient.java:1510) at org.apache.hadoop.hdfs.DistributedFileSystem$4.doCall(DistributedFileSystem.java:328) at org.apache.hadoop.hdfs.DistributedFileSystem$4.doCall(DistributedFileSystem.java:322) at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81) at org.apache.hadoop.hdfs.DistributedFileSystem.open(DistributedFileSystem.java:322) at org.apache.hadoop.fs.FileSystem.open(FileSystem.java:783) at parquet.hadoop.ParquetFileReader.readFooter(ParquetFileReader.java:407) at parquet.hadoop.ParquetFileReader$2.call(ParquetFileReader.java:238) ... 5 more Can anybody help me out from this problem?
... View more
Labels:
- Labels:
-
Apache Hive
-
Apache Spark
-
Kerberos