1:创建shell脚本

 touch sqoop_options.sh
chmod 777 sqoop_options.sh

编辑文件  特地将执行map的个数设置为变量  测试 可以java代码传参数 同时也验证sqoop的 options 属性支持这种写法

 #!/bin/bash
/opt/cdh-5.3.6/sqoop-1.4.5-cdh5.3.6/bin/sqoop --options-file /opt/cdh-5.3.6/sqoop-1.4.5-cdh5.3.6/sqoop-import-mysql.txt --num-mappers $1
if [ $? -eq 0 ];then
echo "success"
else
echo "error"
fi

2:创建  sqoop-import-mysql.txt 文件并编辑

touch sqoop-import-mysql.txt
 export
--connect
jdbc:mysql://172.16.71.27:3306/babasport
--username
root
--password
root
--table
test_hive
--export-dir
/user/hive/warehouse/hive_bbs_product_snappy
--input-fields-terminated-by
'\t'

hive数据存在hdfs位置

3:开始写java后台代码   目前只支持 window写法 后期加上linux调用shell脚本的写法

 package com.liveyc.common.utils;

 import java.util.Properties;

 import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; public class FileToHbase {
/**
* shell脚本执行成功标识
*/
public static int SHELL_EXIT_OK = 0;
public static Log log = LogFactory.getLog(FileToHbase.class);
public static String connIp = "172.16.71.120";
public static String connUser = "root";
public static String connPwd = "123456"; public static void main(String[] args) throws Exception {
boolean result = export();
System.out.println(result);
} public static boolean export() throws Exception {
boolean result = false;
// 如果当前系统是window系统需要远程ssh连接系统
if (isWinSystem()) {
ConnectShell connectShell = new ConnectShell(connIp, connUser, connPwd, "utf-8");
String url = "/opt/cdh-5.3.6/sqoop-1.4.5-cdh5.3.6/sqoop_options.sh" + " " +1;
result = connectShell.excuteShellCommand(url);
}
return result;
} /**
* 当前操作系统类型
*
* @return true 为windos系统,false为linux系统
*/
public static boolean isWinSystem() {
// 获取当前操作系统类型
Properties prop = System.getProperties();
String os = prop.getProperty("os.name");
if (os.startsWith("win") || os.startsWith("Win")) {
return true;
} else {
return false;
}
}
}
 package com.liveyc.common.utils;

 import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import ch.ethz.ssh2.ChannelCondition;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler; /**
*
* ConnectShell
*
* @Description:连接Shell脚本所在服务器
* @author:aitf
* @date: 2016年3月31日
*
*/
public class ConnectShell {
private Connection conn;
private String ipAddr;
private String userName;
private String password;
private String charset = Charset.defaultCharset().toString();
private static final int TIME_OUT = 1000 * 5 * 60;
public static Log log = LogFactory.getLog(ConnectShell.class); public ConnectShell(String ipAddr, String userName, String password, String charset) {
this.ipAddr = ipAddr;
this.userName = userName;
this.password = password;
if (charset != null) {
this.charset = charset;
}
} public boolean login() throws IOException {
conn = new Connection(ipAddr);
conn.connect();
return conn.authenticateWithPassword(userName, password); // 认证
} /**
*
* @Title: excuteShellCommand
* @Description: 执行shell脚本命令
* @param shellpath
* @return
*/
public boolean excuteShellCommand(String shellpath) {
InputStream in = null;
boolean result = false;
String str = "";
try {
if (this.login()) {
Session session = conn.openSession();
//session.execCommand("cd /root");
session.execCommand(shellpath);
in = new StreamGobbler(session.getStdout());
// in = session.getStdout();
str = this.processStdout(in, charset);
session.waitForCondition(ChannelCondition.EXIT_STATUS, TIME_OUT);
session.close();
conn.close();
if (str.contains("success")) {
result = true;
}else{
result = false;
}
}
} catch (IOException e1) {
e1.printStackTrace();
}
return result;
} public String excuteShellCommand2(String shellpath) throws Exception {
InputStream in = null;
String result = "";
try {
if (this.login()) {
Process exec = Runtime.getRuntime().exec(shellpath);// ipconfig
in = exec.getInputStream();
result = this.processStdout(in, this.charset);
}
} catch (IOException e1) {
e1.printStackTrace();
}
return result;
} /**
* 转化结果
*
* @param in
* @param charset
* @return
* @throws UnsupportedEncodingException
*/
public String processStdout(InputStream in, String charset) throws UnsupportedEncodingException {
String line = null;
BufferedReader brs = new BufferedReader(new InputStreamReader(in, charset));
StringBuffer sb = new StringBuffer();
try {
while ((line = brs.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
log.error("---转化出现异常---");
}
return sb.toString();
} }

4:开始测试

在mysql创建一个表  hive中数据格式 是  int int String

 CREATE TABLE test_hive(
id INT,
brand_id INT,
NAME VARCHAR(200)
)

执行java main方法 开始测试

观看8088端口 查看MapReduce的运行状况 发现正在运行(开心)

执行完毕  

可以看到 只有1个 MapReduce任务 (默认的个数是4个 这样看来第一步写的shell脚本 参数是传递过来了 sqoop的 options 也支持这种直接指定参数的写法)

现在转过来看java代码

返回值 :

 Warning: /opt/cdh-5.3.6/sqoop-1.4.5-cdh5.3.6/bin/../../hbase does not exist! HBase imports will fail.
Please set $HBASE_HOME to the root of your HBase installation.
Warning: /opt/cdh-5.3.6/sqoop-1.4.5-cdh5.3.6/bin/../../hcatalog does not exist! HCatalog jobs will fail.
Please set $HCAT_HOME to the root of your HCatalog installation.
Warning: /opt/cdh-5.3.6/sqoop-1.4.5-cdh5.3.6/bin/../../accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
Warning: /opt/cdh-5.3.6/sqoop-1.4.5-cdh5.3.6/bin/../../zookeeper does not exist! Accumulo imports will fail.
Please set $ZOOKEEPER_HOME to the root of your Zookeeper installation.
success

发现返回 success 说明shell脚本执行成功了

一切执行正常   看下mysql 数据库表中有没有数据

OK 一切正常 , 后期把linux执行shell脚本的语句也补充上 。

用java代码调用shell脚本执行sqoop将hive表中数据导出到mysql的更多相关文章

  1. Java代码调用Shell脚本并传入参数实现DB2数据库表导出到文件

    本文通过Java代码调用Shell脚本并传入参数实现DB2数据库表导出到文件,代码如下: import java.io.File; import java.io.IOException; import ...

  2. (MySQL里的数据)通过Sqoop Import Hive 里 和 通过Sqoop Export Hive 里的数据到(MySQL)

    Sqoop 可以与Hive系统结合,实现数据的导入和导出,用户需要在 sqoop-env.sh 中添加HIVE_HOME的环境变量. 具体,见我的如下博客: hadoop2.6.0(单节点)下Sqoo ...

  3. Java如何调用shell脚本的

    有些时候会碰到这样的场景:java的功能里面要嵌入一个功能点,这个功能是通过是shell脚本实现的.这种时候就需要Java对脚本调用的支持了. 测试环境 Ubuntu16.04 i3-6100,12G ...

  4. 通过ant调用shell脚本执行adb命令

    在Hudson或者Jenkins中利用ant的exec 来调用shell命令,通过shell脚本来执行adb shell命令,可以正常执行,不会出现在ant中直接调用adb shell出现的假死情况. ...

  5. 利用jmeter发起java请求调用shell脚本

    1.创建maven项目 在pom文件中加入依赖:     2.在路径src/main/java下创建类,如类名shellclass                     3.      创建jmet ...

  6. java调用shell脚本执行操作

    //定时清空 日志 String shellString = "sh /home/jyapp/delete_log.sh"; Process process = Runtime.g ...

  7. Java 调用 shell 脚本详解

    这一年的项目中,有大量的场景需要Java 进程调用 Linux的bash shell 脚本实现相关功能. 从之前的项目中拷贝的相关模块和网上的例子来看,有个别的“陷阱”造成调用shell 脚本在某些特 ...

  8. python调用shell脚本时需要切换目录

    最近遇到了一个问题,就是python代码调用shell脚本时,发现输入输出的文件,总是和自己预想的有偏差,但是单独在linux下执行命令的时候,却没有错误.后来发现是相对路径的问题,因为执行pytho ...

  9. Java代码调用服务器上的Shell脚本

    Java代码调用服务器上的Shell脚本 这里主要是因为我们报表平台有用到用户手工录入的数据作为结果数据且需要纳入saiku去展示 如我们所知,saiku不会自动刷新,所以需要在数据更新接口中调用服务 ...

随机推荐

  1. 简单的 php 防注入、防跨站 函数

    /** * 简单的 php 防注入.防跨站 函数 * @return String */ function fn_safe($str_string) { //直接剔除 $_arr_dangerChar ...

  2. SharePoint 2016 Document Center Send To Connection

    General Application setting->configure send to connection then i had to choose web application&qu ...

  3. Android Studio -导入项目 gradle处理

    如果导入 android studio 项目, 那么一定要注意 需要合适的gradle版本,具体方法为: 首先导入步骤: 打开android studio ==> File ==> New ...

  4. 第95天:CSS3 边框、背景和文字效果

    1.CSS3边框: border-radius:CSS3圆角边框.在 CSS2 中添加圆角矩形需要技巧,我们必须为每个圆角使用不同的图片,在 CSS3 中,创建圆角是非常容易的,在 CSS3 中,bo ...

  5. js控制iframe高度自动撑开

    <iframe src="index.html" width="100%" name="" id="myiframe&quo ...

  6. 【Django】Django—Form两种解决表单数据无法动态刷新的方法

    一.无法动态更新数据的实例 1. 如下,数据库中创建了班级表和教师表,两张表的对应关系为“多对多” from django.db import models class Classes(models. ...

  7. Android四大组件之Intent

    Intent不是android几大组件框架,但是确实是android 各大组件之间沟通的桥梁. 尤其Intent对于activity有很大的关系. 一下是我个人对task以及backstack的总结.

  8. tarjan求lca 模板

    #include <iostream> #include <cstdio> #include <sstream> #include <cstring> ...

  9. Spring Boot系列教程三:使用devtools实现热部署

    一.前言 Eclipse下使用spring-tool-suite插件创建一个spring boot 工程,通过右键“Run As”--->"Spring Boot App"来 ...

  10. Codeforces709

    A Kolya is going to make fresh orange juice. He has n oranges of sizes a1, a2, ..., an. Kolya will p ...