Hadoop学习——Hadoop单机运行Grep实例(包含错误解决方法)

1.概述

上一篇安装了Hadoop单机,所以今天打算先用Hadoop的mapreduce自带的Grep实例实践一下,顺带测试Hadoop是否成功安装。(不是水博客,有在努力填坑)

实践开始之前,我们需要了解一下Grep实例,Grep(缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本。在今天的实例当中我们将创建一个input文件夹,并利用这个工具从该文件夹中匹配到符合正则式“dfs[a-z.]+”的xml文件,自动创建output文件夹并将结果在该文件夹中输出。

那么让我们开始吧!

2.Grep实例实现

开始前需要检查Hadoop安装目录下是否存在output目录,如果存在则需要删除后再运行Grep实例,否则无法重复创建output导致运行失败。注意:每一次运行实例前都需要进行该操作。

首先我们需要在Hadoop安装目录下新建input目录,用来存放输入数据

先使用如下命令行,将路径移到Hadoop目录下:

cd /usr/local/hadoop

接下来是非常重要的一步,我们需要登录我们的root账户(如果不知道root账户密码需要使用命令行“sudo passwd”来更改密码)

如果不进行这一步,在运行Grep实例的时候会报错说权限不够无法创建output目录(网上找了很多方法都解决不了这个问题,无论怎么给权限都会报错,所以我选择直接登录root账户来操作)

使用如下命令行并输入密码登录root账户:

su

登录后,使用如下命令行来创建input目录:

mkdir input

创建成功后(创建成功没有返回值),将“usr/local/hadoop/etc/hadoop”目录下的配置文件复制到input目录,命令如下:

cp ./etc/hadoop/*.xml ./input

接下来执行如下命令运行Grep实例:

./bin/hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.4.jar grep ./input ./output 'dfs[a-z.]+'

实例运行中,出现如图,即为运行成功:

使用如下命令行,查看输出数据:

cat ./output/*

 可以得到如下类似结果:

结束。

### Hadoop Grep 示例代码及用法 #### 使用 `grep` 实现 MapReduce 任务 Hadoop 提供了一个名为 `grep` 的示例程序来演示如何使用MapReduce执行简单的文本过滤操作。此工具可以从输入文件中提取匹配特定正则表达式的行。 以下是具体的操作方式: 可以通过如下命令启动Grep示例程序[^1]: ```bash hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar grep /user/root/input /user/root/output 'dfs[a-z.]+' ``` 上述命令会读取位于 `/user/root/input` 下的所有文件,并将符合正则表达式 `'dfs[a-z.]+'` 的每一行写入到指定的输出路径 `/user/root/output` 中。 为了验证结果,可利用下面的方法把分布式文件系统上的输出下载至本地并查看内容[^3]: ```bash $ bin/hadoop fs -get output output $ cat output/* ``` 该过程展示了怎样运用内置的例子来进行基本的数据筛选工作,在实际应用里可以根据需求调整正则表达式模式以及源目标位置等参数设置。 #### 编码自定义版本 如果想创建自己的版本,则需编写Java类实现Mapper和Reducer逻辑。对于仅涉及映射阶段的任务而言,只需关注于Mapper部分即可完成整个流程的设计;而对于需要聚合统计信息的情况,则还需要设计相应的Reducer函数。 这里给出一个简化版的Mapper实现作为参考[^4]: ```java import org.apache.hadoop.mapreduce.Mapper; import java.io.IOException; public class MyGrepper extends Mapper<LongWritable, Text, NullWritable, Text> { private final static NullWritable KEY = NullWritable.get(); @Override protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String line = value.toString(); // 假设我们正在寻找包含单词 "example" 的所有记录 if (line.contains("example")) { context.write(KEY, new Text(line)); } } } ``` 这段代码片段展示的是一个非常基础的地图端处理器,它负责遍历每一条记录(即文档的一行),当发现符合条件的内容时就将其发送给后续环节进一步处理。
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长弓同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值