实验3:运行Hadoop MapReduce程序
按照步骤完成命令行方式下Hadoop MR程序的编辑,编译,运行过程。
1)编辑java文件
可以采用任意的文本工具编辑Java代码,
2)编译javac
(1)设置CLASSPATH
export CLASSPATH=
${CLASSPATH}:
${HADOOP_HOME}/share/hadoop/common/lib/commons-cli-1.2.jar:
${HADOOP_HOME}/share/hadoop/common/hadoop-common-2.6.5.jar:
H
A
D
O
O
P
H
O
M
E
/
s
h
a
r
e
/
h
a
d
o
o
p
/
m
a
p
r
e
d
u
c
e
/
h
a
d
o
o
p
−
m
a
p
r
e
d
u
c
e
−
c
l
i
e
n
t
−
c
o
r
e
−
2.6.5.
j
a
r
也
可
以
永
久
修
改
/
e
t
c
/
p
r
o
f
i
l
e
中
的
C
L
A
S
S
P
A
T
H
环
境
变
量
∗
∗
(
2
)
编
译
j
a
v
a
文
件
∗
∗
j
a
v
a
c
X
X
X
X
.
j
a
v
a
−
d
X
X
X
−
d
:
目
标
代
码
的
根
目
录
注
:
内
部
类
定
义
产
生
附
加
的
类
文
件
。
这
些
类
文
件
的
名
称
将
内
部
类
和
外
部
类
的
名
称
结
合
在
一
起
,
例
如
M
y
C
l
a
s
s
{HADOOP_HOME}/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.6.5.jar 也可以永久修改/etc/profile中的CLASSPATH环境变量 **(2)编译java文件** javac XXXX.java -d XXX -d: 目标代码的根目录 注: 内部类定义产生附加的类文件。这些类文件的名称将内部类和外部类的名称结合在一起,例如 MyClass
HADOOPHOME/share/hadoop/mapreduce/hadoop−mapreduce−client−core−2.6.5.jar也可以永久修改/etc/profile中的CLASSPATH环境变量∗∗(2)编译java文件∗∗javacXXXX.java−dXXX−d:目标代码的根目录注:内部类定义产生附加的类文件。这些类文件的名称将内部类和外部类的名称结合在一起,例如MyClassMyInnerClass.class。
例如,如果将所有的源文件放在 /workspace 中,那么 com.mysoft.mypack.MyClass 的代码应该在\workspace\com\mysoft\mypack\MyClass.java 中。
源文件中设计了包结构将反应到目标代码目录中
3)打jar包
jar
-c: 创建压缩文件
-v: 输出压缩详细情况
-f: 指定压缩文件
-m: 指定清单文件(manifest.mf是描述JAR内容的清单文件)
-C dir:指定目录
参考:jar -cvf XXXXXX.jar -C XXX/ . //将XXX路径下的所有文件打包
4)执行
bin/hadoop jar xxx.jar packagename.classname input output
【注意】hadoop自带例子的结构
wordcount源代码在 /hadoop-2.6.5/share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.6.5-sources.jar
unzip -x -q hadoop-mapreduce-examples-2.6.5-sources.jar -d output
hadoop shell的命令参考网址,http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_shell.html
实验4:HDFS文件的读写
要求编程实现GetMerger功能,实现从云端(HDFS)中下载一个包含多个文件的路径(文件夹),将所有文件合并后保存到本地(GetMerge)。
实验5:Hadoop IO
要求改写实验4的GetMerge程序,实现将云端多个文件压缩到单个文件下载到本地。
1)采用Gzip压缩方法,本地文件为Merger.gz;
2)云端文件需要超过2个文件。
实验6:SequenceFile使用
本实验要求学生通过SequenceFile实现对多个小文件的封装。
要求如下:
1)使用随机数生成以(整数,字符串)为(key,Value)的文本文件,文件的大小内容任意,文件数量不少于100个;
2)使用SequenceFile对以上文件进行封装,生成一个独立文件,压缩格式任意;
3)实现以下的三种方式的查询:
3.1)给出文件名,可以从序列文件整体读取文件并存储到指定的位置;
3.2)给出某个整数的key,可以读取所有该key的数据,并给出所在文件的名称(可以输出到控制台);
3.3)给出文件名和整数的key,可以读取该文件中的对应key的数据(可以输出到控制台)。
实验7:MapReduce数据统计
本实验要求通过MapReduce程序实现数据统计,具体要求如下:
假设有一份简单的“个人通讯记录”的数据集,格式如下:
被叫号码,通话时间(秒)
13900000001,20
13900000008,126
……
1)编写一个MapReduce程序,统计拨打同一被叫号码的总时长。
2)找出平均通话时间最长的被叫号码。