中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

Java連接HBase(kerberized集群)

2018-08-10    來源:importnew

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用

社區(qū)原文 “Connecting to HBase in a Kerberos Enabled Cluster”

講解如何通過 Java 或 Scala 在啟用 Kerberos 的群集中連接到 HBase。
本測試需要一個啟用了kerberos的HDP集群。集群搭建參考《Ambari在本地VM(centos7.3)部署hadoop集群》。本測試在HDP集群的C7302節(jié)點(centos7.3)上進行。首先,下載java樣例代碼:

$ cd /opt
$ git clone https://github.com/wbwangk/hdp-test-examples

這個github庫是從jjmeyer0/hdp-test-examples庫fork的。主要修改有:

  1. 修改了 pom.xml 文件:增加了對 HDP2.6.1 的支持;去掉了 Scala 相關依賴,因為會導致構建失敗
  2. 修改了?src/main/java/com/jj/hbase/HBaseClient.java?中 jj 用戶主體為?jj@AMBAR.APACHE.ORGI

創(chuàng)建keytab

在 c7302 節(jié)點用管理員賬號登錄 KDC,然后創(chuàng)建叫jj的主體,并導出 keytab:

$ kinit root/admin@AMBARI.APACHE.ORG
$ kadmin -q "addprinc jj"         (創(chuàng)建jj主體,需要輸入兩次密碼,密碼是1)
$ ktutil
ktutil:  addent -password -p jj -k 1 -e RC4-HMAC
Password for jj@AMBARI.APACHE.ORG: 1
ktutil:  wkt jj.keytab                              (生成了keytab文件)
ktutil:  q
$ scp jj.keytab /opt/hdp-test-examples/src/main/resources

準備HBase用戶

jj 用戶必須在 HBase 中獲得正確的權限。Ambari 為 HBase創(chuàng)建一個管理員用戶,通過 keytab 查找管理員用戶主體。并利用它登錄,利用密鑰文件登錄不需要密碼:

$ klist -kt /etc/security/keytabs/hbase.headless.keytab           (查看hbase服務的printcipal )
KVNO Timestamp           Principal
---- ------------------- ------------------------------------------------------
   1 07/06/2017 03:53:35 hbase-hdp2610@AMBARI.APACHE.ORG
$ kinit -kt /etc/security/keytabs/hbase.headless.keytab hbase-hdp2610              (實測只能用這個主體登錄,即使root/admin主體都不行)
$ hbase shell
hbase(main):001:0> grant 'jj','RW'

準備配置文件

運行例子需要的文件有三個:

  • hbase-site.xml
  • .keytab
  • krb5.conf ? 前文已經(jīng)復制了jj.keytab,現(xiàn)在要復制另外兩個。

由于使用HDP集群的節(jié)點充當客戶機,所以直接在本節(jié)點復制文件即可:

$ scp /etc/hbase/conf/hbase-site.xml /opt/htp-test-examples/src/main/resources/
$ scp /etc/krb5.conf /opt/htp-test-examples/src/main/resources/

對于測試,建議在 hbase-site.xml 中更改 “hbase.client.retries.number” 屬性。默認情況下為35。這個“重試次數(shù)”這在運行測試時太大了,復制后可以修改為3。

其它修改

目錄/opt/hdp-test-examples/src`下有兩個目錄:`main`和`test`。`main`目錄放置客戶端程序,而`test`目錄是單元測試目錄。 來到目錄`/opt/hdp-test-examples/src/test/java/com/jj下看看,發(fā)現(xiàn)除了hbase還有個pig目錄。如果只是測試java客戶端連接hbase,建議刪除pig目錄。否則在maven構建是也會執(zhí)行pig的單元測試,而由于沒有正確配置pig,導致必然出錯使構建失敗。

代碼講解

例子的 Java 代碼位于?src/main/java/com/jj/hbase/HBaseClient.java。在代碼中,首先需要做的是創(chuàng)建和加載 HBase 配置:

// Setting up the HBase configuration
Configuration configuration = new Configuration();
configuration.addResource("src/main/resources/hbase-site.xml");

接下來指向 krb5.conf 文件并設置 Kerberos 主體和 keytab。

// Point to the krb5.conf file.
System.setProperty("java.security.krb5.conf", "src/main/resources/krb5.conf");
System.setProperty("sun.security.krb5.debug", "true");

// Override these values by setting -DkerberosPrincipal and/or -DkerberosKeytab
String principal = System.getProperty("kerberosPrincipal", "jj@AMBARI.APACHE.ORG");
String keytabLocation = System.getProperty("kerberosKeytab", "src/main/resources/jj.keytab");

現(xiàn)在使用上面定義的主鍵和 keytab 登錄。

UserGroupInformation.setConfiguration(configuration);
UserGroupInformation.loginUserFromKeytab(principal, keytabLocation)

Maven構建、測試

$ cd /opt/hdp-test-examples
$ mvn clean test -P hdp-2.6.1    (如果網(wǎng)絡差則耗時較長)
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building hdp-test-examples 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ hdp-test-examples ---
[INFO] Deleting /opt/hdp-test-examples/target
[INFO]
[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ hdp-test-examples ---
[debug] execute contextualize
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 10 resources
[INFO]
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ hdp-test-examples ---
[INFO] Compiling 5 source files to /opt/hdp-test-examples/target/classes
[INFO]
[INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ hdp-test-examples ---
[debug] execute contextualize
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO]
[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ hdp-test-examples ---
[INFO] Compiling 1 source file to /opt/hdp-test-examples/target/test-classes
[INFO]
[INFO] --- maven-surefire-plugin:2.10:test (default-test) @ hdp-test-examples ---
[INFO] Surefire report directory: /opt/hdp-test-examples/target/surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.jj.hbase.HBaseClientTest
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.552 sec

Results :

Tests run: 4, Failures: 0, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5.145s
[INFO] Finished at: Wed Jul 19 07:19:34 UTC 2017
[INFO] Final Memory: 38M/91M
[INFO] ------------------------------------------------------------------------

可以自己讀一下單元測試代碼?/opt/hdp-test-examples/src/test/java/com/jj/hbase/HBaseClientTest.java?瓷先,代碼中它似乎連接上 HBase,然后建表并插入幾行數(shù)據(jù)。

碰到的問題

  • 虛擬機內(nèi)存不足,將內(nèi)存由 3G 改成 4G 后問題解決;
  • 構建過程中一些 jar 包下載失敗,修改 pom.xml,去掉 Scala相關依賴后問題解決;
  • pig 測試失敗,刪除 pig 的單元測試目錄;
  • 通過 HBase shell 無法進行 grant,改用 hbase-hdp2610 主體并加大虛擬機內(nèi)存后解決。

這里是完整代碼。

Windows下的測試

前文是在 Centos7.3下進行的測試。下面在 Windows下進行測試。畢竟很多人使用 Windows+Eclipse 進行開發(fā)。下面的測試并沒有直接使用 Eclipse,而是更直接的命令行測試。希望有人能夠補充上 Eclipse 下的測試。關于 Eclipse 下的相關配置可以參考 hortonworks 的一篇社區(qū)文章(“Hortonworks Data Platform Artifacts”)。

測試使用了git bash命令行工具。git base在 Windows 下模擬的類似 Linux 的命令,但實際上使用的 Windows? 操作系統(tǒng)文件。關于 git base 的安裝使用參考這個文檔《Ambari 在本地 VM 部署 Hadoop 集群》。在 git base 上測試通過后,之后又直接在 Windows?命令行下進行了測試。需要說明的是,git bash 和 Windows?使用了不同的環(huán)境變量,如PATH。

在 Windows?下需要安裝 JDK1.8 和 Maven。Maven是 Java 實現(xiàn)的,所以是所有平臺通用的。在 Maven 的這篇文檔(“Maven on Windows”)中要求 JDK 的安裝目錄名稱不要有空格(如Program Files就不行)。Maven被我安裝在了?e:\maven。在 git bash 下運行 Maven 的方法是?/e/maven/bin/mvn。

準備代碼和配置文件

測試在 Windows?的?e:\opt?目錄下進行。以下操作在 git bash 窗口中進行:

$ cd /e/opt
$ git clone https://github.com/wbwangk/hdp-test-examples
$ cd hdp-test-examples
$ scp root@c7302:/etc/krb5.conf src/main/resources/
$ scp root@c7302:/etc/hbase/conf/hbase-site.xml src/main/resources/
$ scp root@c7302:/opt/hdp-test-examples/src/main/resources/jj.keytab src/main/resources/

上述三個 scp 操作時把測試用到3個配置文件從 Linux 下網(wǎng)絡復制到了 Windows?下。確保 Windows?的 hosts 文件中定義了3臺虛擬機的 IP 和域名。

執(zhí)行構建和單元測試

$ /e/maven/bin/mvn clean test -P hdp-2.6.1
(省略一些下載信息)
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.jj.hbase.HBaseClientTest
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.42 sec

Results :

Tests run: 4, Failures: 0, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:27 min
[INFO] Finished at: 2017-07-20T07:40:15+08:00
[INFO] Final Memory: 31M/206M
[INFO] ------------------------------------------------------------------------

直接在Windows命令行下測試

進入 Windows 命令行后:

$ e:
$ cd \opt\hdp-test-examples
E:\opt\hdp-test-examples> mvn clean test -P hdp-2.6.1
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building hdp-test-examples 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ hdp-test-examples ---
[INFO] Deleting E:\opt\hdp-test-examples\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ hdp-test-examples ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 10 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ hdp-test-examples ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 5 source files to E:\opt\hdp-test-examples\target\classes
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ hdp-test-examples ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ hdp-test-examples ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to E:\opt\hdp-test-examples\target\test-classes
[WARNING] /E:/opt/hdp-test-examples/src/test/java/com/jj/hbase/HBaseClientTest.java: E:\opt\hdp-test-examples\src\test\java\com\jj\hbase\HBaseClientTest.java使用了未經(jīng)檢查或不安全的操作。
[WARNING] /E:/opt/hdp-test-examples/src/test/java/com/jj/hbase/HBaseClientTest.java: 有關詳細信息, 請使用 -Xlint:unchecked 重新編譯。
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ hdp-test-examples ---
[INFO] Surefire report directory: E:\opt\hdp-test-examples\target\surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.jj.hbase.HBaseClientTest
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.318 sec

Results :

Tests run: 4, Failures: 0, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.624 s
[INFO] Finished at: 2017-07-20T08:15:17+08:00
[INFO] Final Memory: 30M/321M
[INFO] ------------------------------------------------------------------------

標簽: CentOS linux 安全 代碼 權限 網(wǎng)絡 域名

版權申明:本站文章部分自網(wǎng)絡,如有侵權,請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:Java結合keytool實現(xiàn)非對稱簽名與驗證

下一篇:Google 升級關鍵云數(shù)據(jù)庫服務