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

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

clip_image002

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

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

clip_image004

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

hadoop fs -mkdir /usr/hadoop/

hadoop fs -ls /usr/

clip_image006

把例子文件上传到hdfs的/usr/hadoop/文件夹中

hadoop fs -copyFromLocal ../input/quangle.txt /usr/hadoop/quangle.txt

hadoop fs -ls /usr/hadoop

clip_image008

2.3.3配置本地环境

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

ls

vi hadoop-env.sh

clip_image010

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

clip_image012

2.3.4编写代码

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

cd /usr/local/hadoop-1.1.2/myclass/

vi FileSystemCat.java

clip_image014

输入代码内容:

clip_image016

2.3.5编译代码

在/usr/local/hadoop-1.1.2/myclass目录中,使用如下命令编译代码:

javac -classpath ../hadoop-core-1.1.2.jar FileSystemCat.java

ls

clip_image018

2.3.6使用编译代码读取文件

使用如下命令读取quangle.txt内容:

hadoop FileSystemCat /usr/hadoop/quangle.txt

clip_image020

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

clip_image022

输入代码内容:

clip_image024

3.3.2编译代码

在/usr/local/hadoop-1.1.2/myclass目录中,使用如下命令编译代码:

javac -classpath ../hadoop-core-1.1.2.jar LocalFile2Hdfs.java

ls

clip_image026

3.3.3建立测试文件

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

cd /usr/local/hadoop-1.1.2/input/

vi local2hdfs.txt

clip_image028

clip_image030

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

clip_image032

3.3.5验证是否成功

使用如下命令读取local2hdfs_part.txt内容:

hadoop fs -cat /usr/hadoop/local2hdfs_part.txt

clip_image034

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

clip_image036

输入代码内容:

clip_image038

4.3.2编译代码

在/usr/local/hadoop-1.1.2/myclass目录中,使用如下命令编译代码:

javac -classpath ../hadoop-core-1.1.2.jar Hdfs2LocalFile.java

ls

clip_image040

4.3.3建立测试文件

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

cd /usr/local/hadoop-1.1.2/input/

vi hdfs2local.txt

clip_image042

clip_image044

把该文件上传到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

clip_image046

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

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

hadoop Hdfs2LocalFile /usr/hadoop/hdfs2local.txt ../input/hdfs2local_part.txt

ls ../input

clip_image048

4.3.5验证是否成功

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

cat ../input/hdfs2local_part.txt

clip_image050

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值