Hadoop基础:入门篇 - hadoop大数据工具及其生态工具

Hadoop完全分布式环境搭建与HDFS基础操作

一、Hadoop生态圈概述

1.1 Hadoop核心组件

Hadoop生态系统包含以下核心组件:
├── Hadoop Common - 公共工具库
├── HDFS (Hadoop Distributed File System) - 分布式文件系统
├── YARN (Yet Another Resource Negotiator) - 资源管理系统
└── MapReduce - 分布式计算框架

1.2 环境准备

系统要求:

  • 3台CentOS 7/8服务器(1个NameNode + 2个DataNode)
  • JDK 8或11
  • 至少4GB内存/节点
  • 网络互通,配置SSH免密登录

二、完全分布式集群搭建

2.1 环境配置

# 1. 配置主机名和hosts文件(所有节点执行)
# /etc/hosts 添加:
192.168.1.101 hadoop-master
192.168.1.102 hadoop-slave1  
192.168.1.103 hadoop-slave2

# 2. 安装JDK(所有节点)
tar -xzf jdk-8u371-linux-x64.tar.gz -C /usr/local/
echo 'export JAVA_HOME=/usr/local/jdk1.8.0_371' >> /etc/profile
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile
source /etc/profile

# 3. 创建Hadoop用户(所有节点)
groupadd hadoop
useradd -g hadoop hadoop
echo "hadoop123" | passwd --stdin hadoop

2.2 SSH免密登录配置

# 在master节点执行
su - hadoop
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
ssh-copy-id hadoop@hadoop-master
ssh-copy-id hadoop@hadoop-slave1
ssh-copy-id hadoop@hadoop-slave2

# 测试免密登录
ssh hadoop-slave1 "hostname"  # 应该返回 hadoop-slave1

2.3 Hadoop安装与配置

# 1. 下载并解压Hadoop(所有节点)
wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz
tar -xzf hadoop-3.3.4.tar.gz -C /usr/local/
cd /usr/local && ln -s hadoop-3.3.4 hadoop
chown -R hadoop:hadoop hadoop-3.3.4

# 2. 配置环境变量
echo 'export HADOOP_HOME=/usr/local/hadoop' >> /home/hadoop/.bashrc
echo 'export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH' >> /home/hadoop/.bashrc
source /home/hadoop/.bashrc

2.4 核心配置文件

core-site.xml(所有节点)

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop-master:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/data/hadoop/tmp</value>
    </property>
</configuration>

hdfs-site.xml(所有节点)

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <!-- NameNode配置 -->
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/data/hadoop/namenode</value>
    </property>
    <property>
        <name>dfs.namenode.http-address</name>
        <value>hadoop-master:9870</value>
    </property>

    <!-- DataNode配置 -->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/data/hadoop/datanode</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>

    <!-- 安全模式 -->
    <property>
        <name>dfs.permissions.enabled</name>
        <value>false</value>
    </property>
</configuration>

workers(master节点)

hadoop-slave1
hadoop-slave2
hadoop-master  # 也可以将master作为DataNode

hadoop-env.sh(所有节点)

export JAVA_HOME=/usr/local/jdk1.8.0_371
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_LOG_DIR=/data/hadoop/logs

三、HDFS核心概念与架构

3.1 HDFS架构图

Client ───────→ NameNode (元数据管理)
   │               │
   ↓               ↓
DataNode1      DataNode2      DataNode3
(Block1,2)    (Block2,3)    (Block1,3)

3.2 HDFS核心概念

  • Block:默认128MB的数据块
  • NameNode:管理文件系统命名空间和元数据
  • DataNode:存储实际数据块
  • Secondary NameNode:检查点机制,非热备

四、HDFS Shell操作大全

4.1 集群启动与停止

# 格式化NameNode(首次安装执行)
hdfs namenode -format

# 启动HDFS集群
start-dfs.sh

# 停止HDFS集群  
stop-dfs.sh

# 检查进程
jps
# 应该看到:
# master: NameNode, SecondaryNameNode
# slaves: DataNode

4.2 文件系统操作

# 1. 创建目录
hdfs dfs -mkdir /user
hdfs dfs -mkdir /user/hadoop
hdfs dfs -mkdir -p /data/input  # 递归创建

# 2. 上传文件
hdfs dfs -put /local/file.txt /user/hadoop/
hdfs dfs -copyFromLocal /local/data /user/hadoop/input

# 3. 查看文件
hdfs dfs -ls /user/hadoop
hdfs dfs -ls -R /user  # 递归查看
hdfs dfs -cat /user/hadoop/file.txt
hdfs dfs -tail /user/hadoop/file.txt

# 4. 下载文件
hdfs dfs -get /user/hadoop/file.txt /local/path/
hdfs dfs -copyToLocal /user/hadoop/data /local/path/

# 5. 文件操作
hdfs dfs -cp /src /dest      # 复制
hdfs dfs -mv /src /dest      # 移动  
hdfs dfs -rm /user/hadoop/file.txt           # 删除文件
hdfs dfs -rm -r /user/hadoop/old_dir        # 递归删除
hdfs dfs -rm -r -skipTrash /user/hadoop/dir  # 直接删除,不进回收站

# 6. 查看文件内容
hdfs dfs -cat /user/hadoop/file.txt | head -10  # 查看前10行
hdfs dfs -text /user/hadoop/file.gz            # 查看压缩文件

4.3 文件权限与配额

# 权限管理
hdfs dfs -chmod 755 /user/hadoop/file.txt
hdfs dfs -chown hadoop:hadoop /user/hadoop/
hdfs dfs -chgrp hadoop /user/hadoop/

# 设置配额
hdfs dfsadmin -setSpaceQuota 1G /user/hadoop  # 空间配额
hdfs dfsadmin -setQuota 1000 /user/hadoop     # 文件数量配额

# 查看配额
hdfs dfs -count -q /user/hadoop

4.4 集群管理命令

# 1. 集群状态检查
hdfs dfsadmin -report  # 查看集群数据节点状态
hdfs dfsadmin -printTopology  # 查看机架感知拓扑

# 2. 安全模式操作
hdfs dfsadmin -safemode get    # 查看安全模式状态
hdfs dfsadmin -safemode enter  # 进入安全模式
hdfs dfsadmin -safemode leave  # 离开安全模式

# 3. 数据平衡
hdfs balancer -threshold 10  # 启动数据平衡,阈值10%

# 4. 块操作
hdfs fsck / -files -blocks -locations  # 检查文件块信息
hdfs dfs -setrep -w 3 /user/hadoop/file.txt  # 修改副本数

五、实战练习

5.1 数据准备与上传

# 创建本地测试数据
for i in {1..1000}; do
    echo "Line $i: This is test data for Hadoop learning $(date)" >> /tmp/sample_data.txt
done

# 上传到HDFS
hdfs dfs -put /tmp/sample_data.txt /user/hadoop/input/

# 创建大文件测试(100MB)
dd if=/dev/zero of=/tmp/large_file.dat bs=1M count=100
hdfs dfs -put /tmp/large_file.dat /user/hadoop/

5.2 HDFS操作验证

# 验证文件上传
echo "=== 文件列表 ==="
hdfs dfs -ls /user/hadoop/

echo "=== 文件大小 ==="  
hdfs dfs -du -h /user/hadoop/

echo "=== 块信息 ==="
hdfs fsck /user/hadoop/large_file.dat -files -blocks -locations

echo "=== 集群状态 ==="
hdfs dfsadmin -report | head -20

六、常见问题排查

6.1 启动问题

# 1. 检查日志
tail -f /data/hadoop/logs/hadoop-hadoop-namenode-*.log
tail -f /data/hadoop/logs/hadoop-hadoop-datanode-*.log

# 2. 端口占用检查
netstat -tlnp | grep 9000
netstat -tlnp | grep 9870

# 3. 权限问题
chown -R hadoop:hadoop /data/hadoop/
chmod -R 755 /data/hadoop/

6.2 连接问题

# 1. 网络连通性
ping hadoop-slave1
ssh hadoop-slave1 "hostname"

# 2. 防火墙
systemctl stop firewalld  # 临时关闭
systemctl disable firewalld  # 永久关闭

# 3. SELinux
setenforce 0  # 临时关闭
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config  # 永久关闭

6.3 性能优化配置

hdfs-site.xml 优化参数:

<property>
    <name>dfs.blocksize</name>
    <value>134217728</value>  <!-- 128MB块大小 -->
</property>
<property>
    <name>dfs.namenode.handler.count</name>
    <value>100</value>  <!-- NameNode并发处理线程数 -->
</property>
<property>
    <name>dfs.datanode.handler.count</name>
    <value>30</value>   <!-- DataNode并发处理线程数 -->
</property>

七、Web界面访问

7.1 HDFS Web UI

  • 地址: http://hadoop-master:9870
  • 功能: 浏览文件系统、查看节点状态、监控集群

7.2 关键监控指标

  • Capacity: 集群总容量
  • Used: 已用空间
  • Present: 存活DataNode数量
  • Under Replicated Blocks: 副本不足的块数
  • Blocks with corrupt replicas: 损坏的块数

学习总结

通过本篇文章,您已经掌握了:

  • ✅ Hadoop完全分布式集群搭建
  • ✅ HDFS核心架构理解
  • ✅ HDFS Shell操作大全
  • ✅ 集群监控与问题排查
  • ✅ 基础性能优化配置

环境验证命令

# 最终验证集群状态
hdfs dfsadmin -report
hdfs dfs -ls /
jps

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注