DBConfiguration.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:7k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. package org.apache.hadoop.mapred.lib.db;
  19. import java.sql.Connection;
  20. import java.sql.DriverManager;
  21. import java.sql.SQLException;
  22. import org.apache.hadoop.mapred.JobConf;
  23. import org.apache.hadoop.mapred.lib.db.DBInputFormat.NullDBWritable;
  24. /**
  25.  * A container for configuration property names for jobs with DB input/output. 
  26.  * <br>
  27.  * The job can be configured using the static methods in this class, 
  28.  * {@link DBInputFormat}, and {@link DBOutputFormat}. 
  29.  * <p> 
  30.  * Alternatively, the properties can be set in the configuration with proper
  31.  * values. 
  32.  *   
  33.  * @see DBConfiguration#configureDB(JobConf, String, String, String, String)
  34.  * @see DBInputFormat#setInput(JobConf, Class, String, String)
  35.  * @see DBInputFormat#setInput(JobConf, Class, String, String, String, String...)
  36.  * @see DBOutputFormat#setOutput(JobConf, String, String...)
  37.  */
  38. public class DBConfiguration {
  39.   /** The JDBC Driver class name */
  40.   public static final String DRIVER_CLASS_PROPERTY = "mapred.jdbc.driver.class";
  41.   
  42.   /** JDBC Database access URL */
  43.   public static final String URL_PROPERTY = "mapred.jdbc.url";
  44.   /** User name to access the database */
  45.   public static final String USERNAME_PROPERTY = "mapred.jdbc.username";
  46.   
  47.   /** Password to access the database */
  48.   public static final String PASSWORD_PROPERTY = "mapred.jdbc.password";
  49.   /** Input table name */
  50.   public static final String INPUT_TABLE_NAME_PROPERTY = "mapred.jdbc.input.table.name";
  51.   /** Field names in the Input table */
  52.   public static final String INPUT_FIELD_NAMES_PROPERTY = "mapred.jdbc.input.field.names";
  53.   /** WHERE clause in the input SELECT statement */
  54.   public static final String INPUT_CONDITIONS_PROPERTY = "mapred.jdbc.input.conditions";
  55.   
  56.   /** ORDER BY clause in the input SELECT statement */
  57.   public static final String INPUT_ORDER_BY_PROPERTY = "mapred.jdbc.input.orderby";
  58.   
  59.   /** Whole input query, exluding LIMIT...OFFSET */
  60.   public static final String INPUT_QUERY = "mapred.jdbc.input.query";
  61.   
  62.   /** Input query to get the count of records */
  63.   public static final String INPUT_COUNT_QUERY = "mapred.jdbc.input.count.query";
  64.   
  65.   /** Class name implementing DBWritable which will hold input tuples */
  66.   public static final String INPUT_CLASS_PROPERTY = "mapred.jdbc.input.class";
  67.   /** Output table name */
  68.   public static final String OUTPUT_TABLE_NAME_PROPERTY = "mapred.jdbc.output.table.name";
  69.   /** Field names in the Output table */
  70.   public static final String OUTPUT_FIELD_NAMES_PROPERTY = "mapred.jdbc.output.field.names";  
  71.   /**
  72.    * Sets the DB access related fields in the JobConf.  
  73.    * @param job the job
  74.    * @param driverClass JDBC Driver class name
  75.    * @param dbUrl JDBC DB access URL. 
  76.    * @param userName DB access username 
  77.    * @param passwd DB access passwd
  78.    */
  79.   public static void configureDB(JobConf job, String driverClass, String dbUrl
  80.       , String userName, String passwd) {
  81.     job.set(DRIVER_CLASS_PROPERTY, driverClass);
  82.     job.set(URL_PROPERTY, dbUrl);
  83.     if(userName != null)
  84.       job.set(USERNAME_PROPERTY, userName);
  85.     if(passwd != null)
  86.       job.set(PASSWORD_PROPERTY, passwd);    
  87.   }
  88.   /**
  89.    * Sets the DB access related fields in the JobConf.  
  90.    * @param job the job
  91.    * @param driverClass JDBC Driver class name
  92.    * @param dbUrl JDBC DB access URL. 
  93.    */
  94.   public static void configureDB(JobConf job, String driverClass, String dbUrl) {
  95.     configureDB(job, driverClass, dbUrl, null, null);
  96.   }
  97.   private JobConf job;
  98.   DBConfiguration(JobConf job) {
  99.     this.job = job;
  100.   }
  101.   /** Returns a connection object o the DB 
  102.    * @throws ClassNotFoundException 
  103.    * @throws SQLException */
  104.   Connection getConnection() throws ClassNotFoundException, SQLException{
  105.     Class.forName(job.get(DBConfiguration.DRIVER_CLASS_PROPERTY));
  106.     if(job.get(DBConfiguration.USERNAME_PROPERTY) == null) {
  107.       return DriverManager.getConnection(job.get(DBConfiguration.URL_PROPERTY));
  108.     } else {
  109.       return DriverManager.getConnection(
  110.           job.get(DBConfiguration.URL_PROPERTY), 
  111.           job.get(DBConfiguration.USERNAME_PROPERTY), 
  112.           job.get(DBConfiguration.PASSWORD_PROPERTY));
  113.     }
  114.   }
  115.   String getInputTableName() {
  116.     return job.get(DBConfiguration.INPUT_TABLE_NAME_PROPERTY);
  117.   }
  118.   void setInputTableName(String tableName) {
  119.     job.set(DBConfiguration.INPUT_TABLE_NAME_PROPERTY, tableName);
  120.   }
  121.   String[] getInputFieldNames() {
  122.     return job.getStrings(DBConfiguration.INPUT_FIELD_NAMES_PROPERTY);
  123.   }
  124.   void setInputFieldNames(String... fieldNames) {
  125.     job.setStrings(DBConfiguration.INPUT_FIELD_NAMES_PROPERTY, fieldNames);
  126.   }
  127.   String getInputConditions() {
  128.     return job.get(DBConfiguration.INPUT_CONDITIONS_PROPERTY);
  129.   }
  130.   void setInputConditions(String conditions) {
  131.     if (conditions != null && conditions.length() > 0)
  132.       job.set(DBConfiguration.INPUT_CONDITIONS_PROPERTY, conditions);
  133.   }
  134.   String getInputOrderBy() {
  135.     return job.get(DBConfiguration.INPUT_ORDER_BY_PROPERTY);
  136.   }
  137.   
  138.   void setInputOrderBy(String orderby) {
  139.     if(orderby != null && orderby.length() >0) {
  140.       job.set(DBConfiguration.INPUT_ORDER_BY_PROPERTY, orderby);
  141.     }
  142.   }
  143.   
  144.   String getInputQuery() {
  145.     return job.get(DBConfiguration.INPUT_QUERY);
  146.   }
  147.   
  148.   void setInputQuery(String query) {
  149.     if(query != null && query.length() >0) {
  150.       job.set(DBConfiguration.INPUT_QUERY, query);
  151.     }
  152.   }
  153.   
  154.   String getInputCountQuery() {
  155.     return job.get(DBConfiguration.INPUT_COUNT_QUERY);
  156.   }
  157.   
  158.   void setInputCountQuery(String query) {
  159.     if(query != null && query.length() >0) {
  160.       job.set(DBConfiguration.INPUT_COUNT_QUERY, query);
  161.     }
  162.   }
  163.   
  164.   
  165.   Class<?> getInputClass() {
  166.     return job.getClass(DBConfiguration.INPUT_CLASS_PROPERTY, NullDBWritable.class);
  167.   }
  168.   void setInputClass(Class<? extends DBWritable> inputClass) {
  169.     job.setClass(DBConfiguration.INPUT_CLASS_PROPERTY, inputClass, DBWritable.class);
  170.   }
  171.   String getOutputTableName() {
  172.     return job.get(DBConfiguration.OUTPUT_TABLE_NAME_PROPERTY);
  173.   }
  174.   void setOutputTableName(String tableName) {
  175.     job.set(DBConfiguration.OUTPUT_TABLE_NAME_PROPERTY, tableName);
  176.   }
  177.   String[] getOutputFieldNames() {
  178.     return job.getStrings(DBConfiguration.OUTPUT_FIELD_NAMES_PROPERTY);
  179.   }
  180.   void setOutputFieldNames(String... fieldNames) {
  181.     job.setStrings(DBConfiguration.OUTPUT_FIELD_NAMES_PROPERTY, fieldNames);
  182.   }
  183. }