如何从 Java 应用程序远程执行 Hadoop 命令
Posted
技术标签:
【中文标题】如何从 Java 应用程序远程执行 Hadoop 命令【英文标题】:how To Execute Hadoop Command from Java app remotely 【发布时间】:2015-11-23 07:47:00 【问题描述】:您好,我正在尝试通过 Java 应用程序远程执行任何 hadoop 命令,例如“hadoop fs -ls”。我在本地机器上有我的 Java 应用程序,在 VM 中有 Hadoop。
首先我建立一个 ssh 连接并开始工作。我也可以通过它正在工作的java代码执行一个linux命令,但是hadoop命令不起作用,它会抛出以下错误。执行hadoop命令有什么想法吗?
这是我的 jsch 程序
package com.jsch.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Properties;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
public class Jschtest
public static void main(String[] args)
String command="hadoop fs -ls /";
try
String host = "192.168.3.197"; //IP address of the remote server
String user = "user"; // Username of the remote server
String password = "HDP123!"; // Password of the remote server
JSch jsch = new JSch();
Session session = jsch.getSession(user, host, 22);
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);;
session.setPassword(password);
session.connect();
Channel channel = session.openChannel("exec");
((ChannelExec)channel).setCommand(command);
channel.setInputStream(null);
((ChannelExec)channel).setErrStream(System.err);
InputStream input = channel.getInputStream();
channel.connect();
System.out.println("Channel Connected to machine " + host + " server
with command: " + command );
try
InputStreamReader inputReader = new InputStreamReader(input);
BufferedReader bufferedReader = new BufferedReader(inputReader);
String line = null;
while((line = bufferedReader.readLine()) != null)
System.out.println(line);
bufferedReader.close();
inputReader.close();
catch(IOException ex)
ex.printStackTrace();
channel.disconnect();
session.disconnect();
catch(Exception ex)
ex.printStackTrace();
这是我的错误信息
Channel 连接到机器 192.168.3.197 服务器,命令:hadoop fs -ls /
bash: hadoop: 找不到命令
【问题讨论】:
【参考方案1】:打开您的 bashsrc 并将 Hadoop BIN 文件夹路径添加到文件中的 PATH 变量中。
运行source ~/.bashrc
命令。
或者,您可以对命令变量进行以下更改:
command = usr/local/hadoop/bin/hadoop fs -ls
【讨论】:
【参考方案2】:如果您收到此错误“bash: hadoop: command not found”的意思。 Hadoop 不被操作系统识别
您需要使用 hadoop 主目录更新“.bashrc”文件
【讨论】:
以上是关于如何从 Java 应用程序远程执行 Hadoop 命令的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Amazon EMR 集群上远程提交 hadoop MR 作业
本地idea开发mapreduce程序提交到远程hadoop集群执行