このトピックでは、Hive クライアント、Beeline、JDBC の 3 つの方法を使用して E-MapReduce の Hive に接続する方法について説明します。
前提条件
-
Hive サービスが有効になっているクラスター (DataLake やカスタムなど) を作成し、リモートログインを許可するためにマスターノードの Assign Public Network IP スイッチをオンにしていること。 クラスターの作成方法の詳細については、「クラスターの作成」をご参照ください。
-
一般クラスター:Kerberos Authentication または High Service Availability が有効になっていないクラスター。
-
高セキュリティクラスター:Kerberos Authenticationスイッチをオンにして作成されたクラスターです。
-
HA クラスター:High Service Availability スイッチをオンにして作成されたクラスターです。なお、HA クラスターを作成する場合、ZooKeeper サービスも選択する必要があります。
-
-
クラスターのマスターノードにログインしていること。 詳細については、「クラスターへのログイン」をご参照ください。
注意事項
-
master-1-1と<マスターノードのパブリック IP アドレス>:マスターノードのホスト名とパブリック IP アドレスです。この情報は、EMR コンソールの送信先クラスターの Nodes ページで取得できます。詳細については、「クラスターへのログイン」をご参照ください。通常、マスターノードのホスト名は master-1-1 です。 ご利用のクラスターが Hadoop クラスターの場合、ホスト名は emr-header-1 です。
-
HiveServer2 は、デフォルトではユーザー名とパスワードを検証しません。 ユーザー名とパスワードによる認証を有効にするには、LDAP 認証をオンにします。 詳細については、「LDAP 認証の使用」をご参照ください。
操作手順
通常クラスター
Hive クライアントを使用した接続
-
次のコマンドを実行して Hive に接続します。
hive -
オプション: `quit;` または `exit;` を実行して Hive を終了します。
Beeline クライアントを使用した接続
-
次のコマンドを実行して Hive に接続します。
beeline -u jdbc:hive2://master-1-1:10000 -
オプション: `!quit` または `!exit` を実行して Beeline を終了します。
JDBC を使用した接続
開始する前に、Java 環境と Java 開発ツールがインストールされ、関連する環境変数が設定されていることを確認してください。
-
`pom.xml` ファイルでプロジェクトの依存関係 (hadoop-common と hive-jdbc) を設定します。 次の例は、追加された依存関係を示しています。
<dependencies> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <version>3.1.3</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>3.2.1</version> </dependency> </dependencies>hadoop-common および hive-jdbc のバージョンが、お使いの EMR クラスター内の Hadoop-Common および Hive のバージョンと一致することを確認してください。このソフトウェア情報は、EMR コンソールで送信先クラスターの Software Information セクション配下にある 基本情報 タブで確認できます。
-
HiveServer2 に接続し、Hive テーブルデータを操作するコードを記述します。 次の例は、サンプルコードを示しています。
import java.sql.*; public class App { private static String driverName = "org.apache.hive.jdbc.HiveDriver"; public static void main(String[] args) throws SQLException { try { Class.forName(driverName); } catch (ClassNotFoundException e) { e.printStackTrace(); } Connection con = DriverManager.getConnection( "jdbc:hive2://<Master node public IP address>:10000", "root", ""); Statement stmt = con.createStatement(); String sql = "select * from sample_tbl limit 10"; ResultSet res = stmt.executeQuery(sql); while (res.next()) { System.out.println(res.getString(1) + "\t" + res.getString(2)); } } }説明この方法では、ポート 10000 を開く必要があります。 詳細については、「セキュリティグループの管理」をご参照ください。
-
プロジェクトをビルドし (JAR ファイルを生成)、JAR ファイルを実行環境にアップロードします。
重要JAR ファイルは hadoop-common と hive-jdbc に依存します。 これらの依存パッケージが実行環境の環境変数に含まれていない場合は、ダウンロードして設定するか、JAR ファイルに直接パッケージ化してください。 JAR ファイルの実行時にいずれかの依存関係が欠落している場合、次のいずれかのエラーが表示されます:
-
hadoop-common の欠落:
java.lang.NoClassDefFoundError: org/apache/hadoop/conf/Configuration -
hive-jdbc の欠落:
java.lang.ClassNotFoundException: org.apache.hive.jdbc.HiveDriver
この例では、生成された JAR ファイルの名前は `emr-hiveserver2-1.0.jar` です。 この JAR ファイルを E-MapReduce クラスターのマスターノードにアップロードします。
-
-
JAR ファイルが正しく実行されるかテストします。
重要JAR ファイルを実行するサーバーと E-MapReduce クラスターは、同じ VPC とセキュリティグループ内にあり、それらの間にネットワーク接続が存在する必要があります。 異なる VPC またはネットワーク環境にある場合は、パブリック IP アドレスを使用してクラスターにアクセスするか、Alibaba Cloud のネットワークプロダクトを使用して接続を確立してから内部ネットワーク経由でアクセスします。 ネットワーク接続をテストするには:
-
パブリックネットワーク:
telnet public IP address of master-1-1 10000 -
プライベートネットワーク:
telnet private IP address of master-1-1 10000
java -jar emr-hiveserver2-1.0.jar -
高セキュリティクラスター
Hive クライアントを使用した接続
-
次のコマンドを実行して、Kerberos admin.local ツールを起動します。
-
Kerberos キー配布センター (KDC) サーバーが実行されている master-1-1 ノードに `root` ユーザーとしてログインしている場合は、次のコマンドを実行して管理ツールに直接アクセスできます。
kadmin.local次の出力は、`kadmin.local` コマンドラインインターフェイスに入ったことを示します:
Authenticating as principal hadoop/admin@EMR.C-85D4B8D74296****.COM with password. kadmin.local: -
別のノードにログインしている場合、またはゲートウェイを使用している場合は、次のコマンドを実行して管理ツールにアクセスします。
kadmin -p <admin-user> -w <admin-password>説明E-MapReduce が提供する KDC を使用する場合は、次のパラメーターに注意してください:
-
<admin-user>: 値はroot/adminに固定されています。 -
<admin-password>:E-MapReduce コンソールで、Kerberos サービスの Configure タブに移動し、admin_pwd パラメーターの値を取得します。
次の出力は、`kadmin` コマンドラインインターフェイスに入ったことを示します:
Authenticating as principal root/admin with password. kadmin: -
-
-
次のコマンドを実行して、`test` という名前のプリンシパルを作成します。
この例では、パスワードは `123456` です。
addprinc -pw 123456 test次の出力は、プリンシパルが正常に作成されたことを示します:
Principal "test@EMR.C-85D4B8D74296****.COM" created.説明ユーザー名とパスワードを記録してください。 チケット発行チケット (TGT) を作成する際に必要になります。
quitコマンドを実行して、Kerberos admin.local ツールを終了します。 -
Hive クライアントを実行するマシンにログインし、次のコマンドを実行して `test` ユーザーを作成し、切り替えます。
useradd test su test -
次のコマンドを実行して TGT を作成します。
kinitEnter キーを押し、`test` ユーザーのパスワードを入力します。 この例では、パスワードは `123456` です。
-
hiveコマンドを実行して Hive クライアントにアクセスします。hive
Beeline クライアントを使用した接続
-
次のコマンドを実行して、Kerberos admin.local ツールを起動します。
-
Kerberos キー配布センター (KDC) サーバーが実行されている master-1-1 ノードに `root` ユーザーとしてログインしている場合は、次のコマンドを実行して管理ツールに直接アクセスできます。
kadmin.local次の出力は、`kadmin.local` コマンドラインインターフェイスに入ったことを示します:
Authenticating as principal hadoop/admin@EMR.C-85D4B8D74296****.COM with password. kadmin.local: -
別のノードにログインしている場合、またはゲートウェイを使用している場合は、次のコマンドを実行して管理ツールにアクセスします。
kadmin -p <admin-user> -w <admin-password>説明E-MapReduce が提供する KDC を使用する場合は、次のパラメーターに注意してください:
-
<admin-user>: 値はroot/adminに固定されています。 -
<admin-password>: E-MapReduce コンソールで、Kerberos サービスの Configure タブに移動して、admin_pwd パラメーターの値を取得します。
次の出力は、`kadmin` コマンドラインインターフェイスに入ったことを示します:
Authenticating as principal root/admin with password. kadmin: -
-
-
次のコマンドを実行して、`test` という名前のプリンシパルを作成します。
この例では、パスワードは `123456` です。
addprinc -pw 123456 test次の出力は、プリンシパルが正常に作成されたことを示します:
Principal "test@EMR.C-85D4B8D74296****.COM" created.説明ユーザー名とパスワードを記録してください。 チケット発行チケット (TGT) を作成する際に必要になります。
quitコマンドを実行して、Kerberos admin.local ツールを終了します。 -
Hive クライアントを実行するマシンにログインし、次のコマンドを実行して `test` ユーザーを作成し、切り替えます。
useradd test su test -
次のコマンドを実行して TGT を作成します。
kinitEnter キーを押し、`test` ユーザーのパスワードを入力します。 この例では、パスワードは `123456` です。
-
次のコマンドを実行して Hive クライアントにアクセスします。
beeline -u "jdbc:hive2://master-1-1.c-56187feb57f0****.cn-hangzhou.emr.aliyuncs.com:10000/;principal=hive/_HOST@EMR.c-56187feb57f0****.COM"次のプレースホルダーを実際の情報に置き換えてください:
-
master-1-1.c-56187feb57f0****.cn-hangzhou.emr.aliyuncs.com: ドメイン名を含む完全修飾ホスト名。 ホスト名は、HiveServer2 サービスが実行されているノード (通常は master-1-1 ノード) で `hostname -f` コマンドを実行して取得できます。 -
EMR.c-56187feb57f0****.COM: 領域名です。 E-MapReduce コンソールで Kerberos サービスの Configure タブに移動し、realmパラメーターの値を確認できます。
-
HA クラスター
Beeline クライアントを使用した接続
選択したサービス検出モード (`zooKeeper` または `multiServers`) に応じて、対応するコマンドを使用して Beeline 接続を設定します。
-
zooKeeper モードの使用
beeline -u 'jdbc:hive2://master-1-1:2181,master-1-2:2181,master-1-3:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2' -
multiServers モードの使用
beeline -u 'jdbc:hive2://master-1-1:10000,master-1-2:10000,master-1-3:10000/default;serviceDiscoveryMode=multiServers'