如何从java应用程序远程执行hadoop命令

eqfvzcg8  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(354)

嗨,我正在通过java应用程序远程执行任何hadoop命令,比如“HadoopFS-ls”。我在本地机器上有java应用程序,在虚拟机上有hadoop。
首先,我建立一个ssh连接并工作。我还可以通过运行的java代码执行linux命令,但是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:未找到命令

ylamdve6

ylamdve61#

打开bashsrc并将hadoopbin文件夹路径添加到文件中的path变量。跑 source ~/.bashrc 命令。
或者,可以对命令变量进行以下更改:

command = usr/local/hadoop/bin/hadoop fs -ls
ztyzrc3y

ztyzrc3y2#

如果您得到这个错误,“bash:hadoop:command not found”的意思是。操作系统无法识别hadoop
您需要用hadoop主目录更新“.bashrc”文件

相关问题