您的位置:首页 > 运维架构

Hadoop—HDFS读写文件操作---练习4

2015-07-19 10:34 1081 查看

1 运行环境说明

1.1 硬软件环境

l 主机操作系统:Windows 64 bit,双核4线程,主频2.2G,6G内存
l 虚拟软件:VMware® Workstation 9.0.0 build-812388
l 虚拟机操作系统:CentOS 64位,单核,1G内存
l JDK:1.7.0_55 64 bit
l Hadoop:1.1.2

1.2 机器网络环境

该开发机器处于能连接互联网的局域网中,具体信息为:
序号
IP地址
机器名
类型
用户名
运行进程
1
10.88.147.220
Hadoop0
单机节点
hadoop
NN、SNNTaskTracer、DN、JobTracer

2 书面作业1:编译并运行《权威指南》中的例3.2

2.1 书面作业1内容

在Hadoop集群中编译并运行《权威指南》中的例3.2

2.2 运行代码

<span style="font-size:14px;">import java.io.InputStream;

import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.io.IOUtils;

publicclass FileSystemCat {
publicstaticvoid main(String[] args) throws Exception {
String uri = args[0];
Configuration conf = new Configuration();
FileSystem fs = FileSystem. get(URI.create (uri), conf);
InputStream in = null;
try {
in = fs.open( new Path(uri));
IOUtils.copyBytes(in, System.out, 4096, false);
} finally {
IOUtils.closeStream(in);
}
}
}</span>


2.3 实现过程

在Hadoop集群中编译并运行《权威指南》中的例3.2

2.3.1创建代码目录

启动Hadoop,在/usr/local/hadoop-1.1.2目录下使用如下命令建立myclass和input目录:
mkdir myclass
mkdir input



2.3.2建立例子文件上传到hdfs中

进入/usr/local/hadoop-1.1.2/input目录,在该目录中建立quangle.txt文件,内容为:



使用如下命令在hdfs中建立/usr/hadoop/文件夹
hadoop fs -mkdir /usr/hadoop/
hadoop fs -ls /usr/



把例子文件上传到hdfs的/usr/hadoop/文件夹中
hadoop fs -copyFromLocal ../input/quangle.txt /usr/hadoop/quangle.txt
hadoop fs -ls /usr/hadoop



2.3.3配置本地环境

对/usr/local/hadoop-1.1.2/conf目录中的hadoop-env.sh进行配置,如下如所示:
ls
vi hadoop-env.sh



加入对HADOOP_CLASPATH变量值,值为/usr/local/hadoop-1.1.2/conf/myclass



2.3.4编写代码

进入/usr/local/hadoop-1.1.2/myclass目录,在该目录中建立FileSystemCat.java代码文件,命令如下:
cd /usr/local/hadoop-1.1.2/myclass/
vi FileSystemCat.java



输入代码内容:



2.3.5编译代码

在/usr/local/hadoop-1.1.2/myclass目录中,使用如下命令编译代码:
javac -classpath ../hadoop-core-1.1.2.jar FileSystemCat.java
ls



2.3.6使用编译代码读取文件

使用如下命令读取quangle.txt内容:
hadoop FileSystemCat /usr/hadoop/quangle.txt



3 书面作业2:写入HDFS成为一个新文件

3.1 书面作业2内容

自行在本地文件系统生成一个大约100字节的文本文件,写一段程序(可以利用Java API或C API),读入这个文件,并将其第101-120字节的内容写入HDFS成为一个新文件,提供代码和执行结果演示抓图

3.2 运行代码

注意:在编译前请先删除中文注释!
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.net.URI;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.util.Progressable;

publicclass LocalFile2Hdfs {
publicstaticvoid main(String[] args) throws Exception {

// 获取读取源文件和目标文件位置参数
String local = args[0];
String uri = args[1];

FileInputStream in = null;
OutputStream out = null;
Configuration conf = new Configuration();
try {
// 获取读入文件数据
in = new FileInputStream(new File(local));

// 获取目标文件信息
FileSystem fs = FileSystem.get(URI.create(uri), conf);
out = fs.create(new Path(uri), new Progressable() {
@Override
publicvoid progress() {
System.out.println("*");
}
});

// 跳过前100个字符
in.skip(100);
byte[] buffer = newbyte[20];

// 从101的位置读取20个字符到buffer中
int bytesRead = in.read(buffer);
if (bytesRead >= 0) {
out.write(buffer, 0, bytesRead);
}
} finally {
IOUtils.closeStream(in);
IOUtils.closeStream(out);
}
}
}


3.3 实现过程

3.3.1编写代码

进入/usr/local/hadoop-1.1.2/myclass目录,在该目录中建立LocalFile2Hdfs.java代码文件,命令如下:
cd /usr/local/hadoop-1.1.2/myclass/
vi LocalFile2Hdfs.java



输入代码内容:



3.3.2编译代码

在/usr/local/hadoop-1.1.2/myclass目录中,使用如下命令编译代码:
javac -classpath ../hadoop-core-1.1.2.jar LocalFile2Hdfs.java
ls



3.3.3建立测试文件

进入/usr/local/hadoop-1.1.2/input目录,在该目录中建立local2hdfs.txt文件,内容为:
cd /usr/local/hadoop-1.1.2/input/
vi local2hdfs.txt






3.3.4使用编译代码上传文件内容到hdfs

使用如下命令读取local2hdfs第101-120字节的内容写入HDFS成为一个新文件:
cd /usr/local/hadoop-1.1.2/bin/
hadoop LocalFile2Hdfs ../input/local2hdfs.txt /usr/hadoop/local2hdfs_part.txt



3.3.5验证是否成功

使用如下命令读取local2hdfs_part.txt内容:
hadoop fs -cat /usr/hadoop/local2hdfs_part.txt



4 书面作业3:作业2反向操作

4.1 书面作业2内容

2的反向操作,在HDFS中生成一个大约100字节的文本文件,写一段程序(可以利用Java API或C API),读入这个文件,并将其第101-120字节的内容写入本地文件系统成为一个新文件,提供代码和执行结果演示抓图

4.2 程序代码

4.3 实现过程

4.3.1编写代码

进入/usr/local/hadoop-1.1.2/myclass目录,在该目录中建立Hdfs2LocalFile.java代码文件,命令如下:
cd /usr/local/hadoop-1.1.2/myclass/
vi Hdfs2LocalFile.java



输入代码内容:



4.3.2编译代码

在/usr/local/hadoop-1.1.2/myclass目录中,使用如下命令编译代码:
javac -classpath ../hadoop-core-1.1.2.jar Hdfs2LocalFile.java
ls



4.3.3建立测试文件

进入/usr/local/hadoop-1.1.2/input目录,在该目录中建立hdfs2local.txt文件,内容为:
cd /usr/local/hadoop-1.1.2/input/
vi hdfs2local.txt






把该文件上传到hdfs的/usr/hadoop/文件夹中
cd /usr/local/hadoop-1.1.2/bin/
hadoop fs -copyFromLocal ../input/hdfs2local.txt /usr/hadoop/hdfs2local.txt
hadoop fs -ls /usr/hadoop



4.3.4使用编译代码把文件内容从hdfs输出到文件系统中

使用如下命令读取hdfs2local.txt第101-120字节的内容写入本地文件系统成为一个新文件:
hadoop Hdfs2LocalFile /usr/hadoop/hdfs2local.txt ../input/hdfs2local_part.txt
ls ../input



4.3.5验证是否成功

使用如下命令读取hdfs2local_part.txt内容:
cat ../input/hdfs2local_part.txt


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: