Oozie >

目次

機能制限

  1. note.pngOozie 3.1のRestAPIは未だ HTTP via SPNEGO/Kerberos に対応していません。Kerberos認証を備えたGrid環境を統合的に構築するためには、独自にAuthenticatorを実装するかOozie 3.2以降を使用する必要があります。

セットアップ

基本セットアップ

  1. Oozie起動ユーザ(完全分散の場合にはLDAP等に)を追加します。
    $ sudo adduser --shell /bin/sh --uid 10015 --disabled-password oozie
    $ sudo usermod -G hadoop oozie
  2. バイナリパッケージを適当な場所に展開します。
    $ sudo tar xvzf oozie-3.1.3-incubating-distro.tar.gz -C /grid/usr
    $ cd /grid/usr
    $ sudo ln -s oozie-3.1.3-incubating oozie
  3. Oozieの環境設定ファイル(conf/oozie-env.sh)を環境にあわせて編集します。疑似分散環境での例ですので、localhostを明示しています。
    1. export JAVA_HOME=/usr/lib/jvm/java-6-sun
    2. #export JAVA_HOME=/usr/lib/jvm/java-6-openjdk
    3. #export JAVA_HOME=/usr/lib/jvm/java-6-openjdk-i386
    4. #export JAVA_HOME=/usr/lib/jvm/java-6-openjdk-amd64
    5. export OOZIE_LOG=/grid/vol/0/var/log/oozie
    6. #export CATALINA_PID=/grid/vol/0/var/run/oozie/oozie.pid
    7. export OOZIE_HTTP_HOSTNAME=localhost
  4. Hadoop(ターゲットのバージョン、この例では1.0.3)とExtJS-2.2の配布アーカイブをそれぞれダウンロードし、Hadoopについては適当なところに展開しておきます。
  5. パーミッションを適切に変更してからセットアップスクリプトを実行しカスタマイズされたWebアーカイブを配備します。デフォルト設定では、バックエンドデータベースとして組み込みのDerbyが使用されます。このバージョンのOozieではHadoopのバージョンは 0.20.200 までしか指定できませんが、ドキュメントには1.0.xでも互換性があるだろうという記述がありますので、現在の安定版である 1.0.3 のライブラリを指定します。
    $ cd /grid/usr/oozie
    $ sudo chown -R oozie:oozie ../oozie-3.1.3-incubating/
    $ sudo -u oozie bin/oozie-setup.sh -hadoop 0.20.200 /grid/usr/hadoop-1.0.3 -extjs /tmp/ext-2.2.zip
      setting JAVA_HOME=/usr/lib/jvm/java-6-sun
      setting OOZIE_LOG=/grid/vol/0/var/log/oozie
      setting OOZIE_HTTP_HOSTNAME=localhost
    New Oozie WAR file with added 'Hadoop JARs, ExtJS library' at /grid/usr/oozie-3.1.3-incubating/oozie-server/webapps/oozie.war
    INFO: Oozie is ready to be started
  6. 設定ファイル(conf/oozie-site.xml)を編集します。アクセス先のクラスタ(NameNodeJobTracker)をホワイトリストに列挙します。デフォルトで無効になっているOozieが扱うデータに対するアクセス認可サービス(oozie.service.AuthorizationService?.authorization.enabled)も有効にします。
    1.     <property>
    2.         <name>oozie.service.HadoopAccessorService.jobTracker.whitelist</name>
    3.         <value>localhost:9001</value>
    4.         <!-- <value>pleiades-jt.grid.example.com:9001</value> -->
    5.         <!-- default: <value> </value> -->
    6.         <description>
    7.             Whitelisted job tracker for Oozie service.
    8.         </description>
    9.     </property>
    10.     <property>
    11.         <name>oozie.service.HadoopAccessorService.nameNode.whitelist</name>
    12.         <value>localhost:9000</value>
    13.         <!-- <value>pleiades-nn.grid.example.com:9000</value> -->
    14.         <!-- default: <value> </value> -->
    15.         <description>
    16.             Whitelisted name node for Oozie service.
    17.         </description>
    18.     </property>
    19.     <property>
    20.         <name>oozie.service.AuthorizationService.authorization.enabled</name>
    21.         <value>true</value>
    22.         <description>
    23.             Specifies whether security (user name/admin role) is enabled or not.
    24.             If disabled any user can manage Oozie system and manage any job.
    25.         </description>
    26.     </property>
  7. アクセス認可サービスを有効にしましたので、Oozie管理ユーザを conf/adminusers.txt にリストします。できれば、これらの権限認可はLDAP等に委譲したいところです。
  8. 起動と停止
    $ sudo -u oozie bin/oozie-start.sh
    $ bin/oozie admin -oozie http://localhost:11000/oozie -status
    System mode: NORMAL
    $ sudo -u oozie bin/oozie-stop.sh
  9. WebコンソールのURLは以下のとおりです。
    http://localhost:11000/oozie/

バックエンドデータベースの切り替え

  • 組み込みのDerbyでは本運用には不十分ですので、バックエンドデータベースをMySQLなどに変更します。
  1. データベースとアクセスユーザを用意します。
    1. MySQLをインストールします。
      1. debian.pngDebian
        $ sudo apt-get install --no-install-recommends  mysql-server
      2. centos.pngCentOS
        $ sudo yum install mysql-server
        $ sudo /etc/init.d/mysqld start --skip-grant-tables
        $ sudo mysqladmin -u root password 'change_on_install'
        $ sudo /etc/init.d/mysqld restart
        $ sudo chkconfig mysqld on
    2. Oozieが使用するデータベースをセットアップします。
      $ mysql -u root -p
      Enter password:
      ...
      mysql> create database oozie;
      Query OK, 1 row affected (0.00 sec)
      mysql> grant all privileges on oozie.* to 'oozie'@'localhost' identified by 'change_on_install';
      Query OK, 0 rows affected (0.00 sec)
  2. MySQLのJDBCドライバをダウンロードします。
  3. Webアーカイブに同梱するJDBCドライバをオプションに指定して、Webアーカイブを作成し直します。
    $ sudo -u oozie bin/oozie-setup.sh -hadoop 0.20.200 /grid/usr/hadoop-1.0.3 -extjs ~/tmp/ext-2.2.zip \
    > -jars ~/tmp/mysql-connector-java-5.1.21/mysql-connector-java-5.1.21-bin.jar 
      setting JAVA_HOME=/usr/lib/jvm/java-6-sun
      setting OOZIE_LOG=/grid/vol/0/var/log/oozie
      setting OOZIE_HTTP_HOSTNAME=localhost
    New Oozie WAR file with added 'Hadoop JARs, ExtJS library, JARs' at /grid/usr/oozie-3.1.3-incubating/oozie-server/webapps/oozie.war
    INFO: Oozie is ready to be started
  4. conf/oozie-site.xml を編集します。仕様ではプロパティキー名が変更になっていますがファイルの記述は古いままですので、それらも一緒に修正します。Oozieを再起動し反映させます。
    1.     <property>
    2.         <name>oozie.db.schema.name</name>
    3.         <value>oozie</value>
    4.         <description>
    5.             Oozie DataBase Name
    6.         </description>
    7.     </property>
    8.     <property>
    9.         <name>oozie.service.JPAService.create.db.schema</name>
    10.         <!-- <name>oozie.service.StoreService.create.db.schema</name> -->
    11.         <value>true</value>
    12.         <description>
    13.             Creates Oozie DB.
    14.             If set to true, it creates the DB schema if it does not exist. If the DB schema exists is a NOP.
    15.             If set to false, it does not create the DB schema. If the DB schema does not exist it fails start up.
    16.         </description>
    17.     </property>
    18.     <property>
    19.         <name>oozie.service.JPAService.jdbc.driver</name>
    20.         <!-- <name>oozie.service.StoreService.jdbc.driver</name> -->
    21.         <value>com.mysql.jdbc.Driver</value>
    22.         <!-- <value>org.apache.derby.jdbc.EmbeddedDriver</value> -->
    23.         <description>
    24.             JDBC driver class.
    25.         </description>
    26.     </property>
    27.     <property>
    28.         <name>oozie.service.JPAService.jdbc.url</name>
    29.         <!-- <name>oozie.service.StoreService.jdbc.url</name> -->
    30.         <value>jdbc:mysql://localhost:3306/${oozie.db.schema.name}31</value>
    31.         <!-- <value>jdbc:derby:${oozie.data.dir}/${oozie.db.schema.name}-db;create=true</value> -->
    32.         <description>
    33.             JDBC URL.
    34.         </description>
    35.     </property>
    36.     <property>
    37.         <name>oozie.service.JPAService.jdbc.username</name>
    38.         <!-- <name>oozie.service.StoreService.jdbc.username</name> -->
    39.         <value>oozie</value>
    40.         <!-- <value>sa</value> -->
    41.         <description>
    42.             DB user name.
    43.         </description>
    44.     </property>
    45.     <property>
    46.         <name>oozie.service.JPAService.jdbc.password</name>
    47.         <!-- <name>oozie.service.StoreService.jdbc.password</name> -->
    48.         <value>change_on_install</value>
    49.         <!-- <value> </value> -->
    50.         <description>
    51.             DB user password.
    52.             IMPORTANT: if password is emtpy leave a 1 space string, the service trims the value,
    53.                        if empty Configuration assumes it is NULL.
    54.             IMPORTANT: if the StoreServicePasswordService is active, it will reset this value with the value given in
    55.                        the console.
    56.         </description>
    57.     </property>
    58.     <property>
    59.         <name>oozie.service.JPAService.pool.max.active.conn</name>
    60.         <!-- <name>oozie.service.StoreService.pool.max.active.conn</name> -->
    61.         <value>10</value>
    62.         <description>
    63.              Max number of connections.
    64.         </description>
    65.     </property>

HadoopWithSecurityへの対応

  1. Hadoopにアクセスするためのプリンシパルを追加します。
    $ sudo kadmin.local
    Authenticating as principal root/admin@LOCALHOST with password.
    kadmin.local:  add_principal -randkey oozie/localhost
    WARNING: no policy specified for oozie/localhost@LOCALHOST; defaulting to no policy
    Principal "oozie/localhost@LOCALHOST" created.
    kadmin.local:  ktadd -k /grid/etc/keytabs/localhost.keytab oozie/localhost
    ...
  2. conf/oozie-site.xml にKerberos認証のための設定を行います。Oozieを再起動し反映させます。
    1.     <property>
    2.         <name>oozie.service.HadoopAccessorService.kerberos.enabled</name>
    3.         <value>true</value>
    4.         <!-- <value>false</value> -->
    5.         <description>
    6.             Indicates if Oozie is configured to use Kerberos.
    7.         </description>
    8.     </property>
    9.     <property>
    10.         <name>local.realm</name>
    11.         <value>LOCALHOST</value>
    12.         <!-- <value>GRID.EXAMPLE.COM</value> -->
    13.         <description>
    14.             Kerberos Realm used by Oozie and Hadoop. Using 'local.realm' to be aligned with Hadoop configuration
    15.         </description>
    16.     </property>
    17.     <property>
    18.         <name>oozie.service.HadoopAccessorService.keytab.file</name>
    19.         <value>/grid/etc/keytabs/localhost.keytab</value>
    20.         <!-- <value>${user.home}/oozie.keytab</value> -->
    21.         <description>
    22.             Location of the Oozie user keytab file.
    23.         </description>
    24.     </property>
    25.     <property>
    26.         <name>oozie.service.HadoopAccessorService.kerberos.principal</name>
    27.         <value>${user.name}/localhost@${local.realm}</value>
    28.         <!-- <value>${user.name}/pleiades-wf.grid.example.com@${local.realm}</value>
    29.         <description>
    30.             Kerberos principal for Oozie service.
    31.         </description>
    32.     </property>
  3. Hadoopクラスタ側(conf/core-site.xml)で、ProxyUserの設定を行います。Hadoop各デーモンを再起動し反映させます。
    1.     <property>
    2.         <name>hadoop.proxyuser.oozie.hosts</name>
    3.         <value>localhost</value>
    4.         <!-- <value>${this.cluster.name}-wf.${this.domain},wf00.${this.domain},wf01.${this.domain}</value> -->
    5.     </property>
    6.     <property>
    7.         <name>hadoop.proxyuser.oozie.groups</name>
    8.         <value>hadoopers</value>
    9.     </property>

Oozieクライアントのインストール

  1. 適当な場所に展開します。
    $ sudo tar xvzf oozie-client-3.1.3-incubating.tar.gz -C /grid/usr
    $ cd /grid/usr
    $ sudo ln -s oozie-client-3.1.3-incubating oozie-client

Oozie共有ライブラリのインストール

  • Oozieには、ジョブ実行時に必要な共有ランタイムライブラリを提供する仕組みがあります。以下の要領でセットアップを行います。
  1. HDFS上のOozieユーザのホームディレクトリに共有ライブラリをコピーします。
    $ sudo -u hdfs kinit
    $ sudo -u hdfs /grid/usr/hadoop/bin/hadoop fs -mkdir /user/oozie
    $ sudo -u hdfs /grid/usr/hadoop/bin/hadoop fs -chown oozie:oozie /user/oozie
    
    $ cd /grid/usr/oozie
    $ sudo tar xvzf oozie-sharelib-3.1.3-incubating.tar.gz
    $ sudo -u oozie kinit -kt /grid/etc/keytabs/localhost.keytab oozie/localhost@LOCALHOST
    $ sudo -u oozie /grid/usr/hadoop/bin/hadoop fs -put share/lib share/lib-3.1.3
  2. これらの共有ライブラリのパスは、oozie.service.WorkflowAppService?.system.libpath で設定します。
    1.     <property>
    2.         <name>oozie.service.WorkflowAppService.system.libpath</name>
    3.         <value>/user/${user.name}/share/lib-3.1.3</value>
    4.         <!-- default: <value>/user/${user.name}/share/lib</value> -->
    5.         <description>
    6.             System library path to use for workflow applications.
    7.             This path is added to workflow application if their job properties sets
    8.             the property 'oozie.use.system.libpath' to true.
    9.         </description>
    10.     </property>
    11.     <property>
    12.         <name>use.system.libpath.for.mapreduce.and.pig.jobs</name>
    13.         <value>false</value>
    14.         <description>
    15.             If set to true, submissions of MapReduce and Pig jobs will include
    16.             automatically the system library path, thus not requiring users to
    17.             specify where the Pig JAR files are. Instead, the ones from the system
    18.             library path are used.
    19.         </description>
    20.     </property>

サンプルワークフロー

ワークフローアプリケーションのアップロード

  1. 同梱のサンプルワークフローを展開し、HDFSにアップロードします。
    $ tar xvzf oozie-examples.tar.gz
    $ mv examples oozie-examples-3.1.3
    $ sudo -u alice hadoop fs -put oozie-examples-3.1.3 oozie-examples-3.1.3

MapReduce?サンプルワークフロー

  1. MapReduce?のサンプルワークフローを実行するため、設定ファイル(examples-3.1.3/apps/map-reduce/job.properties)を環境にあわせて変更します。
    1. nameNode=hdfs://localhost:9000
    2. jobTracker=localhost:9001
    3. queueName=default
    4. examplesRoot=oozie-examples-3.1.3
    5.  
    6. oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/apps/map-reduce
    7. outputDir=map-reduce
  2. 以下の要領でジョブを発行します。
    $ sudo -u alice /grid/usr/oozie/bin/oozie job -oozie http://localhost:11000/oozie \
    > -config oozie-examples-3.1.3/apps/map-reduce/job.properties -run
    job: 0000000-120804163652505-oozie-oozi-W
    $ sudo -u alice /grid/usr/oozie/bin/oozie job -oozie http://localhost:11000/oozie \
    > -info 0000000-120804163652505-oozie-oozi-W
    Job ID : 0000000-120804163652505-oozie-oozi-W
    ------------------------------------------------------------------------------------------------
    Workflow Name : map-reduce-wf
    App Path      : hdfs://localhost:9000/user/alice/oozie-examples-3.1.3/apps/map-reduce
    Status        : SUCCEEDED
    Run           : 0
    User          : alice
    Group         : users
    Created       : 2012-08-04 07:43
    Started       : 2012-08-04 07:43
    Last Modified : 2012-08-04 07:44
    Ended         : 2012-08-04 07:44
    CoordAction ID: -
    
    Actions
    ------------------------------------------------------------------------------------------------
    ID                                            Status  Ext ID                 Ext Status Err Code
    ------------------------------------------------------------------------------------------------
    0000000-120804163652505-oozie-oozi-W@mr-node  OK      job_201208041438_0007  SUCCEEDED  -
    ------------------------------------------------------------------------------------------------

Pigサンプルワークフロー

  1. 設定ファイル(oozie-examples-3.1.3/apps/pig/job.properties)を環境にあわせて変更します。
    1. nameNode=hdfs://localhost:9000
    2. jobTracker=localhost:9001
    3. queueName=default
    4. examplesRoot=oozie-examples-3.1.3
    5.  
    6. oozie.libpath=/user/${user.name}/${examplesRoot}/apps/examples-lib
    7.  
    8. oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/apps/pig
  2. 以下の要領で発行します。
    $ sudo -u alice /grid/usr/oozie/bin/oozie job -oozie http://localhost:11000/oozie \
    > -config oozie-examples-3.1.3/apps/pig/job.properties -run
    job: 0000001-120804163652505-oozie-oozi-W
    $ sudo -u alice /grid/usr/oozie/bin/oozie job -oozie http://localhost:11000/oozie \
    > -info 0000001-120804163652505-oozie-oozi-W
    Job ID : 0000001-120804163652505-oozie-oozi-W
    ------------------------------------------------------------------------------------------------
    Workflow Name : pig-wf
    App Path      : hdfs://localhost:9000/user/alice/oozie-examples-3.1.3/apps/pig
    Status        : SUCCEEDED
    Run           : 0
    User          : alice
    Group         : users
    Created       : 2012-08-04 07:57
    Started       : 2012-08-04 07:57
    Last Modified : 2012-08-04 07:58
    Ended         : 2012-08-04 07:58
    CoordAction ID: -
    
    Actions
    ------------------------------------------------------------------------------------------------
    ID                                             Status  Ext ID                 Ext Status Err Code
    ------------------------------------------------------------------------------------------------
    0000001-120804163652505-oozie-oozi-W@pig-node  OK      job_201208041438_0008  SUCCEEDED  -
    ------------------------------------------------------------------------------------------------

リソース

  1. http://incubator.apache.org/oozie/docs/3.1.3-incubating/docs/

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-08-05 (日) 12:26:13 (2682d)