使用unixsudo和ssh通过java连接到hadoop

hmtdttj4  于 2021-05-30  发布在  Hadoop
关注(0)|答案(0)|浏览(148)

我正在尝试使用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) { }
    }
}

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题