繁体   English   中英

使用APACHE Web服务器,Linux CentOS访问HDFS HADOOP

[英]Access HDFS HADOOP using APACHE Web Server, Linux CentOS

如果我有一个Apache Web服务器作为目录,我如何访问HDFS群集以上传和修改文件,我要做什么配置?

非常感谢

我不明白您最初提出的要求,我认为您正在设计一些Web应用程序,并且您希望从中访问HDFS,对吗? 为了操纵HDFS,我们使用Hadoop API。 因此,您可以使用Hadoop API轻松访问HDFS。 使用Java Apache小门来开发您的Web应用程序,因为它将允许您将Java和HTML一起使用来设计网站。 然后,您可以轻松导入Hadoop API类以访问HDFS。

另一种方法是,如果您不想使用Hadoop API访问HDFS,则通常使用终端来操纵HDFS。 例如 :

hadoop fs -put <file name> <dir name> 

在HDFS中上传数据。 使用java的'ProcessBuilder'类,通过它可以从java程序内部调用任何shell命令。 我给ypu代码从java程序内部调用shell命令:

protected final String executeCommand2(String [] parts)
{
int len = parts.length;
ProcessBuilder builder;
if(len==0) return null;
else if(len==1) builder = new ProcessBuilder(parts[0]);
else if(len==2) builder = new ProcessBuilder(parts[0],parts[1]);
else if(len==3) builder = new ProcessBuilder(parts[0],parts[1],parts[2]);
else if(len==4) builder = new ProcessBuilder(parts[0],parts[1],parts[2],parts[3]);
else if(len==5) builder = new ProcessBuilder(parts[0],parts[1],parts[2],parts[3],parts[4]);
else if(len==6) builder = new ProcessBuilder(parts[0],parts[1],parts[2],parts[3],parts[4],parts[5]);
else if(len==7) builder = new ProcessBuilder(parts[0],parts[1],parts[2],parts[3],parts[4],parts[5],parts[6]);
else if(len==8) builder = new ProcessBuilder(parts[0],parts[1],parts[2],parts[3],parts[4],parts[5],parts[6],parts[7]);
else return null;
        builder.redirectErrorStream(true);
        Process process = null;
        String newstr="" , oldstr = "";
        try{
             process = builder.start();
             InputStream is = process.getInputStream();
             InputStreamReader isr = new InputStreamReader(is);
             BufferedReader br = new BufferedReader(isr);
             while ((newstr = br.readLine()) != null)
             {
                 oldstr = oldstr+"\n"+newstr;

             }
                 process.waitFor();
            }catch(Exception e)
            {
                newstr = "Exception = " + e;
                oldstr = oldstr+"\n"+newstr;

            }
        int exitCode = process.exitValue();
        if(exitCode == 0)
            {
                 newstr="Successfull termination "+exitCode ;
                 oldstr = oldstr+"\n"+newstr;
            }
        else
            {
                 newstr="abrupt termination "+ exitCode;
                 oldstr = oldstr+"\n"+newstr;
             }
        newstr="##################################";
         oldstr = oldstr+"\n"+newstr;
        if(oldstr.length() > 2000)
           oldstr = "";
        return oldstr;
    } // function ends here

调用上述函数,如下所示:

String resultLines = executeCommand2(new String[]{
                    "sh",
        "<absolute path to hadoop script present in $HADOOP_HOME/conf",
                    "fs",
                    "-put",
                    "absolute path to your yourfile.txt",
                    "input HDFS dir"
                    });

resultLines将包含与在外壳上调用命令后在外壳上显示的文本相同的文本。 您可以调用任何具有最多7个参数的shell命令。 当然,您可以修改函数以接受带有更多参数的shell命令。 希望它能帮助你。

请注意,如果使用的是tomcat apache Web服务器,请使用与Linux帐户的用户名相同的用户名登录服务器,以便您有权访问本地驱动器上的脚本。 为此,请在/ var / lib / tomcat6 / conf firectory中编辑tomcat-users.xml文件。 添加以下行:

 <role rolename="manager"/>
 <role rolename="admin"/>
<user username="your linux user name" password="your passwd" roles="admin,manager"/>

而已。

另请注意,如果您使用processbuilder类机制来构建应用程序,则您的应用程序将变为linux特定的,并且将无法在Windows计算机上运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM