日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

往hdfs写数据无权限

發布時間:2025/5/22 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 往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写数据无权限的全部內容,希望文章能夠幫你解決所遇到的問題。

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