使用API訪問開啟kerberos叢集下的HDFS
使用API訪問開啟安全Kerberos的Hdfs
hadoop叢集(cdh叢集)在開啟kerberos安全認證方式後,通常如果在叢集shell客戶端通過hadoop dfs命令訪問的,經過kinit登入kerberos認證即可 ,如下所示
- 如果不進行kinit登入kerberos使用者,則不能進行hdfs操作,如圖直接會報安全異常!
- 而如果進行kinit登入後就能進行hdfs操作了,通過kinit [email protected] 然後輸出密碼就能在當前互動下獲取kerberos票據授權票據
- 如果不進行kinit登入kerberos使用者,則不能進行hdfs操作,如圖直接會報安全異常!
而如果通過程式在遠端進行訪問,顯然不能再通過kinit來進行登入了,此時需要通過keytab檔案來進行訪問,keytab檔案生成這裡不在進行說明,主要說明獲取keytab檔案後如果通過程式碼來進行訪問
package com.test.hdfs;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.LocatedFileStatus;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.RemoteIterator;
import org.apache.hadoop.security.UserGroupInformation;
import javax.security .auth.Subject;
import java.io.IOException;
import java.net.URI;
import java.security.PrivilegedExceptionAction;
public class HdfsTest {
public static void main(String[] args) throws Exception {
test1();
}
//kerberos
public static void test1() throws Exception{
//設定java安全krb5配置,其中krb5.conf 檔案可以從成功開啟kerberos的叢集任意一臺節點/etc/krb5.conf拿到,
//這裡應該也可以直接設定一下兩個屬性獲取 ,我沒有測試這個
//System.setProperty("java.security.krb5.realm","YOU-REALM.COM");
//System.setProperty("java.security.krb5.KDC","kdc_hostname");
System.setProperty("java.security.krb5.conf", "E:\\test\\krb5.conf")
Configuration conf = new Configuration();
//這裡設定namenode新
conf.set("fs.defaultFS", "hdfs://namenode:8020");
//需要增加hadoop開啟了安全的配置
conf.setBoolean("hadoop.security.authorization", true);
//配置安全認證方式為kerberos
conf.set("hadoop.security.authentication", "Kerberos");
//設定namenode的principal
conf.set("dfs.namenode.kerberos.principal", "hdfs/[email protected]");
//設定datanode的principal值為“hdfs/[email protected].COM”
conf.set("dfs.datanode.kerberos.principal", "hdfs/[email protected]");
//通過hadoop security下中的 UserGroupInformation類來實現使用keytab檔案登入
UserGroupInformation.setConfiguration(conf);
//設定登入的kerberos principal和對應的keytab檔案,其中keytab檔案需要kdc管理員生成給到開發人員
UserGroupInformation.loginUserFromKeytab("[email protected]","E:\\test\\user01.keytab");
//獲取帶有kerberos驗證的檔案系統類
FileSystem fileSystem1 = FileSystem.get(conf);
//測試訪問情況
Path path=new Path("hdfs://namenodehost:8020/user/user01");
if(fileSystem1.exists(path)){
System.out.println("===contains===");
}
RemoteIterator<LocatedFileStatus> list=fileSystem1.listFiles(path,true);
while (list.hasNext()){
LocatedFileStatus fileStatus=list.next();
System.out.println(fileStatus.getPath());
}
}
}
相關推薦
使用API訪問開啟kerberos叢集下的HDFS
使用API訪問開啟安全Kerberos的Hdfs hadoop叢集(cdh叢集)在開啟kerberos安全認證方式後,通常如果在叢集shell客戶端通過hadoop dfs命令訪問的,經過kinit
Java API 訪問HA模式下的HDFS叢集
在使用Hadoop Java API訪問HDFS叢集時,在建立FileSystem物件時,直接指定NameNode的IP以及埠號即可。但是在HA模式下,訪問HDFS叢集卻有一些不同,需要指定NameSpace和主備NameNode的IP以及埠等資訊,具體操作方式見如下程式碼: Configura
使用Hadoop API訪問Kerberos 安全HDFS
使用kerberos下安全Hadoop時,通常是在linux系統下使用kinit命令進行身份認證,下面提供一種在java api中認證的方式: import org.apache.hadoop.conf.Configuration; import org.apache.ha
Structure Streaming和spark streaming原生API訪問HDFS檔案資料對比
此文已由作者嶽猛授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 Structure Stream訪問方式 code examples import org.apache.spark.sql.streaming._ val df = spark.
HA模式下的java api訪問要點
在非HA架構的HDFS中,客戶端要通過java介面呼叫HDFS時一般是在JobRunner的類中按照下面的方式: 因為nodename只有一個節點所以會在程式碼中顯式的指明要連線哪一個節點;但是在HA模式下有兩臺namenode節點,並不能按照這種方式,而是下面的方式: 其中的ns就是namese
大規模叢集下Hadoop NameNode如何承載每秒上千次的高併發訪問
歡迎關注個人公眾號:石杉的架構筆記(ID:shishan100) 週一至五早8點半!精品技術文章準時送上! 往期文章 拜託!面試請不要再問我Spring Cloud底層原理 【雙11狂歡的背後】微服務註冊中心如何承載大型系統的
0110-如何給Kerberos環境下的CDH叢集新增Gateway節點
Fayson的github: https://github.com/fayson/cdhproject 1.文件編寫目的 Gateway節點又稱為客戶端節點,通常用作訪問Hadoop叢集的介面機。它主要會部署一些客戶端的配置,指令碼命令,比如HDFS的core-site.xml,hdfs-site.xml
windows系統下使用Java語言訪問Linux系統下HDFS檔案系統相關配置步驟
前提:Linux系統已部署完成Hadoop叢集並已啟動,在Windows系統可以通過IP:50070檢視HDFS檔案系統 配置過程: 1.Windows系統下安裝JDK並配置環境變數 2.Windows系統配置Hadoop環境變數 配置HADOOP_HOME
在ASP.NET Core Web API 專案裡無法訪問(wwwroot)下的檔案
解決辦法:在“ Startup.cs ” 檔案裡的 Configur方法裡新增一句程式碼“ app.UseStaticFiles() ”,這樣就可以訪問wwwroot下的檔案了。 - 方法程式碼是
Java/Scala 訪問啟用kerberos驗證的Hadoop叢集
通過keytab的方式訪問HDFSConfiguration config = new Configuration(); FileSystem hdfs = null;
通過API訪問HDFS
一、通過 java.net.URL 1.在ubuntu下開啟eclipse 2.建立專案 3.匯入hadoop所有jar包 Build Path --->Configure Build Path ---> Add External JARs ---&g
叢集下基於Token的API介面認證解決方案
1、背景: 叢集下,多臺伺服器併發接受請求並執行三方介面的認證和請求操作,容易出現:本地token失效,叢集下的多臺伺服器,同時去三方進行認證,先後返回多個token,然而,最後一個返回的token才是最新的且是有效的。 2、方案: 叢集模式下使用 1)使用redis
【筆記】JAVA API 訪問 HDFS
1.獲取HDFS檔案系統 public static FileSystem getFileSystem(){ //讀取配置檔案 Configuration conf = new Configur
hdfs haadmin使用,DataNode動態上下線,NameNode狀態切換管理,資料塊的balance,HA下hdfs-api變化(來自學習資料)
1.2.4叢集運維測試HA叢集中兩個namenode狀態的管理命令[root@mini2 hadoop-2.6.4]# bin/hdfs haadmin Usage: DFSHAAdmin [-ns <nameserviceId>] [-transi
centos下C程式設計呼叫libvirt的API訪問KVM虛擬機器
一、簡介 libvirt是一套免費、開源的支援Linux下主流虛擬化工具的C函式庫,其旨在為包括Xen在內的各種虛擬化工具提供一套方便、可靠的程式設計介面,支援與C,C++,Ruby,Python等多種主流開發語言的繫結。當前主流Linux平臺上預設的虛擬
JAVA API 連接HA方式下的HDFS
content color 其中 節點 boolean ESS test utils time() private static String ClusterName = "nsstargate"; private static final String HA
kubernetes之使用http rest api訪問叢集
系列目錄 在Kubernetes叢集中,API Server是叢集管理API的入口,由執行在Master節點上的一個名為kube-apiserver的程序提供的服務。 使用者進入API可以通過kubectl、客戶端庫或者http rest,User 或者 Service Account可以被授權進入API
kubernetes使用http rest api訪問叢集之使用postman工具訪問 apiserver
系列目錄 前面一節我們介紹了使用curl命令列工具訪問apiserver,命令列工具快速高效,但是對於輸出非常長的內容檢視不是特別方便,尤其終端介面輸入的東西非常多的時候,過長的內容不是特別容易通過滾動快速定位到本次輸出內容的開始部分.也不便於複製到網頁線上json格式化工具裡檢視.命令列輸入過長的內容也
ASP.net教程]啟用WebApi 2裏的Api描述信息(Help下的Description
ges 相關 方法 eba .net 輸出 右擊 bin 問題 環境:vs2013+web api 2 問題:默認情況下新建的Web Api 2項目,自帶的Help頁下會顯示Api的相關信息,但Description那一欄無法獲取到數據,如下圖所示: 解決: 1.先啟用輸
簡單物聯網:外網訪問內網路由器下樹莓派Flask服務器
分配 amp con 樹莓派 轉發規則 添加 局域網 輸入 pytho 最近做一個小東西,大概過程就是想在教室,宿舍控制實驗室的一些設備。 已經在樹莓上搭了一個輕量的flask服務器(在樹莓派下搭flask在其他隨筆有說明),在實驗室的路由器下,任何設備都是可以訪問的;但是