上一篇讲到 Hadoop 的配置,我们在搭建分布式计算系统的同时也已经搭建好分布式储存系统了。下面简述如何在应用程序(可以是 Console Application,也可以是 Web Application)调用 Hadoop HDFS。
我们除了可以使用 Hadoop 命令行管理里面的文件和目录之外,也可以通过 Hadoop API 管理。
1、先创建一个Java Application (Console) 程序,然后引用 hadoop-core-0.20.2.jar ,因为这个包同时引用非常多其他包,所以最好使用 Maven 引用这个包。
2、在项目根目录创建 core-site.xml :
<?xml version="1.0"?>
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.0.10:9000</value>
</property>
</configuration>
程序会自动寻找 CLASS_PATH 里面的 core-site.xml 文件,假如缺少这个文件的话,程序会使用本地文件系统。
3、创建 Helloworld.java:
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class HelloWorld {
public static void main(String[] args) {
try {
HelloWorld helloWorld = new HelloWorld();
helloWorld.run();
} catch (IOException e) {
e.printStackTrace();
}
}
public void run() throws IOException {
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
Path filenamePath = new Path("hello.txt");
if (fs.exists(filenamePath)) {
fs.delete(filenamePath, false);
}
FSDataOutputStream out = fs.create(filenamePath);
out.writeUTF("hello world");
out.close();
FSDataInputStream in = fs.open(filenamePath);
String messageIn = in.readUTF();
System.out.print(messageIn);
in.close();
}
}
这段代码应该简单到不用怎么说明了。
4、编译及运行,没有问题的话应该在HDFS里创建例如
/user/YOUR_NAME/hello.txt
这样的一个文本文件,可以通过浏览器访问 http://192.168.0.10:50070 查阅。
5、注意权限。HDFS 的文件权限跟操作系统的文件权限概念上是一致的,假如你用 yang 帐号运行 Hadoop,然后上面程序是用 huang 帐号运行,那么会出现权限错误。你应该先用启动 Hadoop 的帐号创建文件夹并且赋权给 huang 这样上面的程序才能正常运行:
$ bin/hadoop fs -mkdir /user/huang
$ bin/hadoop fs -chown huang /user/huang
我们除了可以使用 Hadoop 命令行管理里面的文件和目录之外,也可以通过 Hadoop API 管理。
1、先创建一个Java Application (Console) 程序,然后引用 hadoop-core-0.20.2.jar ,因为这个包同时引用非常多其他包,所以最好使用 Maven 引用这个包。
2、在项目根目录创建 core-site.xml :
<?xml version="1.0"?>
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.0.10:9000</value>
</property>
</configuration>
程序会自动寻找 CLASS_PATH 里面的 core-site.xml 文件,假如缺少这个文件的话,程序会使用本地文件系统。
3、创建 Helloworld.java:
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class HelloWorld {
public static void main(String[] args) {
try {
HelloWorld helloWorld = new HelloWorld();
helloWorld.run();
} catch (IOException e) {
e.printStackTrace();
}
}
public void run() throws IOException {
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
Path filenamePath = new Path("hello.txt");
if (fs.exists(filenamePath)) {
fs.delete(filenamePath, false);
}
FSDataOutputStream out = fs.create(filenamePath);
out.writeUTF("hello world");
out.close();
FSDataInputStream in = fs.open(filenamePath);
String messageIn = in.readUTF();
System.out.print(messageIn);
in.close();
}
}
这段代码应该简单到不用怎么说明了。
4、编译及运行,没有问题的话应该在HDFS里创建例如
/user/YOUR_NAME/hello.txt
这样的一个文本文件,可以通过浏览器访问 http://192.168.0.10:50070 查阅。
5、注意权限。HDFS 的文件权限跟操作系统的文件权限概念上是一致的,假如你用 yang 帐号运行 Hadoop,然后上面程序是用 huang 帐号运行,那么会出现权限错误。你应该先用启动 Hadoop 的帐号创建文件夹并且赋权给 huang 这样上面的程序才能正常运行:
$ bin/hadoop fs -mkdir /user/huang
$ bin/hadoop fs -chown huang /user/huang
评论
发表评论