[英]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.