一、Linux 基础命令

命令 功能 常用选项
cd 切换目录 . 当前目录,.. 上级目录
ls 列出文件 -a 显示隐藏,-l 详细信息,-R 递归
cat 查看文件 -n 显示行号
mkdir 创建目录 -p 创建父目录
rm 删除文件/目录 -f 强制,-r 递归
cp 复制 -f 覆盖,-R 递归
mv 移动/重命名 -f 覆盖,-i 询问
pwd 显示当前路径
chmod 修改权限 数字法(r=4,w=2,x=1)如 700
sudo 以超级用户执行
source 使配置生效
hostnamectl 修改主机名 set-hostname
ifconfig 查看IP地址

二、JDK 安装与环境变量

步骤

  1. 上传 jdk-8u161-linux-x64.tar.gz 到 /opt

  2. 解压:sudo tar -zxvf jdk-8u161-linux-x64.tar.gz

  3. 编辑 /etc/profile,添加:

    bash

    export JAVA_HOME=/opt/jdk1.8.0_161
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASSPATH=.:${JAVA_HOME}/lib
    export PATH=${JAVA_HOME}/bin:$PATH
  4. source /etc/profile 使其生效

  5. 验证:java -version


三、SSH 免密登录配置

操作流程

  1. 生成密钥对:ssh-keygen -t rsa(一路回车)

  2. 将公钥追加到授权文件:

    bash

    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  3. 设置权限:

    bash

    chmod 755 ~
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys
  4. 分发公钥到其他节点:

    bash

    ssh-copy-id -i ~/.ssh/id_rsa.pub slave1
  5. 验证:ssh master 无需密码即成功


四、Hadoop 部署

4.1 伪分布式部署(单节点)

配置文件修改(位于 $HADOOP_HOME/etc/hadoop/
文件 关键配置
hadoop-env.sh export JAVA_HOME=/opt/jdk1.8.0_161
core-site.xml fs.defaultFS → hdfs://master:9000
hadoop.tmp.dir → 临时目录
hdfs-site.xml dfs.replication → 1
dfs.namenode.name.dir 和 dfs.datanode.data.dir
yarn-site.xml yarn.resourcemanager.hostname → master
yarn.nodemanager.aux-services → mapreduce_shuffle
mapred-site.xml mapreduce.framework.name → yarn
启动与验证
  • 格式化:hdfs namenode -format

  • 启动:start-all.sh 或 start-dfs.sh + start-yarn.sh

  • 进程检查:jps 应看到 NameNode, DataNode, SecondaryNameNode, ResourceManager, NodeManager

  • Web 界面:HDFS → http://master:50070,YARN → http://master:8088

4.2 完全分布式集群部署

节点规划
节点 HDFS 角色 YARN 角色
master NameNode ResourceManager
slave1, slave2 DataNode NodeManager
关键配置修改
  • etc/hosts:添加所有节点的 IP 与主机名映射

  • masters 文件:写入 master

  • workers 文件:写入 slave1slave2(删除 localhost)

  • hdfs-site.xmldfs.replication 设为 2

  • 删除临时目录(datanode_1_dir 中的内容)

克隆虚拟机后修改 slave 节点
  • 修改 IP 地址(/etc/netplan/*.yaml

  • 修改主机名:sudo hostnamectl set-hostname slave1

  • 修改 hdfs-site.xml:注释掉 NameNode 相关配置,保留 DataNode 配置

启动集群
  1. 在 master 上格式化:hdfs namenode -format

  2. 启动:start-all.sh

  3. 分别在各节点用 jps 验证进程


五、Hive 安装与配置

5.1 MySQL 作为元数据库(MySQL 8.0.14)

  • 安装依赖:sudo apt-get install libaio1

  • 按顺序安装 deb 包(mysql-commonlibmysqlclient21, ... , mysql-community-server

  • 注意:若安装时未设置 root 密码,后续需用 sudo mysql 进入并执行:

    sql

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
    FLUSH PRIVILEGES;
  • 创建用户并授权:

    sql

    CREATE USER 'zeng'@'%' IDENTIFIED BY '123456';
    GRANT ALL ON *.* TO 'zeng'@'%';
    CREATE DATABASE bigdata;   -- 存储 Hive 元数据

5.2 Hive 3.1.1 部署

配置文件
  • hive-site.xml:配置 MySQL 连接(URL、驱动、用户名、密码)

  • hive-env.sh:设置 export HADOOP_HOME=/opt/hadoop-3.1.1

  • /etc/profile 添加 HIVE_HOME 及 PATH

  • hive-config.sh 设置 JAVA_HOMEHADOOP_HOMEHIVE_HOME

初始化与启动
  • 复制 MySQL 驱动:mysql-connector-java-8.0.14.jar 到 Hive 的 lib 目录

  • 初始化元数据库:schematool -initSchema -dbType mysql

  • 启动 Hive:hive(需 Hadoop 已启动)


六、Hive 数据库与表操作

6.1 数据库 DDL

sql

CREATE DATABASE classtest;
CREATE DATABASE IF NOT EXISTS classtest;
SHOW DATABASES;
DESCRIBE DATABASE classtest;   -- 查看库存储位置
DROP DATABASE IF EXISTS classtest;

6.2 表操作(三种建表方式)

① 直接建表

sql

CREATE TABLE student (
  id string COMMENT 'student id',
  name string COMMENT 'student name',
  age int COMMENT 'student age'
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
STORED AS TEXTFILE
LOCATION '/user/hive/warehouse/classtest.db/student';
② AS 查询建表(复制结构和部分数据)

sql

CREATE TABLE student2 AS SELECT id, name FROM student WHERE id > 150;
③ LIKE 建表(仅复制结构,无数据)

sql

CREATE TABLE student3 LIKE student;
其他常用命令
  • SHOW TABLES;

  • DESC student; -- 查看表结构

  • ALTER TABLE 旧名 RENAME TO 新名;


七、Hive 分区表(重点)

7.1 单字段静态分区

sql

CREATE TABLE cityperson (
  id string, name string, age int
)
PARTITIONED BY (city string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
  • 加载数据

    sql

    LOAD DATA LOCAL INPATH '/home/user1/citydataForxiamen.txt' 
    INTO TABLE cityperson PARTITION(city='xiamen');
  • 查看分区SHOW PARTITIONS cityperson;

  • HDFS 存储结构:/user/hive/warehouse/库名.db/表名/city=值/

7.2 多字段静态分区

sql

CREATE TABLE agentinformation (
  agentID string, agentName string, agentAddress string
)
PARTITIONED BY (province string, city string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ';
  • 加载数据示例:

    sql

    LOAD DATA LOCAL INPATH '...' INTO TABLE agentinformation 
    PARTITION(province='shanxi', city='xian');
  • 覆盖数据:添加 OVERWRITE 关键字

    sql

    LOAD DATA LOCAL INPATH '...' OVERWRITE INTO TABLE agentinformation 
    PARTITION(province='fujian', city='xiamen');

八、Sqoop 数据迁移

8.1 Sqoop 安装与配置

  • 解压 sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz 到 /opt

  • 配置 sqoop-env.sh:设置 HADOOP_COMMON_HOMEHADOOP_MAPRED_HOMEHIVE_HOME

  • 配置 /etc/profileexport SQOOP_HOME 并修改 PATH

  • 复制 MySQL 驱动到 Sqoop 的 lib 目录

  • 验证:./bin/sqoop version

8.2 数据导入操作

① MySQL → HDFS

bash

./bin/sqoop import \
--connect jdbc:mysql://master:3306/teacherinfo?serverTimezone=UTC \
--username zeng --password 123456 \
--table teacher \
--delete-target-dir -m 3
  • 默认导入到 /user/user1/teacher(HDFS)

② MySQL → Hive

bash

./bin/sqoop import \
--connect jdbc:mysql://master:3306/teacherinfo?serverTimezone=UTC \
--username zeng --password 123456 \
--table teacher \
--delete-target-dir \
--hive-import --hive-table teacher -m 3
  • 前提:将 hive-common-3.1.1.jar 复制到 Sqoop 的 lib 目录,避免 ClassNotFoundException

  • Hive 中会自动创建表(字段顺序可能与 MySQL 不同,需注意)

③ 带条件导入(--where

bash

./bin/sqoop import --connect jdbc:mysql://master:3306/erp?serverTimezone=UTC \
--username zeng --password 123456 \
--table emp --columns ename,eaddress,esalary \
--where "esalary > 4000" \
--delete-target-dir --hive-import --hive-table esalary -m 3

8.3 常用参数

参数 作用
--connect JDBC URL
--table 源表名
--columns 指定列
--where 过滤条件
-m Map 任务数(并行度)
--delete-target-dir 删除目标目录(避免冲突)
--hive-import 导入到 Hive
--hive-table Hive 表名

九、常见问题与解决

问题 原因 解决方法
ClassNotFoundException: HiveConf Sqoop 缺少 Hive jar 复制 hive-common-*.jar 到 Sqoop 的 lib
MySQL 安装后无法登录 未设置 root 密码或加密方式不兼容 sudo mysql 进入,用 ALTER USER ... mysql_native_password 重置密码
Hadoop 启动无 SecondaryNameNode /etc/hosts 配置错误 检查主机名映射,确保 localhost 和实际主机名正确
NameNode 处于 safe mode 刚启动或异常 hdfs dfsadmin -safemode leave 退出
运行 MR 程序报 MRAppMaster 错误 缺少环境变量 在 mapred-site.xml 中添加 yarn.app.mapreduce.am.env 等配置
权限被拒绝 目录权限不对 使用 chmod 调整为 700 或 755

十、复习建议

  1. 动手实操:按照文档顺序,从 Linux 基础 → JDK → SSH → Hadoop(伪分布 → 集群)→ Hive → Sqoop,边做边记。

  2. 重点掌握

    • Hadoop 核心配置文件的含义(core-site, hdfs-site, yarn-site, mapred-site)

    • Hive 分区表的设计与数据加载(PARTITIONED BY + LOAD DATA

    • Sqoop 导入命令的参数组合

  3. 排错能力:熟悉常见报错信息(如 ClassNotFoundExceptionSafeModeException)及其解决步骤。

  4. Web 监控:熟悉 50070(HDFS)和 8088(YARN)端口的界面,用于查看节点状态和作业运行情况。

更多推荐