hadoop做mapreduce任务--词频统计,shell命令和hue提交任务
Mapreduce—词频统计
- 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)
- 打开 HUE → “Job Browser”
- 点击 “Submit Job”
- 上传你的 wordcount.jar
- 填写参数:
- Main class
- 输入路径:/input
- 输出路径:/output
点击 Run。
✔ 方法 B:Python Hadoop Streaming(你最关心的)
- 打开 HUE → File Browser
- 上传你的 mapper.py 和 reducer.py 到 HDFS,比如 /user/root/mr/
- 在 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端口,接下来可登入进行操作了。

更多推荐
所有评论(0)