Kerberos認証を開始したビッグデータプラットフォームクラスタ外クライアントの導入
4947 ワード
このドキュメントでは、クラスタ外ノードでビッグデータプラットフォームのクライアントを導入する方法について説明します.このビッグデータプラットフォームでは、Kerberos認証が開始されています.クラスタ内のhdfsデータをクエリーしたり、sparkタスクをクラスタ内にコミットしたりするなど、クラスタ内のサービスをクライアント・ユーザーがクラスタ外で使用できるようになりました.具体的な導入手順は次のとおりです.
1.クラスタ内のhadoop関連コンポーネントをクライアントにコピーする
ローカル作成ディレクトリ/opt/cloudera/parcels
コピーパッケージCDH-5.7.2-1.cdh5.7.2.p0.18ディレクトリ/opt/cloudera/parcelsディレクトリへのソフト接続
2.クラスタ内のhadoop関連プロファイルをクライアントにコピーする
ディレクトリ/etc/hadoopを作成し、/etc/hadoop/confフォルダをディレクトリに入れ、node 1はクラスタ内ノード
ディレクトリ/etc/hiveを作成し、/etc/hive/confフォルダをディレクトリに挿入
ディレクトリ/etc/sparkを作成し、/etc/spark/confフォルダをディレクトリに挿入
3、クラスタ内の認証関連プロファイルkrb 5をコピーする.confからクライアントへ
4、クライアントスクリプトclientを実行する.sh、ファイルの内容は以下の通りです.
注意:1、クライアントはクラスタ時間と同期しなければならない.そうしないと、アイデンティティ認証に失敗する.2、クライアントhostはクラスタhostsを追加し、クラスタhostsはクラスタのある点を接続して取得することができる.3、クラスタはkerberos認証をオンにし、shellコマンドを実行する前にkinitで認証する必要があります.例は以下の通りです.
4、spark jdbcプログラミング、同様にkerberos認証を呼び出す必要がある.例は以下の通りである.完全工事は【spark jdbc例】ディレクトリの下でSecurityを見る
1.クラスタ内のhadoop関連コンポーネントをクライアントにコピーする
ローカル作成ディレクトリ/opt/cloudera/parcels
mkdir –R /opt/cloudera/parcels
コピーパッケージCDH-5.7.2-1.cdh5.7.2.p0.18ディレクトリ/opt/cloudera/parcelsディレクトリへのソフト接続
cd /opt/cloudrea/parcels
ln –s CDH-5.7.2-1.cdh5.7.2.p0.18 CDH
2.クラスタ内のhadoop関連プロファイルをクライアントにコピーする
ディレクトリ/etc/hadoopを作成し、/etc/hadoop/confフォルダをディレクトリに入れ、node 1はクラスタ内ノード
mkdir /etc/hadoop
scp -r node1:/etc/hadoop/conf /etc/hadoop
ディレクトリ/etc/hiveを作成し、/etc/hive/confフォルダをディレクトリに挿入
mkdir /etc/hive
scp -r node1:/etc/hive/conf /etc/hive
ディレクトリ/etc/sparkを作成し、/etc/spark/confフォルダをディレクトリに挿入
mkdir /etc/spark
scp -r node1:/etc/spark/conf /etc/spark
3、クラスタ内の認証関連プロファイルkrb 5をコピーする.confからクライアントへ
scp node1:/etc/krb5.conf /etc
4、クライアントスクリプトclientを実行する.sh、ファイルの内容は以下の通りです.
export HADOOP_HOME=/opt/cloudera/parcels/CDH/lib/hadoop
export HADOOP_CONF=/etc/hadoop/conf
export HADOOP_CONF_DIR=/etc/hadoop/conf
export YARN_CONF_DIR=/etc/hadoop/conf
export SPARK_CONF_DIR=/etc/spark/conf
#export SPARK_HOME=/opt/cloudera/parcels/CDH/lib/spark
CDH_HOME="/opt/cloudera/parcels/CDH"
export PATH=$CDH_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin/:$PATH
##beeline hive sql
cd /opt/cloudera/parcels/CDH/bin
./beeline -u "jdbc:hive2://node128a7:10000/;principal=hive/[email protected]" --config /etc/hive/conf
## hdfs
#./hdfs --config /etc/hadoop/conf dfs -ls /
## spark
#cd /opt/cloudera/parcels/CDH/lib/spark/bin
#./spark-shell
注意:1、クライアントはクラスタ時間と同期しなければならない.そうしないと、アイデンティティ認証に失敗する.2、クライアントhostはクラスタhostsを追加し、クラスタhostsはクラスタのある点を接続して取得することができる.3、クラスタはkerberos認証をオンにし、shellコマンドを実行する前にkinitで認証する必要があります.例は以下の通りです.
#kinit
[root@node128a225 client]# kinit -kt /home/user01.keytab user01
#
[root@node128a225 client]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: [email protected]
Valid starting Expires Service principal
12/01/2016 20:48:50 12/02/2016 20:48:50 krbtgt/[email protected]
renew until 12/08/2016 20:48:50
4、spark jdbcプログラミング、同様にkerberos認証を呼び出す必要がある.例は以下の通りである.完全工事は【spark jdbc例】ディレクトリの下でSecurityを見る
package kerberos.spark;
import org.apache.hadoop.security.UserGroupInformation;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Timer;
import java.util.TimerTask;
/*
* , principal keytab
*/
public class sparkjdbc {
public static void main(String args[]) {
final String principal = args[0];// principal, user01
final String keytab = args[1];// keytab, /home/user01/user01.keytab
String sql = args[2];// sql
try {
//1、 : 12
long interval=1;
long now = System.currentTimeMillis();
long start = interval - now % interval;
Timer timer = new Timer();
timer.schedule(new TimerTask(){
public void run() {
org.apache.hadoop.conf.Configuration conf = new org.apache.hadoop.conf.Configuration();
conf.set("hadoop.security.authentication", "Kerberos");
UserGroupInformation.setConfiguration(conf);
try {
UserGroupInformation.loginUserFromKeytab(principal,keytab);
System.out.println("getting connection");
System.out.println("current user: "+UserGroupInformation.getCurrentUser());
System.out.println("login user: "+UserGroupInformation.getLoginUser());
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("execute task!"+ this.scheduledExecutionTime());
}
},start,12*60*60*1000);//
// ,spark jdbc hive sql
Class.forName("org.apache.hive.jdbc.HiveDriver");
Connection con = DriverManager
.getConnection("jdbc:hive2://node128a7:10000/;principal=hive/[email protected]");
System.out.println("got connection");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(sql);// executeQuery ,
System.out.println(" :");
while (rs.next()) {
System.out.println(rs.getString(1));// int getInt()
}
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}