Hadoop Oozie設定からPigのPythonUDFを利用するまでのまとめ
- 作者: Tom White,玉川竜司,兼田聖士
- 出版社/メーカー: オライリージャパン
- 発売日: 2011/07/23
- メディア: 大型本
- 購入: 9人 クリック: 182回
- この商品を含むブログ (24件) を見る
Oozie
OozieとはHadoop MapReduceのジョブ管理システムの事でMapReduceの定期処理化や複数のMapReduceの実行し結果を一つにまとめるなど一連の処理フローとして定義することができる優れものです。Oozie自体はJava/Tomcatで作られているようです。Oozieを動かすために開発者は以下のものを用意しなければなりません。
ファイル 必須 記述方式 用途 設置場所 MapReduceプログラム 必須 Java,Streaming,Pig/Hive等 MapReduce実行 HDFS workflow 必須 xml OozieJobの実行 HDFS coordinator 定期化する場合必須 xml Ooziejobの定期化 HDFS properties 必須 設定ファイル Ooziejobの実行パラメータファイル Oozie client Oozieを動かすためのパラメータファイル以外は全てHDFSのパスに設置する必要があります。workflowがMapReduceの一連処理の流れを定義し、coordinatorは定期処理をしたい場合に定義するxmlファイルです。propertiesはJobTracker,NameNodeやOozieのjobに渡すパラメータの設定ファイルです。
Oozieの設定ファイルの定義は厳格(記述書式、順番に厳しい)でありながら、設定間違いのWarningが大変分かりづらいためDebugに相当時間を費やす事になりますが、一度設定をしてしまえば大変強力なものになるので、一度導入を検討してみると良いかもしれません。
Install on CentOS
Oozie Installation - Cloudera Support
Oozieインストール - Meta Search
Oozie OuickStart
ここら辺を参考にinstallしてみます。Install Package
Oozieの設定をCentOs1台で行います。OsのバージョンはCentOS release 6.3 (Final)です。まずはinstall済みのhadoopパッケージの確認と追加でoozieのパッケージをinstallします。Oozie以外にもmysql,tomcatをinstallする必要があるので、それらも入れます。
$ yum list installed | grep hadoop hadoop-0.20.noarch 0.20.2+923.421-1 @cloudera-cdh3 hadoop-0.20-conf-pseudo.noarch hadoop-0.20-datanode.noarch hadoop-0.20-jobtracker.noarch hadoop-0.20-namenode.noarch hadoop-0.20-secondarynamenode.noarch hadoop-0.20-tasktracker.noarch hadoop-pig.noarch 0.8.1+28.39-1 @cloudera-cdh3 $ yum install oozie oozie-client -y $ yum list installed | grep oozie oozie.noarch 2.3.2+27.23-1 @cloudera-cdh3 oozie-client.noarch 2.3.2+27.23-1 @cloudera-cdh3 $ yum install mysql mysql-server tomcat6 -y $ yum list installed | grep mysql mysql.x86_64 5.1.66-2.el6_3 @updates mysql-libs.x86_64 5.1.66-2.el6_3 @updates mysql-server.x86_64 5.1.66-2.el6_3 @updates $ yum list installed | grep tomcat tomcat6.noarch 6.0.24-45.el6 @base tomcat6-el-2.1-api.noarch tomcat6-jsp-2.1-api.noarch tomcat6-lib.noarch 6.0.24-45.el6 @base tomcat6-servlet-2.5-api.noarch各種Path
InstallやOozieを実行することによって作成されるOozieディレクトリパスです。※私の環境では/var/oozie/tmpは自分で作成する必要がありました。
path 説明 /usr/lib/oozie shファイル、libファイル /usr/share/doc/oozie* Documentファイル /etc/oozie Configファイル /var/log/oozie logファイル /var/run/oozie ProcessIDファイル /var/tmp/oozie tempファイル Mysqlの設定
mysqlを起動&接続してoozieDBの作成とoozieユーザを登録します。またTomcatからmysqlで接続を行うためにmysql-connector-javaをdownloadして展開しておきます。
$ sudo /etc/rc.d/init.d/mysqld start mysqld を起動中: [ OK ] $ mysql -u root -p mysql> create database oozie; Query OK, 1 row affected (0.03 sec) mysql> grant all privileges on oozie.* to 'oozie'@'localhost' identified by 'password'; Query OK, 0 rows affected (0.00 sec) mysql> grant all privileges on oozie.* to 'oozie'@'%' identified by 'password'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)Oozieアプリケーションからmysql接続が行えるようにJDBC Connectorを設定します。
$ wget "http://www.mysql.com/downloads/mirror.php?id=409559" 2012-12-22 14:23:24 (2.11 MB/s) - `mysql-connector-java-5.1.22.tar.gz' へ保存完了 [4028047/4028047] $ tar -xzf mysql-connector-java-5.1.22.tar.gz設定ファイルをMysql用に書き換え
jdbcをmysqlに設定するように/etc/oozie/oozie-site.xmlを編集します。
$ sudo vim /etc/oozie/oozie-site.xml <property> <name>oozie.service.StoreService.jdbc.driver</name> <value>com.mysql.jdbc.Driver</value> <description> JDBC driver class. </description> </property> <property> <name>oozie.service.StoreService.jdbc.url</name> <value>jdbc:mysql://localhost:3306/oozie</value> <description> JDBC URL. </description> </property> <property> <name>oozie.service.StoreService.jdbc.username</name> <value>oozie</value> <description> DB user name. </description> </property> <property> <name>oozie.service.StoreService.jdbc.password</name> <value>password</value> <description> DB user password. IMPORTANT: if password is emtpy leave a 1 space string, the service trims the value, if empty Configuration assumes it is NULL. IMPORTANT: if the StoreServicePasswordService is active, it will reset this value with the value given in the console. </description> </property>ExtJSのdownload
Oozieのwebconsole表示にはExtJSというJavascriptライブラリが必要です。注意としては2.2のVersionを指定しなければならない事です。
$ wget http://extjs.com/deploy/ext-2.2.zipoozie-setup
Oozieのsetupコマンドを実行します。ここでdownloadしたjdbcのjarとExtjsのコピーを行います。
$ sudo -u oozie /usr/lib/oozie/bin/oozie-setup.sh -jars work/jdbc/mysql-connector-java-5.1.22/mysql-connector-java-5.1.22-bin.jar -extjs work/extjs/ext-2.2.zip xtjs work/extjs/ext-2.2.zip setting OOZIE_CONFIG=/etc/oozie setting OOZIE_DATA=/var/lib/oozie setting OOZIE_LOG=/var/log/oozie setting CATALINA_BASE=${OOZIE_DATA}/oozie-server setting CATALINA_TMPDIR=/var/tmp/oozie setting CATALINA_PID=/var/run/oozie/oozie.pid New Oozie WAR file with added 'ExtJS library, JARs' at /var/lib/oozie/oozie-server/webapps/oozie.war INFO: Oozie is ready to be startedOozieの起動と確認
Oozieの起動と確認コマンンドを実行してみます。確認コマンドで大量のエラーが発生し、http://localhost:11000/oozieにアクセスしてもアプリケーションの確認ができませんでした。Oozieのログファイルも確認してみると/var/tmp/oozieが無いということで怒られています。ということでoozieユーザで/var/tmp/oozieを作成し、oozieを再起動します。また後から怒られないようにoozie関連のディレクトリは全て所有者をoozieに変更しておきます。Oozieの起動確認コマンドもSystem mode: NORMALとなっていて正常に起動していることが分かります。
$ sudo -u oozie /usr/lib/oozie/bin/oozie-start.sh $ /usr/bin/oozie admin -oozie http://localhost:11000/oozie -status Error: AUTHENTICATION : Could not authenticate, Authentication failed, status: 404, message: Not Found $ sudo -u oozie usr/lib/oozie/bin/oozie-run.sh Setting OOZIE_HOME: /usr/lib/oozie Sourcing: /usr/lib/oozie/bin/oozie-env.sh setting OOZIE_CONFIG=/etc/oozie setting OOZIE_DATA=/var/lib/oozie setting OOZIE_LOG=/var/log/oozie setting CATALINA_BASE=${OOZIE_DATA}/oozie-server setting CATALINA_TMPDIR=/var/tmp/oozie setting CATALINA_PID=/var/run/oozie/oozie.pid Using OOZIE_CONFIG: /etc/oozie Sourcing: /etc/oozie/oozie-env.sh Setting OOZIE_CONFIG_FILE: oozie-site.xml Using OOZIE_DATA: /var/lib/oozie Using OOZIE_LOG: /var/log/oozie Setting OOZIE_LOG4J_FILE: oozie-log4j.properties Setting OOZIE_LOG4J_RELOAD: 10 Setting OOZIE_HTTP_HOSTNAME: localhost Setting OOZIE_HTTP_PORT: 11000 Setting OOZIE_ADMIN_PORT: 11001 Setting OOZIE_BASE_URL: http://localhost:11000/oozie Using CATALINA_BASE: /var/lib/oozie/oozie-server Setting CATALINA_OUT: /var/log/oozie/catalina.out Using CATALINA_PID: /var/run/oozie/oozie.pid Using CATALINA_OPTS: -Dderby.stream.error.file=/var/log/oozie/derby.log Adding to CATALINA_OPTS: -Doozie.home.dir=/usr/lib/oozie -Doozie.config.dir=/etc/oozie -Doozie.log.dir=/var/log/oozie -Doozie.data.dir=/var/lib/oozie -Doozie.config.file=oozie-site.xml -Doozie.log4j.file=oozie-log4j.properties -Doozie.log4j.reload=10 -Doozie.http.hostname=localhost -Doozie.admin.port=11001 -Doozie.http.port=11000 -Doozie.base.url=http://localhost:11000/oozie Using CATALINA_BASE: /var/lib/oozie/oozie-server Using CATALINA_HOME: /usr/lib/oozie/oozie-server Using CATALINA_TMPDIR: /var/tmp/oozie Using JRE_HOME: /usr Using CLASSPATH: /usr/lib/oozie/oozie-server/bin/bootstrap.jar Using CATALINA_PID: /var/run/oozie/oozie.pid 2012/12/22 15:15:56 org.apache.catalina.startup.Embedded initDirs 致命的: Cannot find specified temporary folder at /var/tmp/oozie 2012/12/22 15:15:57 org.apache.catalina.core.AprLifecycleListener init 情報: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64/server:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/../lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib 2012/12/22 15:15:58 org.apache.coyote.http11.Http11Protocol init 致命的: エンドポイントを初期化中のエラーです java.net.BindException: Address already in use <null>:11000 $ cat /var/log/oozie/oozie.log 2012-12-22 15:15:58,898 INFO XLogService:525 - Log4j configuration file [oozie-log4j.properties] 2012-12-22 15:15:58,899 INFO XLogService:525 - Log4j configuration file loaded from [/etc/oozie] 2012-12-22 15:15:58,899 INFO XLogService:525 - Log4j reload interval [10 sec] 2012-12-22 15:15:58,912 INFO ConfigurationService:525 - USER[-] GROUP[-] Oozie home dir [/usr/lib/oozie] 2012-12-22 15:15:58,917 INFO ConfigurationService:525 - USER[-] GROUP[-] Oozie conf dir [/etc/oozie] 2012-12-22 15:15:58,917 INFO ConfigurationService:525 - USER[-] GROUP[-] Oozie conf file [oozie-site.xml] 2012-12-22 15:15:58,953 INFO ConfigurationService:525 - USER[-] GROUP[-] Configuration change via System Property, [oozie.base.url]=[http://localhost:11000/oozie] 2012-12-22 15:15:58,956 WARN ConfigurationService:528 - USER[-] GROUP[-] System property [oozie.admin.port] no defined in Oozie configuration, ignored 2012-12-22 15:15:58,959 INFO Services:525 - USER[-] GROUP[-] Exiting null Entering NORMAL 2012-12-22 15:15:58,964 FATAL Services:519 - USER[-] GROUP[-] java.io.IOException: No such file or directory java.io.IOException: No such file or directory$ sudo chown -R oozie /var/lib/oozie $ sudo chown -R oozie /var/log/oozie $ sudo -u oozie mkdir /var/tmp/oozie $ sudo chown -R oozie /var/tmp/oozie $ sudo -u oozie /usr/lib/oozie/bin/oozie-stop.sh $ sudo -u oozie /usr/lib/oozie/bin/oozie-start.sh $ /usr/bin/oozie admin -oozie http://localhost:11000/oozie -status System mode: NORMAL
http://localhost:11000/oozieにアクセスすると上のようなjob管理画面が表示されます。
Pig on Oozie
PigでHadoopをより便利に使う!PigでのMapReduceまとめ - Yuta.Kikuchiの日記
User Defined Functions
今回はPigのUDFという独自関数をPythonで作り、PigのMapReduceを定期処理するための設定について記述します。PythonUDF
Pigの独自関数はJava,Python,Javascriptで記述する事ができます。Pigは文字列操作などの関数が無いためPiggyBank で探しても見つからない場合は自分で処理を書くしかありません。Pythonで書いたUDFはJythonというJavaとお喋りするためのIFでやり取りをするのでPythonと少し仕様が変わったりします。今回は以下のように与えられた引数に対して+1をするような簡単な処理を書いてみます。これをudf.pyというファイル名で保存して、HDFSにアップします。
#!/usr/bin/python @outputSchema("ryear:int") def addyear(year): return year + 1上のUDFを呼び出すPigScriptは以下のように定義します。
REGISTER udf.py USING jython AS myfuncs; input_data = LOAD input.txt USING PigStorage() AS (label:chararray,year:int,day:chararray,time:chararray); filter_data = FOREACH input_data GENERATE label, myfuncs.addyear(year), day, time; group_data = GROUP filter_data BY year; max_data = FOREACH group_data GENERATE group, MAX(input_data.time); STORE max_data INTO result;$ zipinfo /usr/lib/pig/contrib/piggybank/java/piggybank.jar Archive: /usr/lib/pig/contrib/piggybank/java/piggybank.jar -rw-r--r-- 2.0 unx 1786 b- defN 12-Oct-05 19:14 org/apache/pig/piggybank/evaluation/ExtremalTupleByNthField$HelperClass.class -rw-r--r-- 2.0 unx 6391 b- defN 12-Oct-05 19:14 org/apache/pig/piggybank/evaluation/ExtremalTupleByNthField.class -rw-r--r-- 2.0 unx 1497 b- defN 12-Oct-05 19:14 org/apache/pig/piggybank/evaluation/MaxTupleBy1stField$Final.class -rw-r--r-- 2.0 unx 1553 b- defN 12-Oct-05 19:14 org/apache/pig/piggybank/evaluation/MaxTupleBy1stField$Initial.class -rw-r--r-- 2.0 unx 1518 b- defN 12-Oct-05 19:14 org/apache/pig/piggybank/evaluation/MaxTupleBy1stField$Intermediate.class -rw-r--r-- 2.0 unx 3752 b- defN 12-Oct-05 19:14 org/apache/pig/piggybank/evaluation/MaxTupleBy1stField.class -rw-r--r-- 2.0 unx 3611 b- defN 12-Oct-05 19:14 org/apache/pig/piggybank/evaluation/datetime/DiffDate.class -rw-r--r-- 2.0 unx 3119 b- defN 12-Oct-05 19:14 org/apache/pig/piggybank/evaluation/datetime/convert/CustomFormatToISO.class -rw-r--r-- 2.0 unx 2758 b- defN 12-Oct-05 19:14 org/apache/pig/piggybank/evaluation/datetime/convert/ISOToUnix.class -rw-r--r-- 2.0 unx 2761 b- defN 12-Oct-05 19:14 org/apache/pig/piggybank/evaluation/datetime/convert/UnixToISO.class -rw-r--r-- 2.0 unx 3079 b- defN 12-Oct-05 19:14 org/apache/pig/piggybank/evaluation/datetime/diff/ISODaysBetween.class -rw-r--r-- 2.0 unx 3088 b- defN 12-Oct-05 19:14 org/apache/pig/piggybank/evaluation/datetime/diff/ISOHoursBetween.class -rw-r--r-- 2.0 unx 3106 b- defN 12-Oct-05 19:14 org/apache/pig/piggybank/evaluation/datetime/diff/ISOMinutesBetween.class -rw-r--r-- 2.0 unx 3097 b- defN 12-Oct-05 19:14 org/apache/pig/piggybank/evaluation/datetime/diff/ISOMonthsBetween.class -rw-r--r-- 2.0 unx 3102 b- defN 12-Oct-05 19:14 org/apache/pig/piggybank/evaluation/datetime/diff/ISOSecondsBetween.classPig Oozie Setting
まずはPig,jythonのyumパッケージがinstallされていることを確認します。
$ yum list installed | grep pig hadoop-pig.noarch 0.8.1+28.39-1 @cloudera-cdh3 $ yum list installed | grep jython jython.x86_64 2.2.1-4.8.el6 @basePigのMapReduceをOozie経由で実行するためにはPigファイルをHDFS上に設置する必要があります。HDFS上へのファイルアップもディレクトリの設置ルールがあったり、workflowで呼び出したいファイルを定義するなど幾つか覚えなければならない事項があります。ここではHDFS上の設定ファイルの設置の仕方について記述します。workflowを呼び出すファイルは後述するproperitesで記述します。workflowの中で呼び出したいPig Scriptファイルパスを自由に定義できたりしますが、ここでは分かりやすくworkflowが呼び出されるディレクトリに実行したいpigファイルと自分で記述したUDFファイルを設置します。workflowのディレクトリ直下にlibというディレクトリを設置し、pigやjythonなどのjarファイルを設置します。このlibディレクトリに設置したファイルは自動的に読み込まれます。
/user/username/tmp/workflow.xml /user/username/tmp/coordinator/coordinator.xml /user/username/tmp/script/test.pig /user/username/tmp/script/udf.py /user/username/tmp/lib/pig-core.jar /user/username/tmp/lib/pig-0.8.1-cdh3u5-core.jar /user/username/tmp/lib/piggybank.jar /user/username/tmp/lib/jython.jar /user/username/tmp/lib/jython-2.2.1.jar $ alias hdfs hdfs='/usr/lib/hadoop-0.20/bin/hadoop fs' $ hdfs -put workflow.xml tmp $ hdfs -put test.pig tmp/script $ hdfs -put udf.py tmp/script $ hdfs -put /usr/lib/pig/pig-* tmp/lib $ hdfs -put /usr/lib/pig/contrib/piggybank/java/piggybank.jar tmp/lib $ hdfs -put /usr/share/java/jython*.jar tmp/libPig Oozie Workflow
Pig Cookbook
Oozie Specification, a Hadoop Workflow System
この辺を参考にしながら以下のようなworkflowを定義しHDFSにアップします。簡単な説明を加えておくと${}で定義される箇所は変数です。変数の値はoozie clientのpropertiesファイルから渡ってきます。job-tracker,name-nodeを指定したり、outputディレクトリを自動で消したりできます。使用するPIgのスクリプトはscriptタグの中に記述します。またPigスクリプトから呼び出すUDFはfileタグで記述します。<workflow-app xmlns="uri:oozie:workflow:0.1" name='pig-wf'> <start to='pig-test'/> <action name='pig-test'> <pig> <job-tracker>${jobTracker}</job-tracker> <name-node>${nameNode}</name-node> <prepare> <delete path="${nameNode}/${output_dir}"/></prepare> <configuration> <property> <name>mapred.map.output.compress</name> <value>false</value> </property> <property> <name>mapred.job.queue.name</name> <value>${queueName}</value> </property> <property> <name>mapred.child.java.opts</name> <value>-server -Xmx1024M -Djava.net.preferIPv4Stack=true -Dtest=QA</value> </property> </configuration> <script>test.pig</script> <param>input_file=${input_file}</param> <param>output_dir=${output_dir}</param> <file>test.udf</file> </pig> <ok to="end"/> <error to="fail"/> </action> <kill name="fail"> <message>Pig failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message> </kill> <end name="end"/> </workflow-app>Pig Oozie Properties
propertiesファイルはworkflowを呼び出すパスの定義、workflowに渡すパラメータの設定ファイルです。以下にサンプルを記載します。このサンプルをpig-job.propertiesファイルとして保存し、oozieコマンドでjobを登録します。また登録したjobが正常に動作していることも確認します。
nameNode=hdfs://localhost:8020 jobTracker=localhost:8021 queueName=default examplesRoot=tmp user.name=yuta oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/ input_file=/user/${user.name}/${examplesRoot}/input/input.txt output_dir=/user/${user.name}/${examplesRoot}/output/ $ /usr/bin/oozie job -oozie http://localhost:11000/oozie -config pig-job.properties -run $ /usr/bin/oozie jobs -oozie http://localhost:11000/oozie Job ID App Name Status User Group Started Ended ------------------------------------------------------------------------------------------------------------------------------------ 0000020-121223110114595-oozie-oozi-W pig-wf SUCCEEDED yuta users 2012-12-23 05:13 2012-12-23 05:15Pig Oozie Coordinator
Oozie Coord Use Cases · yahoo/oozie Wiki · GitHub
定期処理化を設定するためにOozie Coordinatorを作成します。workflowと同様にxmlファイルを定義します。以下のサンプルでは60分毎にJobを実行するような設定を書きます。${変数名}にはpropertiesファイルで書かれた変数が渡ってきます。<!-- coordinator --> <coordinator-app name="pig_test" frequency="${freq}" start="${startTime}" end="${endTime}" timezone="${timezone}" xmlns="uri:oozie:coordinator:0.1"> <controls> <timeout>${timeout}</timeout> </controls> <action> <workflow> <app-path>${workflowPath}</app-path> </workflow> </action> </coordinator-app> <!-- properties --> nameNode=hdfs://localhost:8020 jobTracker=localhost:8021 queueName=default examplesRoot=tmp user.name=yuta freq=60 startTime=2012-01-01T05:00Z endTime=2013-01-01T06:00Z timezone=UTC timeout=10 oozie.coord.application.path=${nameNode}/user/${user.name}/${examplesRoot}/coordinator workflowPath=${nameNode}/user/${user.name}/${examplesRoot}/ input_file=/user/${user.name}/${examplesRoot}/input/input.txt output_dir=/user/${user.name}/${examplesRoot}/output/$ usr/bin/oozie job -oozie http://localhost:11000/oozie -run -config pig-coordinator.properties job: 0000008-121229133003678-oozie-oozi-C $ /usr/bin/oozie job -oozie http://localhost:11000/oozie -info 0000008-121229133003678-oozie-oozi-C Job ID : 0000008-121229133003678-oozie-oozi-C ------------------------------------------------------------------------------------------------------------------------------------ Job Name : pig_test App Path : hdfs://localhost:8020/user/yuta/tmp/coordinator/coordinator.xml Status : RUNNING ------------------------------------------------------------------------------------------------------------------------------------ ID Status Ext ID Err Code Created Nominal Time 0000008-121229133003678-oozie-oozi-C@1 SUCCEEDED 0000009-121229133003678-oozie-oozi-W - 2012-12-29 04:49 2012-01-01 05:00その他
oozieの実行に関するデータはMysqlに格納されています。実行データを奇麗にしたい場合はoozieコマンドのkillで消す事ができますが一つずつのJobしか消せないので、一括で消したい場合はMysqlのDELETEを使ってやると良いと思います。
mysql> use oozie Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> show tables; +-----------------+ | Tables_in_oozie | +-----------------+ | COORD_ACTIONS | | COORD_JOBS | | SLA_EVENTS | | WF_ACTIONS | | WF_JOBS | +-----------------+ 5 rows in set (0.01 sec) mysql> show create table COORD_ACTIONS; | COORD_ACTIONS | CREATE TABLE `COORD_ACTIONS` ( `id` varchar(255) NOT NULL, `action_number` int(11) DEFAULT NULL, `action_xml` text, `console_url` varchar(255) DEFAULT NULL, `created_conf` text, `error_code` varchar(255) DEFAULT NULL, `error_message` varchar(255) DEFAULT NULL, `external_status` varchar(255) DEFAULT NULL, `missing_dependencies` text, `run_conf` text, `time_out` int(11) DEFAULT NULL, `tracker_uri` varchar(255) DEFAULT NULL, `job_type` varchar(255) DEFAULT NULL, `bean_type` varchar(31) DEFAULT NULL, `created_time` datetime DEFAULT NULL, `external_id` varchar(255) DEFAULT NULL, `job_id` varchar(255) DEFAULT NULL, `last_modified_time` datetime DEFAULT NULL, `nominal_time` datetime DEFAULT NULL, `rerun_time` datetime DEFAULT NULL, `sla_xml` text, `status` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`), KEY `I_CRD_TNS_CREATED_TIME` (`created_time`), KEY `I_CRD_TNS_DTYPE` (`bean_type`), KEY `I_CRD_TNS_EXTERNAL_ID` (`external_id`), KEY `I_CRD_TNS_JOB_ID` (`job_id`), KEY `I_CRD_TNS_LAST_MODIFIED_TIME` (`last_modified_time`), KEY `I_CRD_TNS_RERUN_TIME` (`rerun_time`), KEY `I_CRD_TNS_STATUS` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 |