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

Java連接HBase(kerberized集群)

2018-08-10    來(lái)源:importnew

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

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

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

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

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

  1. 修改了 pom.xml 文件:增加了對(duì) HDP2.6.1 的支持;去掉了 Scala 相關(guān)依賴,因?yàn)闀?huì)導(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)用管理員賬號(hào)登錄 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è)管理員用戶,通過(guò) 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í)測(cè)只能用這個(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/

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

其它修改

目錄/opt/hdp-test-examples/src`下有兩個(gè)目錄:`main`和`test`。`main`目錄放置客戶端程序,而`test`目錄是單元測(cè)試目錄。 來(lái)到目錄`/opt/hdp-test-examples/src/test/java/com/jj下看看,發(fā)現(xiàn)除了hbase還有個(gè)pig目錄。如果只是測(cè)試java客戶端連接hbase,建議刪除pig目錄。否則在maven構(gòu)建是也會(huì)執(zhí)行pig的單元測(cè)試,而由于沒(méi)有正確配置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");

接下來(lái)指向 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)建、測(cè)試

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

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

碰到的問(wèn)題

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

這里是完整代碼。

Windows下的測(cè)試

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

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

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

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

測(cè)試在 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í)把測(cè)試用到3個(gè)配置文件從 Linux 下網(wǎng)絡(luò)復(fù)制到了 Windows?下。確保 Windows?的 hosts 文件中定義了3臺(tái)虛擬機(jī)的 IP 和域名。

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

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

進(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ì)信息, 請(qǐng)使用 -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),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

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

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