我正在尝试使用java程序连接到hadoop。首先让我告诉你,我对java是新手,但我能理解基本代码。
以下是我如何通过putty连接到hadoop(在unix上):
连接到unix(通过提供主机名、用户名和密码)
运行sudo命令(sudo su-)(我必须在这里提供密码)
从当前主机运行ssh命令到hadoop主机(ssh defgh)
使用java程序,我能够连接到unix(步骤1)。我甚至可以在我连接的目录中运行一个unix命令。就像 ls
, wc-l
等。
但我还是要用密码再给一次 sudo
命令(步骤2)。之后,我运行ssh命令(步骤3)
有人能帮我完成剩下的步骤吗?如果我要导入任何jar文件,请帮助我的链接也。我在下面提供我当前的unix连接java程序。我下载了jar文件 com.jcraft.jsch_0.1.31
我的java程序。
package com.abc;
import java.io.InputStream;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.UserInfo;
public class First
{
public static void main(String args[])
{
String user="User ID";
String host="host Name";
String cmd="ls";
JSch jsch = new JSch();
try
{
Session session=jsch.getSession(user,host,22);
session.setPassword("pwd");
UserInfo usrInfo=new MyUserInfo();
session.setUserInfo(usrInfo);
session.connect();
Channel channel=session.openChannel("exec");
System.out.println("***1***");
((ChannelExec) channel).setCommand(cmd);
channel.setXForwarding(true);
InputStream in = channel.getInputStream();
channel.connect();
channel.setInputStream(System.in);
byte[] tmp = new byte[1024];
while (true)
{
System.out.println("***2***");
while (in.available() > 0)
{
int i = in.read(tmp, 0, 1024);
if (i < 0)
break;
System.out.print(new String(tmp, 0, i));
System.out.println("***3***");
}
if (channel.isClosed())
{
in.close();
break;
}
try
{
Thread.sleep(1000);
}
catch (Exception ee) {}
}
channel.disconnect();
session.disconnect();
}
catch(Exception e)
{
e.printStackTrace();
System.out.println("Exception"+e);
}
}
public static class MyUserInfo implements UserInfo
{
public String getPassword() { return "password"; }
public String getPassphrase() { return ""; }
public boolean promptPassword(String arg0) { return true; }
public boolean promptPassphrase(String arg0) { return true; }
public boolean promptYesNo(String arg0) { return true; }
public void showMessage(String arg0) { }
}
}
暂无答案!
目前还没有任何答案,快来回答吧!