2017-05-28 143 views
0

我的Java代码中有一些hadoop文件系统操作(例如:hdfs mkdir)。当我尝试使用java -cp运行java程序时,该目录在linux本地文件系统中创建。所以我用hadoop jar命令运行程序,并在hdfs中创建目录。现在我打算使用hadoop jar命令运行整个java程序。我想知道,通过读取本地文件夹的文件或执行Runtime.getRuntime().exec(some linux command);以下时使用Hadoop jar命令特别是会不会有任何问题,如果代码为我的HDFS的片段文件操作我可以使用hadoop jar命令来运行普通的java程序吗?

Configuration conf = new Configuration();  
FileSystem fs = FileSystem.get(conf); 
boolean res = fs.mkdirs(directory path); 

回答

1

是的,可以使用Hadoop的jar命令以运行正常的Java程序。但相反是错误的。 Hadoop文件系统操作只能在hadoop环境下运行。但是,如果您正在hadoop集群中运行,则linux命令可能会在从属节点中执行。

+0

显然,如果我使用hadoop jar命令,我不能指定外部相关jar。请注意,我没有任何地图缩减代码,我只是有一些hdfs文件操作。 –

+1

是的,在Hadoop环境下运行时,也可以使用外部相关的罐子。它可以用不同的方式完成。您可以创建一个包含所有依赖项的超级jar包,也可以在每个节点中分配相关jar,并在$ HADOOP_CLASSPATH变量中定义路径。 –

+0

我正在尝试不同的解决方案,因为我没有管理权限。我不想构建一个胖的jar,因为它会增加我的部署jar,并且会是多余的。有没有可以在我的新配置()对象中指定配置的方式,以便我可以直接写入HDFS? –

相关问题