摘要
本文详细介绍了在CentOS 7.9上配置Hadoop和Hive的源集群与目标集群的步骤,并描述了通过DistCp工具和导入/导出方式进行ORC表数据迁移的过程。本文主要包含三个部分:环境配置、Kerberos配置和数据迁移方案。
环境配置清单
-
源集群:
- CentOS 7.9
- Hadoop 2.10.1
- Hive 2.3.9
-
目标集群:
-
CentOS 7.9
-
Hadoop 3.3.6
-
Hive 3.1.2
-
源集群配置步骤
1. CentOS 7.9 预安装配置
1.1 更新系统(每一节点都要操作)
sudo yum update -y
1.2 关闭防火墙(每一节点都要操作)
sudo systemctl stop firewalld
sudo systemctl disable firewalld
1.3 关闭 SELinux(每一节点都要操作)
编辑 /etc/selinux/config
文件,将 SELINUX=enforcing
改为 SELINUX=disabled
:
sudo vi /etc/selinux/config
# 修改以下内容:
SELINUX=disabled
然后重启系统:
sudo reboot
重启后验证 SELinux 状态:
sestatus
1.4 安装必要的软件包(每一节点都要操作)
sudo yum install -y epel-release
sudo yum install -y wget vim java-1.8.0-openjdk-devel ntp
1.5 配置 NTP 服务
sudo systemctl start ntpd
sudo systemctl enable ntpd
1.6 设置主机名
为每台服务器设置唯一的主机名:
# 在 node1 上
sudo hostnamectl set-hostname node1
# 在 node2 上
sudo hostnamectl set-hostname node2
# 在 node3 上
sudo hostnamectl set-hostname node3
然后编辑 /etc/hosts
文件,添加以下内容:
sudo vi /etc/hosts
# 添加以下内容:
192.168.1.101 node1
192.168.1.102 node2
192.168.1.103 node3
2. 配置 SSH 互信
2.1 生成 SSH 密钥对(在 node1 上执行)
ssh-keygen -t rsa
# 按 Enter 键三次,使用默认设置生成密钥
2.2 复制 SSH 公钥到所有节点
ssh-copy-id node1
ssh-copy-id node2
ssh-copy-id node3
2.3 验证 SSH 互信
确保可以从 node1 无密码地 SSH 到 node2 和 node3:
ssh node2
ssh node3
3. 安装和配置 Hadoop 2.10.1
3.1 下载 Hadoop 2
在所有节点上下载 Hadoop:
cd /opt
sudo wget https://archive.apache.org/dist/hadoop/common/hadoop-2.10.1/hadoop-2.10.1.tar.gz
sudo tar -xzvf hadoop-2.10.1.tar.gz
sudo mv hadoop-2.10.1 /usr/local/hadoop
3.2 配置 Hadoop 环境变量
在所有节点的 .bashrc
文件中添加以下内容:
sudo vi ~/.bashrc
# 添加以下内容:
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
然后使配置生效:
source ~/.bashrc
3.3 配置 Hadoop
在 node1 上配置 Hadoop,并将配置文件分发到所有节点。
配置 core-site.xml:
sudo vi $HADOOP_HOME/etc/hadoop/core-site.xml
# 添加以下内容:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
</configuration>
配置 hdfs-site.xml:
sudo vi $HADOOP_HOME/etc/hadoop/hdfs-site.xml
# 添加以下内容:
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>file:///usr/local/hadoop/hdfs/namenode</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>file:///usr/local/hadoop/hdfs/datanode</value>
</property>
</configuration>
配置 mapred-site.xml:
sudo cp $HADOOP_HOME/etc/hadoop/mapred-site.xml.template $HADOOP_HOME/etc/hadoop/mapred-site.xml
sudo vi $HADOOP_HOME/etc/hadoop/mapred-site.xml
# 添加以下内容:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
配置 yarn-site.xml:
sudo vi $HADOOP_HOME/etc/hadoop/yarn-site.xml
# 添加以下内容:
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
将配置文件分发到其他节点:
scp $HADOOP_HOME/etc/hadoop/core-site.xml node2:$HADOOP_HOME/etc/hadoop/
scp $HADOOP_HOME/etc/hadoop/hdfs-site.xml node2:$HADOOP_HOME/etc/hadoop/
scp $HADOOP_HOME/etc/hadoop/mapred-site.xml node2:$HADOOP_HOME/etc/hadoop/
scp $HADOOP_HOME/etc/hadoop/yarn-site.xml node2:$HADOOP_HOME/etc/hadoop/
scp $HADOOP_HOME/etc/hadoop/core-site.xml node3:$HADOOP_HOME/etc/hadoop/
scp $HADOOP_HOME/etc/hadoop/hdfs-site.xml node3:$HADOOP_HOME/etc/hadoop/
scp $HADOOP_HOME/etc/hadoop/mapred-site.xml node3:$HADOOP_HOME/etc/hadoop/
scp $HADOOP_HOME/etc/hadoop/yarn-site.xml node3:$HADOOP_HOME/etc/hadoop/
3.4 格式化 Namenode(仅在 node1 上执行)
hdfs namenode -format
3.5 启动 Hadoop 集群
创建 start-all.sh
脚本:
sudo vi /usr/local/hadoop/start-all.sh
# 添加以下内容:
#!/bin/bash
# 启动 HDFS
start-dfs.sh
# 启动 YARN
start-yarn.sh
# 在所有节点启动 DataNode 和 NodeManager
for node in node1 node2 node3
do
ssh $node "hadoop-daemon.sh start datanode"
ssh $node "yarn-daemon.sh start nodemanager"
done
赋予执行权限:
sudo chmod +x /usr/local/hadoop/start-all.sh
执行启动脚本(在 node1 上执行):
/usr/local/hadoop/start-all.sh
3.6 验证 Hadoop 集群
在浏览器中访问以下 URL 验证 Hadoop 集群的状态:
- Namenode:
http://node1:50070
- ResourceManager:
http://node1:8088
4. 安装和配置 Hive 2.3.9
4.1 下载 Hive 2
在所有节点上下载 Hive:
cd /opt
sudo wget https://archive.apache.org/dist/hive/hive-2.3.9/apache-hive-2.3.9-bin.tar.gz
sudo tar -xzvf apache-hive-2.3.9-bin.tar.gz
sudo mv apache-hive-2.3.9-bin /usr/local/hive
4.2 配置 Hive 环境变量
在所有节点的 .bashrc
文件中添加以下内容:
sudo vi ~/.bashrc
# 添加以下内容:
export HIVE_HOME=/usr/local/hive
export PATH=$PATH:$HIVE_HOME/bin
然后使配置生效:
source ~/.bashrc
4.3 配置 Hive
在 node1 上配置 Hive,并将配置文件分发到所有节点。
配置 hive-site.xml:
sudo cp $HIVE_HOME/conf/hive-default.xml.template $HIVE_HOME/conf/hive-site.xml
sudo vi $HIVE_HOME/conf/hive-site.xml
# 添加以下内容:
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://node1:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hiveuser</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hivepassword</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
</configuration>
将配置文件分发到其他节点:
scp $HIVE_HOME/conf/hive-site.xml node2:$HIVE_HOME/conf/
scp $HIVE_HOME/conf/hive-site.xml node3:$HIVE_HOME/conf/
4.4 初始化 Hive Metastore
在 node1 上执行:
schematool -initSchema -dbType mysql