397 字
2 分钟
页面浏览--访问次数--
词频统计与Federation机制的实现

词频统计#

  1. 在 HDFS 中创建输入目录:
    Terminal window
    hdfs dfs -mkdir -p /wordcount/input
  2. 在 hadoop1 节点本地创建 word.txt 文件并写入测试文本,然后上传至 HDFS:
    Terminal window
    hdfs dfs -put ./word.txt /wordcount/input
  3. 进入 MapReduce 示例 JAR 所在目录,运行 WordCount 作业:
    Terminal window
    cd /export/servers/hadoop-3.1.3/share/hadoop/mapreduce/
    hadoop jar hadoop-mapreduce-examples-3.1.3.jar wordcount /wordcount/input /wordcount/output

注意:输出路径 /wordcount/output 默认应为不存在,否则将操作失败

Federation 机制配置#

参考:NameNode和SecondaryNameNode部署在hadoop2和hadoop3上

1. 停止现有 Hadoop 服务#

在 hadoop1 上依次执行以下命令,关闭 YARN 和 HDFS:

Terminal window
stop-yarn.sh
stop-dfs.sh

2. 清理旧数据#

在 hadoop1、hadoop2 和 hadoop3 上删除 HDFS 数据目录(根据实际配置路径):

Terminal window
rm -rf /export/data/hadoop-wfb-3.1.3/*

3. 修改 hdfs-site.xml 配置文件#

在 hadoop1 上编辑 Hadoop 配置文件:

Terminal window
vi /export/servers/hadoop-3.1.3/etc/hadoop/hdfs-site.xml

替换为以下支持 Federation 的配置:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.nameservices</name>
<value>ns1,ns2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.ns1</name>
<value>hadoop2:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.ns1</name>
<value>hadoop2:9870</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address.ns1</name>
<value>hadoop2:9880</value>
</property>
<property>
<name>dfs.namenode.rpc-address.ns2</name>
<value>hadoop3:9000</value>
</property>
<property>
</configuration>

4. 分发配置文件#

将更新后的 hdfs-site.xml 同步到 hadoop2 和 hadoop3:

Terminal window
scp /export/servers/hadoop-3.1.3/etc/hadoop/hdfs-site.xml root@hadoop2:/export/servers/hadoop-3.1.3/etc/hadoop/
scp /export/servers/hadoop-3.1.3/etc/hadoop/hdfs-site.xml root@hadoop3:/export/servers/hadoop-3.1.3/etc/hadoop/

5. 格式化 NameNode(带统一 Cluster ID)#

在 hadoop2 上格式化第一个命名空间:

Terminal window
hdfs namenode -format -clusterId fed1

在 hadoop3 上格式化第二个命名空间(必须使用相同的 -clusterId):

Terminal window
hdfs namenode -format -clusterId fed1

关键说明:Federation 要求所有 NameNode 使用相同的 clusterId,否则无法共存于同一集群。

6. 启动 Hadoop 集群#

在 hadoop2 上启动 HDFS(YARN 仍由原 ResourceManager 节点管理,此处建议按实际架构调整):

Terminal window
start-dfs.sh

注意: YARN 通常不需要随 Federation 改动。若 ResourceManager 仍在 hadoop2,可继续执行:

Terminal window
start-yarn.sh

7. 验证进程#

在 hadoop1、hadoop2、hadoop3 上分别执行:

Terminal window
jps

预期结果:

  • hadoop2:NameNode(ns1)、DataNode、SecondaryNameNode、ResoureceManager、NodeManager
  • hadoop3:NameNode(ns2)、DataNode、NodeManager、SecondaryNameNode
  • hadoop1:DataNode、NodeManager
词频统计与Federation机制的实现
https://blog.yuk1.uk/posts/wordcount-and-federation/
作者
鈴葉Yuki
发布于
2025-12-09
许可协议
CC BY-NC-SA 4.0

分享文章

生成精美分享图或复制链接,与更多人分享本文。

继续阅读

沿着主题读

基于共同的标签与分类

换条路线

从其他文章中稳定抽取

评论

正在加载评论...

最后更新于 ,距今已过 329 天

部分内容可能已过时