Hadoop教程之编写HelloWorld(2)

前面我们写了一个Hadoop程序,并让它跑起来了。但想想不对啊,Hadoop不是有两块功能么,DFS和MapReduce。没错,上一节我们写了一个MapReduce的HelloWorld程序,那这一节,我们就也学一学DFS程序的编写。

DFS 是什么,之前已经了解过,它是一个分布式文件存储系统。不管是远程或本地的文件系统,其实从接口上讲,应该是一至的,不然很难处理。同时在第2节的最后, 我们列出了很多一些DFS的操作命令,仔细看一下,这些命令其实跟linux中的文件操作命令很相似,所以说,对于分布式文件系统,我们完全可以用本地文 件的方式来理解。

那理一下,一般常用操作有哪些? 当然我们可以从编程角度来:

创建、读、写一个文件,列出文件夹中的文件及文件夹列表,删除文件夹,删除目录,移动文件或文件夹,重命名文件或文件夹。

同样,这里我们就依葫芦画瓢跑起个程序来:

启 动eclipse,新建Hadoop项目,名称MyDFSTest,新建类DFSTest,点击确定,然后同样工程属性Configure BuildPath中把 build/ivy/lib/Hadoop下的所有jar包都引用进来。「这里就不详细截图了,可以参考前一节中的内容」

在类中,添加main函数:

?


1

2

public static void main(String[] args) {

}

也可以在添加类时,勾选上创建main,则会自动添加上。

在Main函数中添加以下内容:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

try {

Configuration conf = new Configuration();

conf.set("fs.default.name", "hdfs://localhost:9000");

FileSystem hdfs = FileSystem.get(conf);

Path path = new Path("in/test3.txt");

FSDataOutputStream outputStream = hdfs.create(path);

byte[] buffer = " 你好Hello".getBytes();

outputStream.write(buffer, 0, buffer.length);

outputStream.flush();

outputStream.close();

System.out.println("Create OK");

} catch (IOException e) {

e.printStackTrace();

}

直接添加进来会报错,然后需要添加一些引用才行:

?


1

2

3

4

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.FSDataOutputStream;

import org.apache.hadoop.fs.FileSystem;

import org.apache.hadoop.fs.Path;

在没有错误后,点击工具条上的运行, 但这次跟前次不一样,选择Run as Java Application。然后,就可以在输出框中看到Create OK的字样了,表明程序运行成功。

这段代码的意思是在in文件夹下,创建test3.txt,里面的内容是"你好Hello"。 在运行完后,我们可以到eclipse的Project Explorer中查看是否有这文件以及内容。同样也可以用命令行查看$bin/hadoop fs -ls in。

好了,第一个操作DFS的程序跑起来了,那其它功能只要套上相应的处理类就可以了。

为了方便查找操作,我们列举了张表:


操作说明


操作本地文件


操作DFS文件


主要命名空间


java.io.File

java.io.FileInputStream

java.io.FileOutputStream


org.apache.hadoop.conf.Configuration

org.apache.hadoop.fs.FileSystem

org.apache.hadoop.fs.Path

org.apache.hadoop.fs.FSDataInputStream;

org.apache.hadoop.fs.FSDataOutputStream


初使化对象


new File(路径);


Configuration

FileSystem hdfs


创建文件


File.createNewFile();


FSDataOutputStream = hdfs.create(path)

FSDataOutputStream.write(

buffer, 0, buffer.length);


创建文件夹


File.mkdir()


hdfs.mkdirs(Path);


读文件


new FileInputStream();

FileInputStream.read(buffer)


FSDataInputStream = hdfs.open(path);

FSDataInputStream.read(buffer);


写文件


FileOutputStream.write(

buffer, 0, buffer.length);


FSDataOutputStream = hdfs.append(path)

FSDataOutputStream.write(

buffer, 0, buffer.length);


删除文件(夹)


File.delete()


FileSystem.delete(Path)


列出文件夹内容


File.list();


FileSystem.listStatus()


重命令文件(夹)


File.renameTo(File)


FileSystem.rename(Path, Path)

有了这张表,以后不怕了,代码搬搬即可。

接下来换个话题。

本人主要从事.net开发的,所以对于java上,还是有点生。所以接下来半章中,简要的把JAVA的学习列一列。

JAVA和.net现在从语言角度看,的确有很多相似之处。但也有不同之处,这就是我们要学的。

在.Net中,主要有dll和exe, dll为类库, exe为可执行程序,在exe中有唯一的main函数,作为函数入口。dll 类库是无法执行的,exe可以双击运行,也可以命令行执行。编译后,.net会把所有定义的类编译进exe或dll中,一个工程产出文件就是一个。

在JAVA中,jar 对应的类库,可以被别人调用。exe就不存在了。一个工程编译后,产出物是一堆的.class文件,在开发中每一个定义的类,都会被编译成这 个.class文件。而且一个.java文件中,不能定义多个顶级类(嵌套类是可以的),且文件名与类名必须相同,文件所以的目录必须和命名空间相同。所 以编译后,可以讲一个.java文件将会编译成一个.class文件,且有与原先的目录相同。

也就是说,java有点像散装的一样,产物就是一堆的.class文件。 那jar文件呢,简单的说,就是一个zip包,把一堆的.class文件打包成一个压缩包。

同时,一个工程中,支持多个main函数,即多个入口。

说了一堆,还不如实践一下:

在eclipse中,创建一个JAVA project 取名为JAVAStudy。

然后创建两个类,没有目录的,ch1 ch2 再创建一个包叫pkg1,在这个包下创建一个类ch3:

然后,每个类下都建一个main函数,内容打印类名:

?


1

2

3

public static void main(String[] args) {

System.out.println(ch1.class.getName());

}

注意,复制到ch2 ch3中后要改一下里面的类名。

然后每当你切换到一个新的类代码中,点击运行,都会提示Run As ,都选Java Application。 然后就可以看到结果了,每个类都可以作为入口执行。

OK,程序好了,如何发布呢,或如何从命令行运行呢?

我们进入目录先看一下:

进入工程目录,可以看到有src和bin,进入bin,就可以看到一个个的class文件了,的确跟前面描述一样,目录与代码相同结构。

输入java ch1 就可以看到结果了。执行ch3时,注意中间不是斜线,而是点,因为这里输入的是命名空间+类名,而不是class文件的路径。

如果不在这个目录执行,看到会报错,或命名空间输错了,也是这个错。

如果我就在这里想执行呢? 可以这样:

利用classpath指定class的路径。

如何打成jar包:

进入bin目录:

$cd bin

$jar cvf test.jar ch1.class ch2.class pkg1/.class

然后在bin目录下就可以看到test.jar文件了。

如何执行jar呢,为了防止与里面的class文件冲突,我们将test.jar复制到外面来:

$cp test.jar ../

$cd ..

再执行:

$java –classpath test.jar ch1

同样,输入classpath就可以搞定了的。

了解了这些后,我们又可以做个试验证了。 第一章中我们运行hadoop中Helloword时,是调用了example的jar包。所以这里我们可以把上一章的程序也来打个jar包,试下是否能运行:

$cd ~/workspace/MyHelloWorld      //进入HelloWorld代码目录

$cd bin

$jar cvf test.jar *.class     //打上jar包

$cp test.jar ../../hadoop-0.20.2    //将jar包复制到hadoop目录下

$cd ../../hadoop-0.20.2

$bin/start-all.sh             //启动hadoop

$bin/hadoop test.jar WordCount in out //运行我们写的程序

然后就可以看到与之前一样的结果了。

时间: 2024-08-24 14:16:44

Hadoop教程之编写HelloWorld(2)的相关文章

Hadoop学习笔记(5) ——编写HelloWorld(2)

Hadoop学习笔记(5) ——编写HelloWorld(2) 前面我们写了一个Hadoop程序,并让它跑起来了.但想想不对啊,Hadoop不是有两块功能么,DFS和MapReduce.没错,上一节我们写了一个MapReduce的HelloWorld程序,那这一节,我们就也学一学DFS程序的编写. DFS是什么,之前已经了解过,它是一个分布式文件存储系统.不管是远程或本地的文件系统,其实从接口上讲,应该是一至的,不然很难处理.同时在第2节的最后,我们列出了很多一些DFS的操作命令,仔细看一下,这

typecho插件编写教程1 - 从HelloWorld说起

typecho插件编写教程1 - 从HelloWorld说起 老高 187 5月25日 发布 推荐 0 推荐 收藏 2 收藏,189 浏览 最近老高正在编写一个关于typecho的插件,由于typecho不像wordpress,有那么多的文档参考,写一个插件还是遇到了很多的坑,不过随着研究的不断深入,老高也慢慢上手了,于是总结出此篇编写教程分享给大家! 如果你对typecho的源码有兴趣,可以参考老高的系列文章 typecho源代码解析1 - 系统初始化typecho源代码解析2 - 插件机制t

在 Windows 上安装 Hadoop 教程(转)

在 Windows 上安装 Hadoop 教程 一见 2010.1.6 www.hadoopor.com/[email protected] 1. 安装 JDK 不建议只安装 JRE,而是建议直接安装 JDK,因为安装 JDK 时,可以同时安装 JRE. MapReduce 程序的编写和 Hadoop 的编译都依赖于 JDK,光 JRE 是不够的. JRE 下载地址:http://www.java.com/zh_CN/download/manual.jsp JDK 下载地址:http://jav

Hadoop教程(一)

英文原文:cloudera,编译:ImportNew – Royce Wong Hadoop从这里开始!和我一起学习下使用Hadoop的基本知识,下文将以Hadoop Tutorial为主体带大家走一遍如何使用Hadoop分析数据! 这个专题将描述用户在使用Hadoop MapReduce(下文缩写成MR)框架过程中面对的最重要的东西.Mapreduce由client APIs和运行时(runtime)环境组成.其中client APIs用来编写MR程序,运行时环境提供MR运行的环境.API有2

hadoop常用api编写

package hsfs常用api; import java.io.ByteArrayInputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.net.URI;import java.net.URISyntaxException; import org.apache.hadoop.conf.Configuration;

ubuntu 下使用CGI c语言 编写helloworld

从根本上说,CGI 就是HTML表单与服务端脚本之间的接口. 自己可以百度了一些cgi知识:给出链接报错.那就自己Google哈 也因为工作需要,所以来学习了下. 一.安装及配置apache服务器 安装apache2服务器 #sudo apt-get install apache2 配置apache2服务器 配置文件位于 /etc/apache2/sites-enabled/000-default 用vi打开配置文件: #sudo vi /etc/apache2/sites-enabled/00

X86平台下用汇编写"HelloWorld"

首先需要安装一个汇编器,我用的是Nasm,这个汇编器在Linux下安装还是很简单的. Nasm下载地址http://www.nasm.us/pub/nasm/releasebuilds/ 在下载之后对其进行解压,然后进入到其目录下,会发现有configure文件,接下来相信对于熟悉Linux的同学就知道该怎么办了. 输入./configure然会待其执行完成后,会发现在目录下生成了一个Makefile文件,这是输入make命令,就可以完成对Nasm的编译了 然后进入root,输入make ins

JS版按键精灵-精灵点点简明教程5 -- 编写扩展程序

摘要:虽然点点的内核功能仍然在不断的增加中,但毕竟不能一下就完善起来,所以在遇到无法实现的功能时,还是需要你自己编写扩展来实现想要的功能. 虽然如此,不过也不要怕,因为编写一个扩展真的是一件非常简单的事情,只需根据下面的步骤一步一步操作即可,不过需要一些C和C++的功底 目录     精灵点点简明教程1 -- 下载与安装 精灵点点简明教程2 -- 基本操作 精灵点点简明教程3 -- 录制脚本 精灵点点简明教程4 -- 编辑与调试脚本 精灵点点简明教程5 -- 编写扩展程序 编写扩展程序 虽然点点

[译]下一代的Hadoop Mapreduce – 如何编写YARN应用程序

1. [译]下一代的Hadoop Mapreduce – 如何编写YARN应用程序 http://www.rigongyizu.com/hadoop-mapreduce-next-generation-writing-yarn-applications/