前言

在搭建 Hadoop 和 Hive 集群的过程中,笔者遇到了一些常见的坑。为了帮助其他同学减少踩坑的机会,特此总结这篇文章,希望能帮助大家顺利完成环境搭建。


Hadoop 集群搭建

1. 创建虚拟机

使用 VMware 创建一台至少 2 核 4 GB 内存的 Ubuntu 虚拟机,主机命名为 master,然后克隆两台虚拟机,分别命名为 slave1slave2

1.1 如何更改主机名
可视化界面更改

点击设置,选择 “关于”,然后点击 “设备名称” 进行修改。

修改主机名

终端界面更改

执行以下命令编辑主机名:

vim /etc/hostname

将文件中的内容替换为新的主机名。

1.2 修改 /etc/hosts 文件

在所有三台主机上都需要修改此文件。使用 ifconfig 查看每台机器的局域网 IP 地址,然后编辑 hosts 文件:

vim /etc/hosts

以下是修改示例,记得将 IP 地址替换为自己机器的实际 IP:

192.168.219.128 master
192.168.219.129 slave1
192.168.219.130 slave2

修改完后,重启每台主机:

reboot

2. 配置 SSH 免密登录

为三台机器配置 SSH 密钥,实现远程无密码访问。

2.1 安装 SSH 服务
sudo apt-get install openssh-server  # 安装 SSH 服务
sudo /etc/init.d/ssh restart  # 启动 SSH 服务
sudo ufw disable   # 关闭防火墙
2.2 生成 SSH 密钥并分发

在每台节点上生成 SSH 密钥,并将公钥分发到其他机器。

首先生成密钥:

ssh localhost
cd ~/.ssh         
rm ./id_rsa*                           
ssh-keygen -t rsa

然后将公钥添加到 authorized_keys 文件:

cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys

接着将 master 主机上的公钥传送到 slave1slave2

scp ~/.ssh/id_rsa.pub hadoop@slave1:~/
scp ~/.ssh/id_rsa.pub hadoop@slave2:~/

最后,在 slave1slave2 上执行以下命令:

cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

这样就完成了免密登录配置。


3. 安装 Java 环境

sudo apt update
sudo apt install openjdk-8-jdk

4. 安装 Hadoop

可以通过 wget 下载 Hadoop,但可能速度较慢。建议在本地官网下载,然后上传到虚拟机。

wget https://downloads.apache.org/hadoop/common/hadoop-3.3.5/hadoop-3.3.5.tar.gz
tar -xzvf hadoop-3.3.5.tar.gz
sudo mv hadoop-3.3.5 /usr/local/hadoop

5. 配置环境变量

vim ~/.bashrc

编辑 ~/.bashrc 文件,添加以下内容:

export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

使配置生效:

source ~/.bashrc

6. 配置 Hadoop

/usr/local/hadoop/etc/hadoop/ 目录下配置以下文件:

6.1 core-site.xml
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9000</value>
    </property>
    <property>
        <name>hadoop.proxyuser.hadoop.hosts</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.hadoop.groups</name>
        <value>*</value>
    </property>
</configuration>
6.2 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/hdfs/namenode</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:///usr/local/hadoop/hdfs/datanode</value>
    </property>
</configuration>
6.3 mapred-site.xml
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>yarn.app.mapreduce.am.env</name>
        <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
    </property>
    <property>
        <name>mapreduce.map.env</name>
        <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
    </property>
    <property>
        <name>mapreduce.reduce.env</name>
        <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
    </property>
</configuration>
6.4 yarn-site.xml
<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>2048</value>
    </property>
    <property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>2048</value>
    </property>
    <property>
        <name>yarn.nodemanager.vmem-pmem-ratio</name>
        <value>2.1</value>
    </property>
    <property>
        <name>mapred.child.java.opts</name>
        <value>-Xmx1024m</value>
    </property>
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>4096</value>
    </property>
</configuration>
6.5 workers
master
slave1
slave2
6.6 hadoop-env.shyarn-env.sh

编辑 hadoop-env.shyarn-env.sh,将以下内容添加进去:

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

7. 格式化 HDFS

在主节点执行以下命令:

hdfs namenode -format

在两台从节点执行以下命令:

hdfs datanode -format

8. 启动 Hadoop

启动 Hadoop 的 HDFS 和 YARN:

start-dfs.sh
start-yarn.sh

通过执行 jps 命令检查是否启动成功。


Hive 配置

1. 安装 MySQL(用于存储元数据)

Hive 需要一个关系型数据库来存储元数据。这里使用 MySQL。

1.1 安装 MySQL
sudo apt install mysql-server
sudo mysql_secure_installation
1.2 创建 Hive 数据库和用户
CREATE DATABASE hive;
CREATE USER 'hiveuser'@'localhost' IDENTIFIED BY 'hivepassword';
GRANT ALL PRIVILEGES ON hive.* TO 'hiveuser'@'localhost';
FLUSH PRIVILEGES;

2. 安装 Hive

wget https://downloads.apache.org/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz
tar -xzvf apache-hive-3.1.2-bin.tar.gz
sudo mv apache-hive-3.1.2-bin /usr/local/hive

3. 配置 Hive

3.1 修改 hive-site.xml
<configuration>
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://localhost:3306/hive?useSSL=false</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionDriver.Name</name>
        <value>com.mysql.cj.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>
</configuration>
3.2 设置环境变量

编辑 Hive 环境变量配置文件,确保 Hive 能正确识别 Hadoop 和 Hive 的配置文件路径。

mv /usr/local/hive/conf/hive-env.sh.template /usr/local/hive/conf/hive-env.sh
vi /usr/local/hive/conf/hive-env.sh

hive-env.sh 中追加以下两行内容:

export HADOOP_HOME=/usr/local/hadoop
export HIVE_CONF_DIR=/usr/local/hive/conf
3.3 创建相关目录和赋予权限

在 Hadoop 中创建 Hive 所需的目录,并设置适当的权限。此步骤必须在启动 Hadoop 后执行:

hadoop fs -mkdir /tmp
hadoop fs -mkdir -p /user/hive/warehouse
hadoop fs -chmod g+w /tmp
hadoop fs -chmod g+w /user/hive/warehouse

这些目录是 Hive 存储数据和临时文件的地方,必须确保 Hive 用户对它们有写入权限。

4. 初始化 Hive 数据库

schematool -dbType mysql -initSchema
nohup hive --service metastore &
nohup hiveserver2 &

5. 验证 Hive

验证 Hive 是否正常工作,可以使用 Beeline 或其他 Hive 客户端连接到 HiveServer2。

5.1 使用 Beeline 连接 HiveServer2

Beeline 是 Hive 提供的一个 JDBC 客户端工具,可以用来连接 HiveServer2 并执行 SQL 查询。

beeline -u jdbc:hive2://localhost:10000
5.2 执行简单查询验证安装

连接成功后,执行以下查询以验证 Hive 是否正常运行:

SHOW DATABASES;

总结

本文介绍了如何在 VMware 上搭建一个简单的 Hadoop 集群和 Hive 环境。关键步骤包括配置主机名、设置 SSH 免密登录、安装 Java 和 Hadoop、配置 Hive 与 MySQL,以及启动相关服务。完成这些步骤后,你将拥有一个可以处理大数据的基础环境,能够使用 Hive 进行 SQL 查询和数据分析。如果遇到问题,可以根据提示解决或随时提问!

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐