如何从 Java 应用远程执行 Hadoop 命令
how To Execute Hadoop Command from Java app remotely
您好,我正在尝试通过 Java 应用程序远程执行任何 hadoop 命令,例如 "hadoop fs -ls"。我的 Java 应用程序在我的本地计算机中,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();
}
}
}
这是我的错误信息
通道连接到机器 192.168.3.197 服务器,命令为:hadoop fs -ls /
bash:hadoop:找不到命令
如果您收到此错误 "bash: hadoop: command not found" 表示。 OS
无法识别 Hadoop
您需要使用 hadoop 主目录更新“.bashrc”文件
打开您的 bashsrc 并将 Hadoop BIN 文件夹路径添加到文件中的 PATH 变量。
运行 source ~/.bashrc
命令。
或者,您可以对命令变量进行以下更改:
command = usr/local/hadoop/bin/hadoop fs -ls
您好,我正在尝试通过 Java 应用程序远程执行任何 hadoop 命令,例如 "hadoop fs -ls"。我的 Java 应用程序在我的本地计算机中,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();
}
}
}
这是我的错误信息
通道连接到机器 192.168.3.197 服务器,命令为:hadoop fs -ls /
bash:hadoop:找不到命令
如果您收到此错误 "bash: hadoop: command not found" 表示。 OS
无法识别 Hadoop您需要使用 hadoop 主目录更新“.bashrc”文件
打开您的 bashsrc 并将 Hadoop BIN 文件夹路径添加到文件中的 PATH 变量。
运行 source ~/.bashrc
命令。
或者,您可以对命令变量进行以下更改:
command = usr/local/hadoop/bin/hadoop fs -ls