Kerberosで保護されたHive接続の設定
HiveはTalend Data Preparationで利用できるデータソースの一覧に追加できる多数のデータベースの1つです。
新しいデータベースタイプの追加セクションでは、Talend Data Preparationから利用できるデータベースのリストをエンリッチ化するために、新しいJDBCドライバーを追加する方法について説明しています。ただし、この例ではHiveデータベースからTalend Data Preparationへの直接接続を設定する方法に焦点を当てています。追加の設定ステップにより、この接続のセキュリティをKerberosで保護できます。
始める前に
手順
-
Components Catalogインストールフォルダーでファイルconfig/settings.xmlを開きます。
デフォルトでは、Components Catalogインストールフォルダーは<TDP_installation_folder>/services/にあります。
-
Clouderaリポジトリーをsettings.xmlに追加します。
<settings> <profile> <id>cloudera</id> <activation> <activeByDefault>true</activeByDefault> </activation> <repositories> <repository> <id>cloudera</id> <name>Cloudera repository</name> <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url> <layout>default</layout> </repository> </repositories> </profile> </settings>
-
<components_catalog_path>/config/jdbc_config.jsonを開き、Hiveドライバーを追加します。
記載されている互換性バージョンは変更されることがありますので、次のコードはあくまで例としてお使いください。詳細は、Clouderaのドキュメンテーション (英語のみ)をご覧ください。
{ "id": "Hive", "class": "org.apache.hive.jdbc.HiveDriver", "url": "jdbc:hive2://host:10000/default;principal=<your principal>", "paths": [ { "path": "mvn:commons-el/commons-el/1.0" }, { "path": "mvn:org.datanucleus/datanucleus-core/3.2.10" }, { "path": "mvn:asm/asm-commons/3.1" }, { "path": "mvn:tomcat/jasper-compiler/5.5.23" }, { "path": "mvn:org.apache.derby/derby/10.11.1.1" }, { "path": "mvn:jline/jline/2.12" }, { "path": "mvn:org.apache.commons/commons-compress/1.4.1" }, { "path": "mvn:com.fasterxml.jackson.core/jackson-annotations/2.2.2" }, { "path": "mvn:org.apache.hive/hive-metastore/1.1.0-cdh5.13.1" }, { "path": "mvn:org.apache.hive/hive-shims/1.1.0-cdh5.13.1" }, { "path": "mvn:org.apache.hive/hive-shims/1.1.0-cdh5.13.1" }, { "path": "mvn:joda-time/joda-time/1.6" }, { "path": "mvn:org.codehaus.jackson/jackson-mapper-asl/1.9.2" }, { "path": "mvn:com.google.code.findbugs/jsr305/3.0.0" }, { "path": "mvn:org.apache.zookeeper/zookeeper/3.4.5-cdh5.13.1" }, { "path": "mvn:antlr/antlr/2.7.7" }, { "path": "mvn:commons-pool/commons-pool/1.5.4" }, { "path": "mvn:org.apache.avro/avro/1.7.6-cdh5.13.1" }, { "path": "mvn:org.antlr/stringtemplate/3.2.1" }, { "path": "mvn:org.slf4j/slf4j-log4j12/1.7.5" }, { "path": "mvn:org.eclipse.jetty.aggregate/jetty-all/7.6.0.v20120127" }, { "path": "mvn:com.twitter/parquet-hadoop-bundle/1.5.0-cdh5.13.1" }, { "path": "mvn:com.sun.jersey/jersey-servlet/1.14" }, { "path": "mvn:commons-dbcp/commons-dbcp/1.4" }, { "path": "mvn:org.slf4j/slf4j-api/1.7.5" }, { "path": "mvn:javax.servlet.jsp/jsp-api/2.1" }, { "path": "mvn:com.codahale.metrics/metrics-jvm/3.0.2" }, { "path": "mvn:com.thoughtworks.paranamer/paranamer/2.3" }, { "path": "mvn:tomcat/jasper-runtime/5.5.23" }, { "path": "mvn:com.fasterxml.jackson.core/jackson-databind/2.2.2" }, { "path": "mvn:asm/asm-tree/3.1" }, { "path": "mvn:com.codahale.metrics/metrics-core/3.0.2" }, { "path": "mvn:com.sun.jersey/jersey-core/1.14" }, { "path": "mvn:org.apache.hive/hive-service/1.1.0-cdh5.13.1" }, { "path": "mvn:org.jamon/jamon-runtime/2.3.1" }, { "path": "mvn:com.sun.jersey/jersey-server/1.14" }, { "path": "mvn:org.apache.commons/commons-lang3/3.1" }, { "path": "mvn:com.codahale.metrics/metrics-json/3.0.2" }, { "path": "mvn:org.apache.hive/hive-common/1.1.0-cdh5.13.1" }, { "path": "mvn:org.apache.curator/curator-client/2.6.0" }, { "path": "mvn:org.apache.thrift/libfb303/0.9.3" }, { "path": "mvn:org.apache.thrift/libthrift/0.9.3" }, { "path": "mvn:org.apache.geronimo.specs/geronimo-annotation_1.0_spec/1.1.1" }, { "path": "mvn:net.sf.opencsv/opencsv/2.3" }, { "path": "mvn:org.apache.geronimo.specs/geronimo-jaspic_1.0_spec/1.0" }, { "path": "mvn:commons-lang/commons-lang/2.6" }, { "path": "mvn:com.fasterxml.jackson.core/jackson-core/2.2.2" }, { "path": "mvn:javax.mail/mail/1.4.1" }, { "path": "mvn:javax.activation/activation/1.1" }, { "path": "mvn:org.tukaani/xz/1.0" }, { "path": "mvn:com.jolbox/bonecp/0.8.0.RELEASE" }, { "path": "mvn:org.apache.httpcomponents/httpcore/4.2.5" }, { "path": "mvn:org.apache.hive/hive-serde/1.1.0-cdh5.13.1" }, { "path": "mvn:commons-cli/commons-cli/1.2" }, { "path": "mvn:com.google.guava/guava/14.0.1" }, { "path": "mvn:org.apache.geronimo.specs/geronimo-jta_1.1_spec/1.1.1" }, { "path": "mvn:org.apache.httpcomponents/httpclient/4.2.5" }, { "path": "mvn:commons-codec/commons-codec/1.4" }, { "path": "mvn:log4j/log4j/1.2.16" }, { "path": "mvn:org.apache.ant/ant/1.9.1" }, { "path": "mvn:org.datanucleus/datanucleus-rdbms/3.2.9" }, { "path": "mvn:javax.transaction/jta/1.1" }, { "path": "mvn:commons-logging/commons-logging/1.1.3" }, { "path": "mvn:log4j/apache-log4j-extras/1.2.17" }, { "path": "mvn:javax.servlet/servlet-api/2.5" }, { "path": "mvn:org.apache.ant/ant-launcher/1.9.1" }, { "path": "mvn:net.sf.jpam/jpam/1.1" }, { "path": "mvn:org.codehaus.jackson/jackson-core-asl/1.9.2" }, { "path": "mvn:org.datanucleus/datanucleus-api-jdo/3.2.6" }, { "path": "mvn:org.apache.hive.shims/hive-shims-common/1.1.0-cdh5.13.1" }, { "path": "mvn:javax.jdo/jdo-api/3.0.1" }, { "path": "mvn:org.xerial.snappy/snappy-java/1.0.4.1" }, { "path": "mvn:org.apache.curator/curator-framework/2.6.0" }, { "path": "mvn:asm/asm/3.2" }, { "path": "mvn:org.apache.hive/hive-jdbc/1.1.0-cdh5.13.1" }, { "path": "mvn:org.apache.hadoop:hadoop-yarn-server-resourcemanager:2.6.0" }, { "path": "mvn:org.apache.hadoop:hadoop-yarn-server-applicationhistoryservice:2.6.0" }, { "path": "mvn:org.apache.hadoop/hadoop-annotations/2.6.0" }, { "path": "mvn:org.apache.hadoop/hadoop-yarn-common/2.6.0" }, { "path": "mvn:org.apache.hadoop/hadoop-yarn-api/2.6.0" }, { "path": "mvn:org.apache.hadoop/hadoop-yarn-server-common/2.6.0" }, { "path": "mvn:org.apache.hadoop/hadoop-yarn-server-web-proxy/2.6.0" }, { "path": "mvn:org.apache.hadoop/hadoop-common/2.7.1" }, { "path": "mvn:org.apache.hadoop/hadoop-auth/2.7.1" }, { "path": "mvn:org.apache.hadoop/hadoop-core/1.2.1" }, { "path": "mvn:org.apache.hive.shims/hive-shims-0.23/1.1.0" } ] }
-
<components_catalog_path>/start.shを開き、システムのプロパティに次の行を追加します:javax.security.auth.useSubjectCredsOnly=false.
THE_CMD="$JAVA_BIN $JAVA_OPTS - Djavax.security.auth.useSubjectCredsOnly=false -cp \"$APP_CLASSPATH\" $APP_CLASS $*"
-
<components_catalog_path>/config/application.propertiesを開き、Components Catalogサーバーがインストールされている場所をポイントするようにkrb5.configを設定します。
例
krb5.config=/etc/krb5.conf -
/config/org/talend/daikon/sandbox/properties/にsun.confという名前のファイルを作成します。
このファイルは、Hiveコンポーネントから特定のシステムプロパティにアクセスできるようにするために必要です。情報メモ警告: <components_catalog_path>/configにorg/talend/daikon/sandbox/properties/のディレクトリーが存在しない場合は作成します。
-
sun.confに次の内容を追加します。
# # This file contains all Sun/Oracle specific system properties # java.runtime.name sun.boot.library.path java.vm.version java.vm.vendor java.vendor.url path.separator java.vm.name file.encoding.pkg sun.java.launcher user.country sun.os.patch.level java.vm.specification.name user.dir java.runtime.version java.awt.graphicsenv java.endorsed.dirs os.arch java.io.tmpdir line.separator java.vm.specification.vendor os.name sun.jnu.encoding java.library.path java.specification.name java.class.version sun.management.compiler os.version user.home user.timezone java.awt.printerjob idea.launcher.bin.path file.encoding java.specification.version java.class.path user.name java.vm.specification.version sun.java.command java.home sun.arch.data.model user.language java.specification.vendor java.vm.info java.version java.ext.dirs sun.boot.class.path sun.java.command java.home sun.arch.data.model user.language java.specification.vendor java.vm.info java.version java.ext.dirs sun.boot.class.path java.vendor file.separator java.vendor.url.bug sun.io.unicode.encoding sun.cpu.endian sun.desktop sun.cpu.isalist java.security.krb5.conf sun.security.krb5.debug java.security.krb5.kdc java.security.krb5.realm java.security.auth.login.config javax.security.auth.useSubjectCredsOnly
- Components Catalogサービスを再起動します。
タスクの結果
Talend Data Preparationのデータベースデータセットのインポートフォームで、[Database type] (データベースタイプ)ドロップダウンリストからHiveデータベースを利用できるようになりました。
情報メモ重要: [Username] (ユーザー名)フィールドと[Password] (パスワード)フィールドは必須ですが、この場合はKerberosを使って認証が実行されるので、プレースホルダー値を入力できます。
Hiveデータベースに保管されているデータに対して作成されたプレパレーションをエクスポートする場合は、Talend Data Preparationサーバーのデータを処理するように選択できます。
データベースからデータをインポートする方法の詳細は、データベースからデータセットを追加をご覧ください。