This project has retired. For details please refer to its
Attic page.
001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements. See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership. The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018 package org.apache.oozie.action.hadoop;
019
020 import java.io.IOException;
021 import java.io.StringReader;
022 import java.util.ArrayList;
023 import java.util.List;
024 import java.util.StringTokenizer;
025
026 import org.apache.hadoop.conf.Configuration;
027 import org.apache.hadoop.fs.Path;
028 import org.apache.oozie.action.ActionExecutorException;
029 import org.apache.oozie.client.WorkflowAction;
030 import org.apache.oozie.util.XConfiguration;
031 import org.apache.oozie.util.XmlUtils;
032 import org.jdom.Element;
033 import org.jdom.JDOMException;
034 import org.jdom.Namespace;
035
036 public class SqoopActionExecutor extends JavaActionExecutor {
037
038
039 public SqoopActionExecutor() {
040 super("sqoop");
041 }
042
043 @Override
044 protected List<Class> getLauncherClasses() {
045 List<Class> classes = super.getLauncherClasses();
046 classes.add(LauncherMain.class);
047 classes.add(MapReduceMain.class);
048 classes.add(HiveMain.class);
049 classes.add(SqoopMain.class);
050 return classes;
051 }
052
053 @Override
054 protected String getLauncherMain(Configuration launcherConf, Element actionXml) {
055 return launcherConf.get(LauncherMapper.CONF_OOZIE_ACTION_MAIN_CLASS, SqoopMain.class.getName());
056 }
057
058 @Override
059 Configuration setupLauncherConf(Configuration conf, Element actionXml, Path appPath, Context context)
060 throws ActionExecutorException {
061 super.setupLauncherConf(conf, actionXml, appPath, context);
062
063 HiveActionExecutor hiveAE = new HiveActionExecutor();
064 hiveAE.setupHiveDefault(conf, appPath, actionXml);
065
066 return conf;
067 }
068
069 @Override
070 @SuppressWarnings("unchecked")
071 Configuration setupActionConf(Configuration actionConf, Context context, Element actionXml, Path appPath)
072 throws ActionExecutorException {
073 super.setupActionConf(actionConf, context, actionXml, appPath);
074 Namespace ns = actionXml.getNamespace();
075
076 try {
077 Element e = actionXml.getChild("configuration", ns);
078 if (e != null) {
079 String strConf = XmlUtils.prettyPrint(e).toString();
080 XConfiguration inlineConf = new XConfiguration(new StringReader(strConf));
081 checkForDisallowedProps(inlineConf, "inline configuration");
082 XConfiguration.copy(inlineConf, actionConf);
083 }
084 } catch (IOException ex) {
085 throw convertException(ex);
086 }
087
088 String[] args;
089 if (actionXml.getChild("command", ns) != null) {
090 String command = actionXml.getChild("command", ns).getTextTrim();
091 StringTokenizer st = new StringTokenizer(command, " ");
092 List<String> l = new ArrayList<String>();
093 while (st.hasMoreTokens()) {
094 l.add(st.nextToken());
095 }
096 args = l.toArray(new String[l.size()]);
097 }
098 else {
099 List<Element> eArgs = (List<Element>) actionXml.getChildren("arg", ns);
100 args = new String[eArgs.size()];
101 for (int i = 0; i < eArgs.size(); i++) {
102 args[i] = eArgs.get(i).getTextTrim();
103 }
104 }
105
106 SqoopMain.setSqoopCommand(actionConf, args);
107 return actionConf;
108 }
109
110 @Override
111 protected boolean getCaptureOutput(WorkflowAction action) throws JDOMException {
112 return true;
113 }
114
115
116 /**
117 * Return the sharelib postfix for the action.
118 *
119 * @param context executor context.
120 * @param actionXml the action XML.
121 * @return the action sharelib post fix, this implementation returns <code>hive</code>.
122 */
123 protected String getShareLibPostFix(Context context, Element actionXml) {
124 return "sqoop";
125 }
126
127 }