智享百科屋
霓虹主题四 · 更硬核的阅读氛围

在虚拟机上搭建Hadoop环境处理大数据

发布时间:2026-01-15 10:20:58 阅读:257 次

现在很多公司要分析用户行为、销售数据或者日志信息,数据量动辄几十GB甚至上TB。这时候单台机器根本跑不动,得靠分布式系统来扛。Hadoop就是干这个的——把一堆普通服务器联合起来,像一个超级计算机那样处理海量数据。

为什么用虚拟机跑Hadoop

买一堆物理服务器成本太高,尤其对学习和测试来说不现实。虚拟机就成了最划算的选择。比如你在一台8核16G的电脑上装几个Linux虚拟机,每个分配2核4G,再配上Hadoop,就能模拟出一个小集群。不仅省钱,还能随时快照回滚,调试起来特别方便。

准备三台CentOS虚拟机

建议至少搭三个节点:一个NameNode(主节点),两个DataNode(从节点)。用VMware或VirtualBox都可以,系统选CentOS 7或Stream 8都行。网络模式设成“桥接”或“仅主机”,确保它们能互相ping通。

比如你给它们分别起名叫:

  • hadoop-master(主节点)
  • hadoop-slave1
  • hadoop-slave2

然后修改每台机器的 /etc/hosts 文件,加上这些IP映射:

192.168.1.10 hadoop-master
192.168.1.11 hadoop-slave1
192.168.1.12 hadoop-slave2

配置SSH免密登录

Hadoop要求主节点能无密码登录各个从节点。在master上执行:

ssh-keygen -t rsa

一路回车生成密钥,然后把公钥复制到所有节点:

ssh-copy-id hadoop-master
ssh-copy-id hadoop-slave1
ssh-copy-id hadoop-slave2

之后就能直接 ssh hadoop-slave1 登录,不用输密码了。

安装Java和Hadoop

先确认Java已装好:

java -version

如果没装,可以用yum:

yum install java-1.8.0-openjdk-devel -y

下载Hadoop二进制包,解压到 /usr/local/hadoop:

tar -xzvf hadoop-3.3.6.tar.gz -C /usr/local/

修改Hadoop配置文件

进入 /usr/local/hadoop/etc/hadoop 目录,改几个关键文件。

在 core-site.xml 中设置文件系统地址:

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop-master:9000</value>
    </property>
</configuration>

在 hdfs-site.xml 中设置副本数和数据目录:

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:///usr/local/hadoop/data/namenode</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:///usr/local/hadoop/data/datanode</value>
    </property>
</configuration>

在 workers 文件里写上从节点主机名:

hadoop-slave1
hadoop-slave2

启动Hadoop集群

首次启动前格式化NameNode:

/usr/local/hadoop/bin/hdfs namenode -format

然后启动HDFS:

/usr/local/hadoop/sbin/start-dfs.sh

打开浏览器访问 http://hadoop-master:9870,能看到HDFS管理界面,两个DataNode在线就说明成功了。

跑个词频统计试试

准备一个文本文件 words.txt,内容是几行英文句子。上传到HDFS:

/usr/local/hadoop/bin/hdfs dfs -mkdir /input
/usr/local/hadoop/bin/hdfs dfs -put words.txt /input

运行自带的WordCount例子:

/usr/local/hadoop/bin/hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /input /output

完成后查看结果:

/usr/local/hadoop/bin/hdfs dfs -cat /output/part-r-00000

你会看到每个单词和它出现的次数。这就是最典型的大数据处理流程:读取、分片、映射、归约、输出。

这种环境虽然性能比不上真集群,但用来学Hadoop原理、写MapReduce逻辑、调试配置完全够用。等掌握了这套流程,迁移到云服务器或物理集群也只是规模变化而已。