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

Java連接HBase(kerberized集群)

2018-08-10    來源:importnew

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

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

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

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

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

  1. 修改了 pom.xml 文件:增加了對 HDP2.6.1 的支持;去掉了 Scala 相關(guān)依賴,因?yàn)闀䦟?dǎo)致構(gòu)建失敗
  2. 修改了?src/main/java/com/jj/hbase/HBaseClient.java?中 jj 用戶主體為?jj@AMBAR.APACHE.ORGI

創(chuàng)建keytab

在 c7302 節(jié)點(diǎn)用管理員賬號登錄 KDC,然后創(chuàng)建叫jj的主體,并導(dǎo)出 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

準(zhǔn)備HBase用戶

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

$ klist -kt /etc/security/keytabs/hbase.headless.keytab           (查看hbase服務(wù)的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              (實(shí)測只能用這個(gè)主體登錄,即使root/admin主體都不行)
$ hbase shell
hbase(main):001:0> grant 'jj','RW'

準(zhǔn)備配置文件

運(yùn)行例子需要的文件有三個(gè):

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

由于使用HDP集群的節(jié)點(diǎn)充當(dāng)客戶機(jī),所以直接在本節(jié)點(diǎn)復(fù)制文件即可:

$ 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” 屬性。默認(rèn)情況下為35。這個(gè)“重試次數(shù)”這在運(yùn)行測試時(shí)太大了,復(fù)制后可以修改為3。

其它修改

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

代碼講解

例子的 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 文件并設(shè)置 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構(gòu)建、測試

$ cd /opt/hdp-test-examples
$ mvn clean test -P hdp-2.6.1    (如果網(wǎng)絡(luò)差則耗時(shí)較長)
[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ù)。

碰到的問題

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

這里是完整代碼。

Windows下的測試

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

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

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

準(zhǔn)備代碼和配置文件

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

$ 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/

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

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

$ /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命令行下測試

進(jìn)入 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: 有關(guān)詳細(xì)信息, 請使用 -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] ------------------------------------------------------------------------

標(biāo)簽: CentOS linux 安全 代碼 權(quán)限 網(wǎng)絡(luò) 域名

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

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

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