由于服务器在云端,vpn不好搭建,本地无法调试程序,只要本地写好代码传到服务器去编译运行了.
不知道有没有好的远程访问hdfs的访问,知道的大神希望能指点一二.
1.本地写好java代码传到服务器~/tmp/lib/java_example目录下
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import java.io.File;
import java.io.InputStream;
import java.net.URI;
public class HdfsApi {
public static void main(String[] args) throws Exception {
String uri = args[0];
Configuration configuration = new Configuration();
FileSystem fileSystem = FileSystem.get(URI.create(uri), configuration, "hadoop");
InputStream in = null;
try {
in = fileSystem.open(new Path(uri));
IOUtils.copyBytes(in,System,4096,false);
}finally {
IOUtils.closeStream(in);
}
}
}
2.服务端配置classpath,配置如下,我用的是hadoop2.6.0
Hadoop 2.x 版本中 jar 不再集中在一个 hadoop-core*.jar 中,而是分成多个 jar,如使用 Hadoop 2.6.0 运行 WordCount 实例至少需要如下三个 jar:
$HADOOP_HOME/share/hadoop/common/hadoop-common-2.6.0.jar
$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.6.0.jar
$HADOOP_HOME/share/hadoop/common/lib/commons-cli-1.2.jar
实际上,通过命令 hadoop classpath 我们可以得到运行 Hadoop 程序所需的全部 classpath 信息。
我们将 Hadoop 的 classhpath 信息添加到 CLASSPATH 变量中,在 ~/.bashrc 中增加如下几行:
export HADOOP_HOME=/usr/local/hadoop
export CLASSPATH=
(
<script id="MathJax-Element-3" type="math/tex">(</script>HADOOP_HOME/bin/hadoop classpath):$CLASSPATH
别忘了执行 source ~/.bashrc 使变量生效
3.cd 到java程序目录下运行
javac HdfsApi.java 生成HdfsApi.class文件
4.设置HADOOP_CLASSPATH
export HADOOP_CLASSPATH = /home/hadoop/lib/java_example
5.hadoop HdfsApi /a.txt运行即可