从虚拟机到第一个MapReduce程序:我的Hadoop 2.7.7伪分布式环境搭建全记录
从虚拟机到第一个MapReduce程序:我的Hadoop 2.7.7伪分布式环境搭建全记录
1. 为什么选择这条技术路线
记得第一次听说Hadoop是在三年前的一次技术分享会上,当时演讲者用"大数据界的瑞士军刀"来形容它。如今终于有机会亲手搭建一个伪分布式环境,既兴奋又忐忑。选择Hadoop 2.7.7这个经典版本,主要是考虑到社区支持完善,遇到问题容易找到解决方案。
在虚拟化方案的选择上,我最终敲定VMware Player而不是VirtualBox,原因很实际:
- 硬件加速:对Intel VT-x/AMD-V的支持更稳定
- 网络配置:NAT和桥接模式切换更直观
- 快照管理:关键时刻能快速回滚配置
- 社区支持:遇到问题时Stack Overflow上的解决方案更多
小贴士:如果主机是Windows 10及以上系统,记得在BIOS中开启虚拟化技术(VT-x),否则安装时会遇到"此主机不支持Intel VT-x"的报错。
2. CentOS 7最小化安装的踩坑实录
从CentOS官网下载的Minimal ISO只有900MB左右,安装过程却暗藏玄机。我选择了英文界面(避免后续出现编码问题),分区方案采用自动配置,但有几个关键设置必须手动调整:
- 网络配置:安装时务必启用网络连接
- 软件选择:勾选"Development Tools"组
- 时区设置:选择Asia/Shanghai(即使UTC更规范)
- root密码:设置足够复杂但自己能记住的密码
安装完成后,第一件事就是更换yum源。阿里云的镜像速度最快:
sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
sudo yum makecache
3. Java环境配置的纠结之路
Hadoop对Java版本的要求很严格,2.7.x系列需要Java 7或8。我面临两个选择:
| 安装方式 | 优点 | 缺点 |
|---|---|---|
| yum安装 | 简单快捷 | 版本不可控 |
| 手动安装 | 版本精准 | 配置复杂 |
最终选择了手动安装Oracle JDK 8u221,过程比想象中曲折:
- 从Oracle官网下载jdk-8u221-linux-x64.tar.gz
- 解压到/usr/local/java目录
- 配置环境变量时遇到了坑:
# 在~/.bashrc末尾添加
export JAVA_HOME=/usr/local/java/jdk1.8.0_221
export PATH=$PATH:$JAVA_HOME/bin
执行source ~/.bashrc后,java -version仍然显示旧版本。原来系统预装了OpenJDK,需要用alternatives切换:
sudo alternatives --config java
4. Hadoop伪分布式环境搭建
下载hadoop-2.7.7.tar.gz后,我将其解压到/usr/local/hadoop目录。关键的配置文件有三个:
core-site.xml:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
</configuration>
hdfs-site.xml:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/dfs/name</value>
</property>
</configuration>
最紧张的时刻莫过于执行hdfs namenode -format,看到"Storage directory /usr/local/hadoop/dfs/name has been successfully formatted"的提示才松了口气。
5. SSH免密登录的玄学问题
按照教程执行:
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
但ssh localhost仍然要求输入密码。排查后发现是SELinux在作祟:
sudo setenforce 0 # 临时关闭
sudo vi /etc/selinux/config # 永久设置为disabled
6. 第一个MapReduce程序的诞生
启动HDFS后,我决定用经典的WordCount来测试环境。过程比预想的顺利:
-
在HDFS上创建输入目录
hdfs dfs -mkdir /input -
上传测试文本
hdfs dfs -put /path/to/local/text.txt /input -
运行WordCount
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /input /output
当在浏览器中访问http://localhost:9870看到HDFS管理界面时,那种成就感难以言表。查看输出结果的那一刻,所有报错和调试的烦恼都烟消云散了。
更多推荐
所有评论(0)