Mapreduce—词频统计

  1. Shell命令

1.1docker exec -it namenode bash进入namenode

1.2echo "hello world hello hadoop hello spark" > test.txt创建text.txt文件并写入一些词

1.3接下来,我们需要将这个文件上传到Hadoop分布式文件系统(HDFS)中。首先,确保HDFS中的目标目录存在,然后使用hdfs dfs -put命令上传文件。

# 创建HDFS输入目录(如果尚未创建)

hdfs dfs -mkdir -p /user/root/input

# 将本地test.txt上传到HDFS

hdfs dfs -put test.txt /user/root/input/

1.4运行MapReduce作业

现在,我们准备运行Hadoop自带的WordCount示例程序来进行词频统计。此程序位于Hadoop安装目录下的share目录中。

# 运行WordCount MapReduce作业

hadoop jar /opt/hadoop-3.2.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar wordcount /user/root/input/test.txt /user/root/output

1.5查看输出结果

一旦MapReduce作业完成,你可以通过以下命令查看输出结果:

# 列出输出目录内容,确认part-r-00000文件的存在

hdfs dfs -ls /user/root/output

# 查看实际的词频统计结果

hdfs dfs -cat /user/root/output/part-r-00000

使用 HUE Web UI 提交 MapReduce

🌐 什么是 HUE?

HUE(Hadoop User Experience)是一个 Hadoop 的网页版管理平台,提供:

  • HDFS 文件管理器(上传/下载文件)
  • 运行 MapReduce
  • YARN Job 浏览器
  • Hive SQL 执行器
  • Oozie Workflow 可视化
  • HBase 浏览器
  • Spark 编辑器

HUE 就像 Hadoop 的“控制面板”。


🔧 1️ 如何部署 HUE(适合你现有 Docker Hadoop 环境)

你只需要在 docker-compose 里再加一个服务:

  hue:

    image: gethue/hue:latest

    container_name: hue

    restart: always

    ports:

      - 8888:8888

    environment:

      - HUE_DATABASE_ENGINE=sqlite3

    depends_on:

      - namenode

      - datanode

      - resourcemanager

    networks:

      - default

启动:

docker-compose up -d

浏览器打开:

http://localhost:8888

默认账号(第一次登录会让你创建)。


📦 2️ 如何通过 HUE 提交 MapReduce

方法 A:上传 JAR(Java MapReduce)

  1. 打开 HUE → “Job Browser”
  2. 点击 “Submit Job”
  3. 上传你的 wordcount.jar
  4. 填写参数:
    • Main class
    • 输入路径:/input
    • 输出路径:/output

点击 Run。


方法 B:Python Hadoop Streaming(你最关心的)

  1. 打开 HUE → File Browser
  2. 上传你的 mapper.py 和 reducer.py 到 HDFS,比如 /user/root/mr/
  3. 在 HUE → JobBrowser → Submit Job → Streaming

然后填写参数:

-mapper /user/root/mr/mapper.py

-reducer /user/root/mr/reducer.py

-input /input

-output /output

然后按 Run。


📊 3️ 查看运行结果

运行后你可以在 HUE:

  • Job Browser → 查看每一个 task 的日志
  • File Browser → 查看 /output/part-00000

全部图形化,完全不需要命令行。


🟢 4️ 使用 HUE 的优点

功能

是否支持

说明

提交 MapReduce

JAR 或 Streaming

用 Python 写 Mapper/Reducer

streaming 模式

上传文件到 HDFS

不用 hdfs dfs 命令

查看日志

比命令行方便很多

查看集群任务

和 Yarn UI 联动

初学者友好

不需要 Hadoop 客户端


🔴 HUE 的限制

HUE 只是“界面”,底层任务仍要通过 Hadoop 客户端执行,只是客户端在 Docker 容器内部,不在宿主机。

所以:

你不需要自己安装 Hadoop 客户端

你不需要写 hadoop jar ... 命令

一切都是 Web 界面操作


结论(一句话)

方案 4 是使用 HUE 网页界面提交 MapReduce 作业,不需要在宿主机安装 Hadoop 客户端,也不需要敲命令。


如果你愿意,我可以继续帮你做:

写一个完整的 docker-compose + HUE
写一个你可直接上传运行的 MapReduce Python Streaming 示例
帮你验证 HUE 与 Hadoop 集群通信是否成功
帮你调 MapReduce 输出结果

你要我帮你写完整配置吗?

你说:

那我写的python还是需要上传到docker中的hdfs中,这个web可以接收我宿主机传递的python吗?

ChatGPT 说:

结论先告诉你:

HUE Web 可以直接接收你宿主机上传的 Python 脚本,并自动放到 HDFS,不需要你自己进 Docker。

也就是说:

你在宿主机写好 mapper.py、reducer.py

用 HUE 的网页 File Browser 上传

HUE 自动把文件放到 HDFS(你的 Docker Hadoop 集群里)

你不需要:

  • 不需要 docker cp
  • 不需要进入容器
  • 不需要手动执行 hdfs dfs -put

全部通过网页完成。

下面我给你详细说明:


🟦 HUE Web 怎样接收你的 Python?(非常简单)

步骤 1:你在宿主机编辑 Python

比如:

mapper.py

import sys

for line in sys.stdin:

    for w in line.strip().split():

        print(f"{w}\t1")

reducer.py

import sys

current = None

count = 0

for line in sys.stdin:

    w, c = line.strip().split("\t")

    c = int(c)

    if w == current:

        count += c

    else:

        if current:

            print(f"{current}\t{count}")

        current = w

        count = c

if current:

    print(f"{current}\t{count}")

你完全在宿主机写,不需要进 Docker。


🟦 步骤 2:打开 HUE Web → File Browser

访问:

http://localhost:8888

进入菜单:

File Browser

选择路径,比如:

/user/root/mr/

点击 Upload,直接从宿主机选文件上传:

  • mapper.py
  • reducer.py

上传后,这两个文件就已经在 HDFS 了。


🟦 步骤 3:通过 HUE Running MapReduce Streaming Job

在 HUE 首页 → Job Browser
点击 Submit Job
选择 Streaming 类型

输入参数:

-mapper /user/root/mr/mapper.py

-reducer /user/root/mr/reducer.py

-input /input

-output /output

HUE 自动提交任务给 YARN(Docker 集群内部)。


🟩 为什么可以做到?背后的机制是:

🌐 HUE 前端上传文件 →

→ HUE 后端把文件写到 HDFS(通过 WebHDFS / libhdfs)

整个过程:

  • HUE 在 Docker 内运行
  • 不需要宿主机安装 Hadoop 客户端
  • 上传直接走 http 协议(WebHDFS)

所以完全不依赖宿主机工具。


🟢 最终结论(一句话)

HUE 可以完全接收宿主机上传的 Python 文件,并自动放入 HDFS。你只负责写代码,不用管 Docker。


如果你愿意,我还能给你:

一套带 HUE 的完整 docker-compose

可直接运行的 MapReduce streaming 示例

完整操作步骤 + 图形化界面说明

帮你验证 mapper/reducer 在 HDFS 正常运行

需要吗?

针对hue端口是50070(适配的是hadoop2.x),现在我们使用的是hadoop3.x版本,方法就是改hue.ini这个配置文件。一种最简单的方法就是挂载一个hue.ini进去。

接下来:

这个hue就是账户名,你可以换(我下面用的是hue1)。

访问8888端口,接下来可登入进行操作了。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐