日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

往hdfs写数据无权限

發布時間:2025/5/22 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 往hdfs写数据无权限 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

調用jar包把風電數據往hdfs寫數據無權限問題 錯誤信息:hadoop.security.AccessControlException:Permission denied:user=gcl,access=write,inode:"":jeff:hive:-rw-r--r-- 首先想到的兩個方法: 1、將hdfs-core.xml配置文件的dfs.permisssions參數修改為false 2、修改操作文件的權限 但是這兩種方法都很僵,不夠優雅

因為user=gcl,這里我所期望的是系統的用戶名為hive,于是就想configuration這個配置類有沒有在哪段源碼里設置以哪個用戶運行?

org.apache.hadoop.security.UserGroupInformation有一個靜態方法:getCurrentUser()。它會返回一個UserGroupInformation類的實例,如果subject為空,或者這個subject中與org.apache.hadoop.security.User對應的Principal為空,那么說明尚未登錄過,調用getLoginUser()創建UserGroupInformation的實例。 getLoginUser()的流程: 1.創建LoginContext: name:如果hadoop.security.authentication等于”kerberos”,那么是“hadoop-user-kerberos”或者“hadoop-keytab-kerberos”,否則是“hadoop-simple”。它的主要作用是作為appName傳遞給UserGroupInformation.HadoopConfiguration.getAppConfigurationEntry(String appName)方法。 subject: callbackHandler: 空 Configuration: UserGroupInformation.HadoopConfiguration的實例。 2.login.login(); 這個會調用HadoopLoginModule的login()和commit()方法。 HadoopLoginModule的login()方法是一個空函數,只打印了一行調試日志 LOG.debug("hadoop login"); commit()方法負責把Principal添加到Subject中。 此時一個首要問題是username是什么? 在使用了kerberos的情況下,從javax.security.auth.kerberos.KerberosPrincipal的實例獲取username。 在未使用kerberos的情況下,優先讀取HADOOP_USER_NAME這個系統環境變量,如果不為空,那么拿它作username。否則,讀取HADOOP_USER_NAME這個java環境變量。否則,從com.sun.security.auth.NTUserPrincipal或者com.sun.security.auth.UnixPrincipal的實例獲取username。 如果以上嘗試都失敗,那么拋出異常LoginException("Can’t find user name")。 最終拿username構造org.apache.hadoop.security.User的實例添加到Subject中。 配置完HADOOP_USER_NAME系統變量之后,文件夾所有者和使用者都將成為hive

轉載于:https://juejin.im/post/5c4692a9518825255d29867d

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的往hdfs写数据无权限的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。