ARTICLE DETAIL

资讯详情

深耕网站SEO优化与搜索引擎排名提升的一线实战洞察。

从零搭建Hadoop+Spark+Hive大数据环境:Ubuntu系统部署与排错指南

从零搭建Hadoop+Spark+Hive大数据环境:Ubuntu系统部署与排错指南 1. 项目概述一次典型的云计算与大数据环境搭建实录最近在带学生做云计算与大数据相关的课程实验发现一个普遍现象很多同学的理论知识掌握得不错但一到动手搭建环境、安装软件这一步就频频“翻车”。不是依赖库冲突就是配置文件出错要么就是网络问题导致安装失败一个简单的实验环境准备能折腾一整天。这让我意识到对于初学者乃至有一定经验的从业者来说一套清晰、可复现的软件安装与配置流程其价值不亚于一本好的理论教材。因此我决定将这次课程中从零开始构建一个可用于教学和简单开发的“云计算与大数据”基础软件栈的全过程记录下来。这不仅仅是一份操作清单更是一次对常见陷阱、配置逻辑和排错思路的深度剖析。我们将基于主流的Linux发行版以Ubuntu Server LTS为例涵盖从虚拟机/云主机初始化到Hadoop、Spark、Hive等核心大数据组件的部署再到必要的开发工具链配置。无论你是正在学习相关课程的学生还是希望快速搭建一个本地测试环境的开发者这份“踩坑”后的经验总结都能帮你节省大量时间直击要害。2. 环境规划与基础准备在开始安装任何大数据软件之前一个稳定、干净且经过适当优化的基础操作系统环境至关重要。盲目开始安装后期往往会遇到各种权限、路径和依赖问题。2.1 操作系统选择与初始化对于云计算与大数据环境我们通常选择服务器版本的Linux发行版例如Ubuntu Server、CentOS Stream或Rocky Linux。它们没有图形界面开销更稳定且对服务器软件支持更好。本次我们以Ubuntu 22.04 LTS为例。首先在VMware、VirtualBox或你拥有的云服务器如阿里云ECS、腾讯云CVM上安装一个全新的Ubuntu Server。安装时建议勾选“OpenSSH server”以便远程连接。系统安装完成后第一件事不是急着装软件而是进行基础优化。更新系统源与软件包这是保证后续所有安装能顺利找到最新、最稳定依赖的前提。sudo apt update sudo apt upgrade -yapt update刷新软件包索引upgrade升级所有可升级的包。-y参数用于自动确认在脚本中很常用。配置静态IP针对本地虚拟机对于虚拟机环境避免DHCP分配的IP变动导致后续配置失效。编辑网络配置文件sudo vim /etc/netplan/00-installer-config.yaml根据你的网络情况配置例如network: ethernets: ens33: # 网卡名称请用 ip a 命令查看 dhcp4: no addresses: [192.168.1.100/24] gateway4: 192.168.1.1 nameservers: addresses: [8.8.8.8, 114.114.114.114] version: 2应用配置sudo netplan apply。关闭防火墙与SELinux仅用于学习环境在复杂的分布式系统学习初期防火墙和SELinux可能会带来许多难以排查的连接问题。生产环境必须严格配置但学习环境可以先关闭以简化问题。sudo ufw disable # 关闭Ubuntu防火墙 # 如果是CentOS/Rocky Linux还需 # sudo setenforce 0 # 临时关闭SELinux # sudo sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config # 永久关闭配置主机名映射大数据集群组件之间经常通过主机名通信。即使只有单机配置好本地映射也能避免一些潜在问题。sudo vim /etc/hosts # 添加一行例如假设主机名为 bigdata-server 127.0.1.1 bigdata-server注意以上关闭防火墙和SELinux的操作仅适用于内网测试或学习环境。任何计划暴露在公网或用于生产的环境都必须基于最小权限原则精细配置防火墙规则和安全策略。2.2 创建专用用户与目录规划不建议直接使用root用户进行日常操作和软件安装。创建一个专门的大数据用户并规划好清晰的目录结构是良好的实践。创建用户和组sudo adduser hadoop # 创建用户hadoop按提示设置密码 sudo usermod -aG sudo hadoop # 将hadoop加入sudo组获取管理员权限后续操作我们主要使用hadoop用户。规划软件目录我习惯将所有第三方软件安装在/opt目录下用户数据放在/home/hadoop/data下。sudo mkdir -p /opt/modules # 存放Hadoop、Spark等软件解压后的目录 sudo mkdir -p /opt/software # 存放下载的软件安装包 sudo mkdir -p /home/hadoop/data # 存放数据 sudo chown -R hadoop:hadoop /opt/modules /opt/software /home/hadoop/data # 更改属主这样的结构一目了然software是“仓库”modules是“运行环境”data是“工作区”。2.3 安装基础依赖与开发工具大数据软件大多由Java或Scala编写因此Java Development Kit (JDK) 是绝对的核心依赖。版本选择很重要太新或太旧都可能不兼容。安装JDKHadoop 3.x 通常推荐JDK 8或JDK 11。这里安装OpenJDK 11。sudo apt install openjdk-11-jdk -y安装后验证java -version # 应输出类似openjdk version 11.0.22 2024-01-16常见坑点有时系统会默认安装多个Java版本。使用update-alternatives --config java可以查看和切换默认Java版本。确保你后续配置的环境变量指向正确的JDK路径可以通过readlink -f $(which java)找到实际路径。配置JAVA_HOME环境变量这是最关键的一步很多软件启动失败都源于此变量未正确设置。# 先找到JDK的安装根目录通常在上一步命令输出的路径的上级目录 # 例如如果 readlink -f $(which java) 输出 /usr/lib/jvm/java-11-openjdk-amd64/bin/java # 那么 JAVA_HOME 应该是 /usr/lib/jvm/java-11-openjdk-amd64 # 编辑hadoop用户的bash配置文件 vim ~/.bashrc # 在文件末尾添加 export JAVA_HOME/usr/lib/jvm/java-11-openjdk-amd64 export PATH$JAVA_HOME/bin:$PATH使配置生效source ~/.bashrc。验证echo $JAVA_HOME应输出你设置的路径。安装其他常用工具SSH客户端、网络工具、压缩工具等。sudo apt install ssh pdsh net-tools vim wget curl unzip -ypdsh是一个并行分布式shell工具在管理集群时非常有用。3. 核心大数据组件安装与配置基础环境就绪后我们开始安装大数据生态的核心“三驾马车”Hadoop存储与计算基础、Spark内存计算引擎、Hive数据仓库工具。我们将采用“伪分布式”模式安装即所有服务都运行在单台机器上但遵循分布式架构的配置逻辑这对于学习和功能测试完全足够。3.1 Hadoop 3.x 伪分布式集群部署Hadoop是整个生态的基石包含HDFS分布式文件系统和YARN资源调度器两大核心。下载与解压cd /opt/software wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz tar -zxvf hadoop-3.3.6.tar.gz -C /opt/modules/ cd /opt/modules sudo ln -s hadoop-3.3.6 hadoop # 创建软链接方便版本管理 sudo chown -R hadoop:hadoop hadoop-3.3.6 hadoop配置环境变量将Hadoop的bin和sbin目录加入PATH。vim ~/.bashrc # 添加以下内容 export HADOOP_HOME/opt/modules/hadoop export PATH$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH export HADOOP_CONF_DIR$HADOOP_HOME/etc/hadoopsource ~/.bashrc生效。修改Hadoop配置文件这是配置的核心位于$HADOOP_HOME/etc/hadoop/目录下。hadoop-env.sh指定JDK路径。vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh # 找到 export JAVA_HOME 这一行取消注释并修改为 export JAVA_HOME/usr/lib/jvm/java-11-openjdk-amd64core-site.xml配置HDFS的默认文件系统URI和临时目录。vim $HADOOP_HOME/etc/hadoop/core-site.xml在configuration标签内添加property namefs.defaultFS/name valuehdfs://localhost:9000/value /property property namehadoop.tmp.dir/name value/home/hadoop/data/hadoop/tmp/value /propertyhdfs-site.xml配置HDFS副本数伪分布式设为1。property namedfs.replication/name value1/value /property property namedfs.namenode.name.dir/name valuefile:///home/hadoop/data/hadoop/namenode/value /property property namedfs.datanode.data.dir/name valuefile:///home/hadoop/data/hadoop/datanode/value /propertymapred-site.xml配置MapReduce使用YARN框架。property namemapreduce.framework.name/name valueyarn/value /propertyyarn-site.xml配置YARN资源管理器。property nameyarn.nodemanager.aux-services/name valuemapreduce_shuffle/value /property property nameyarn.nodemanager.env-whitelist/name valueJAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME/value /property配置SSH免密登录Hadoop脚本管理集群需要本机到自身的SSH免密登录。ssh-keygen -t rsa -P -f ~/.ssh/id_rsa # 生成密钥对 cat ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys # 将公钥加入授权列表 chmod 600 ~/.ssh/authorized_keys # 测试ssh localhost 应该不需要密码直接登录格式化HDFS并启动集群hdfs namenode -format # 格式化NameNode**注意首次安装才需要重复格式化会清空数据** start-dfs.sh # 启动HDFSNameNode, DataNode, SecondaryNameNode start-yarn.sh # 启动YARNResourceManager, NodeManager使用jps命令查看Java进程应该能看到NameNode,DataNode,ResourceManager,NodeManager等。验证浏览器访问http://你的服务器IP:9870查看HDFS状态。浏览器访问http://你的服务器IP:8088查看YARN集群状态。实操心得配置文件中的路径如hadoop.tmp.dir务必使用绝对路径并且确保hadoop用户对该路径有读写权限。每次修改配置文件后需要重启相关服务stop-dfs.shstop-yarn.sh再启动才能生效。格式化NameNode是高风险操作务必确认数据可丢失后再执行。3.2 Spark 3.x On YARN 模式部署Spark可以独立运行也可以运行在YARN上。集成到YARN上可以更好地与Hadoop生态共享资源。下载与解压选择与Hadoop版本兼容的Spark带hadoop3后缀。cd /opt/software wget https://dlcdn.apache.org/spark/spark-3.5.0/spark-3.5.0-bin-hadoop3.tgz tar -zxvf spark-3.5.0-bin-hadoop3.tgz -C /opt/modules/ cd /opt/modules sudo ln -s spark-3.5.0-bin-hadoop3 spark sudo chown -R hadoop:hadoop spark-3.5.0-bin-hadoop3 spark配置环境变量与Spark配置vim ~/.bashrc export SPARK_HOME/opt/modules/spark export PATH$SPARK_HOME/bin:$SPARK_HOME/sbin:$PATH source ~/.bashrc复制模板配置文件并修改cd $SPARK_HOME/conf cp spark-env.sh.template spark-env.sh vim spark-env.sh # 添加以下内容 export JAVA_HOME/usr/lib/jvm/java-11-openjdk-amd64 export HADOOP_CONF_DIR$HADOOP_HOME/etc/hadoop export SPARK_MASTER_HOSTlocalhost为了让Spark在YARN上运行通常不需要启动独立的Spark集群start-master.sh而是直接以yarn为master提交任务。验证Spark运行本地Pi计算示例spark-submit --class org.apache.spark.examples.SparkPi --master local[*] $SPARK_HOME/examples/jars/spark-examples_2.12-3.5.0.jar 10运行YARN模式示例需先启动Hadoop YARNspark-submit \ --class org.apache.spark.examples.SparkPi \ --master yarn \ --deploy-mode client \ $SPARK_HOME/examples/jars/spark-examples_2.12-3.5.0.jar \ 10在YARN的Web UI8088端口中应该能看到这个应用。注意事项Spark on YARN时--deploy-mode可以是client或cluster。client模式下Driver运行在提交任务的机器上适合交互式调试cluster模式下Driver运行在YARN的某个容器内更适合生产作业。初次测试建议用client模式日志直接输出在终端便于排查问题。3.3 Hive 3.x 元数据管理与安装Hive可以将SQL转换为MapReduce/Tez/Spark任务它需要一个“元数据库”来存储表结构等信息。生产环境用MySQL/PostgreSQL学习环境可以用其自带的Derby数据库仅支持单会话。下载与解压cd /opt/software wget https://dlcdn.apache.org/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz tar -zxvf apache-hive-3.1.3-bin.tar.gz -C /opt/modules/ cd /opt/modules sudo ln -s apache-hive-3.1.3-bin hive sudo chown -R hadoop:hadoop apache-hive-3.1.3-bin hive配置环境变量vim ~/.bashrc export HIVE_HOME/opt/modules/hive export PATH$HIVE_HOME/bin:$PATH source ~/.bashrc配置Hivecd $HIVE_HOME/conf cp hive-env.sh.template hive-env.sh cp hive-default.xml.template hive-site.xml编辑hive-env.sh添加export HADOOP_HOME/opt/modules/hadoop export HIVE_CONF_DIR/opt/modules/hive/conf由于默认的hive-site.xml非常复杂我们创建一个新的简化版mv hive-site.xml hive-site.xml.template # 备份原模板 vim hive-site.xml写入以下基本配置?xml version1.0? ?xml-stylesheet typetext/xsl hrefconfiguration.xsl? configuration property namejavax.jdo.option.ConnectionURL/name valuejdbc:derby:;databaseName/home/hadoop/data/hive/metastore_db;createtrue/value descriptionJDBC connect string for a JDBC metastore/description /property property namejavax.jdo.option.ConnectionDriverName/name valueorg.apache.derby.jdbc.EmbeddedDriver/value descriptionDriver class name for a JDBC metastore/description /property property namehive.metastore.local/name valuetrue/value /property property namehive.metastore.warehouse.dir/name value/user/hive/warehouse/value /property property namehive.server2.thrift.port/name value10000/value /property property namehive.server2.thrift.bind.host/name valuelocalhost/value /property /configuration初始化Derby元数据库并启动# 初始化元数据库 schematool -initSchema -dbType derby # 启动Hive CLI旧版或 Beeline新版推荐 hive # 进入Hive命令行界面在Hive CLI中可以尝试创建表、查询等操作。常见问题如果遇到Caused by: ERROR XSDB6: Another instance of Derby may have already booted the database错误说明Derby数据库被锁定了。这是因为Derby是单进程数据库确保没有其他Hive会话在运行然后删除 metastore_db 目录及其下的derby.log文件重新初始化。强烈建议学习时使用MySQL作为元数据库避免此问题也更贴近生产环境。安装MySQL后只需修改hive-site.xml中的JDBC连接信息即可。4. 辅助工具与开发环境配置大数据开发不仅仅是部署Hadoop、Spark还需要一系列辅助工具来提高效率例如数据可视化、作业调度、以及方便的IDE。4.1 安装与配置MySQL替代Derby如前所述使用MySQL作为Hive元数据库更稳定。安装MySQL Serversudo apt install mysql-server -y sudo systemctl start mysql sudo systemctl enable mysql安全初始化与创建Hive元数据库sudo mysql_secure_installation # 按提示设置root密码、移除匿名用户等 mysql -u root -p在MySQL命令行中执行CREATE DATABASE metastore CHARACTER SET latin1 COLLATE latin1_general_ci; CREATE USER hivelocalhost IDENTIFIED BY hivepassword; GRANT ALL PRIVILEGES ON metastore.* TO hivelocalhost; FLUSH PRIVILEGES; EXIT;下载MySQL JDBC驱动并放入Hive的lib目录cd /opt/software wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-j-8.0.33.tar.gz tar -zxvf mysql-connector-j-8.0.33.tar.gz cp mysql-connector-j-8.0.33/mysql-connector-j-8.0.33.jar $HIVE_HOME/lib/修改Hive配置指向MySQL 修改$HIVE_HOME/conf/hive-site.xml更新以下属性property namejavax.jdo.option.ConnectionURL/name valuejdbc:mysql://localhost:3306/metastore?createDatabaseIfNotExisttrueuseSSLfalseallowPublicKeyRetrievaltrue/value /property property namejavax.jdo.option.ConnectionDriverName/name valuecom.mysql.cj.jdbc.Driver/value /property property namejavax.jdo.option.ConnectionUserName/name valuehive/value /property property namejavax.jdo.option.ConnectionPassword/name valuehivepassword/value /property重新初始化元数据库schematool -initSchema -dbType mysql4.2 安装Python与数据分析库PySpark环境Spark支持Python APIPySpark这是数据科学家的最爱。安装Python及pipsudo apt install python3 python3-pip -y配置PySpark依赖PySpark运行时需要本机有可用的Python环境。为了让PySpark能找到正确的Python可以设置环境变量通常Spark会自动使用python3。# 可选在 spark-env.sh 中明确指定 # export PYSPARK_PYTHON/usr/bin/python3 # export PYSPARK_DRIVER_PYTHON/usr/bin/python3安装常用Python库pip3 install pyspark numpy pandas matplotlib jupyterlab安装后就可以在命令行使用pyspark进入交互式环境或者用spark-submit提交Python脚本了。4.3 远程开发环境连接可选但推荐在本地Windows/Mac电脑上使用IDE如IntelliJ IDEA, VS Code, PyCharm远程连接到服务器进行开发体验更好。在服务器端确保SSH服务运行sudo systemctl status ssh在本地IDE中配置远程解释器或SSH连接PyCharm/IntelliJ IDEA在设置中搜索“Python Interpreter”或“SSH”添加远程主机信息将解释器路径设置为服务器上的/usr/bin/python3。VS Code安装“Remote - SSH”扩展然后通过命令面板CtrlShiftP输入“Remote-SSH: Connect to Host...”添加服务器连接。配置本地到服务器的端口转发为了在本地浏览器访问服务器上的Web UI如Hadoop 9870端口Spark 4040端口可以使用SSH端口转发。# 在本地终端执行 ssh -L 9870:localhost:9870 hadoop你的服务器IP然后本地浏览器访问http://localhost:9870即可看到HDFS界面。5. 安装后验证与基础操作示例环境搭建好后需要通过一系列连贯的操作来验证整个栈是否工作正常。5.1 全链路测试从HDFS到Hive启动所有服务start-dfs.sh start-yarn.sh # Hive Metastore服务如果使用远程模式需要启动我们这里是嵌入式/本地模式用CLI时会自动启动 # hive --service metastore # 后台启动元数据服务 # hive --service hiveserver2 # 启动HiveServer2供JDBC/ODBC连接HDFS操作hdfs dfs -mkdir -p /user/hadoop/input echo Hello Hadoop World test.txt hdfs dfs -put test.txt /user/hadoop/input/ hdfs dfs -cat /user/hadoop/input/test.txtSpark操作读取HDFS文件 启动PySpark交互界面pyspark在PySpark Shell中执行text_file spark.sparkContext.textFile(hdfs://localhost:9000/user/hadoop/input/test.txt) word_counts text_file.flatMap(lambda line: line.split( )).map(lambda word: (word, 1)).reduceByKey(lambda a, b: ab) word_counts.collect()Hive操作创建表并查询hive # 进入Hive CLICREATE TABLE IF NOT EXISTS test_table (id INT, name STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY , STORED AS TEXTFILE; -- 准备本地数据文件 -- 在另一个终端echo -e 1,Alice\n2,Bob /tmp/data.csv LOAD DATA LOCAL INPATH /tmp/data.csv INTO TABLE test_table; SELECT * FROM test_table;5.2 资源监控与日志查看YARN ResourceManager UI:http://服务器IP:8088查看集群资源使用和运行中的应用。HDFS NameNode UI:http://服务器IP:9870查看文件系统状态。Spark History Server需启动: 用于查看已完成的Spark作业历史。日志位置Hadoop日志$HADOOP_HOME/logs/Spark日志Spark on YARN模式下日志主要在YARN的容器里可以通过YARN UI的“Logs”链接查看或使用yarn logs -applicationId app_id命令。Hive日志默认在/tmp/用户名/hive.log6. 常见问题排查与经验技巧即使按照步骤操作也难免会遇到问题。这里总结几个高频问题及其解决思路。6.1 启动失败类问题问题现象可能原因排查步骤start-dfs.sh后jps看不到 NameNode1. SSH免密登录未配置。2.hdfs namenode -format未执行或执行失败。3. 配置文件错误如端口占用、路径权限。1. 检查ssh localhost是否免密。2. 查看$HADOOP_HOME/logs/hadoop-*-namenode-*.log错误日志。3. 检查core-site.xml和hdfs-site.xml配置。YARN ResourceManager 启动失败1. JAVA_HOME 未在yarn-env.sh中正确设置。2. 端口冲突8088。1. 确认yarn-env.sh中export JAVA_HOME。2. 使用 netstat -tlnpHive 初始化 schematool 失败1. Derby数据库目录被锁单会话问题。2. MySQL连接失败驱动未放、密码错误、权限不足。1. 删除 metastore_db 和 derby.log 重试。2. 检查MySQL服务状态、驱动jar包、连接字符串和用户权限。6.2 运行时错误类问题Spark提交作业到YARN失败报ClassNotFoundException或NoSuchMethodError 这通常是依赖冲突或版本不匹配。确保你提交的应用程序jar包所依赖的库版本如Hadoop、Spark本身与集群环境一致。使用--jars参数指定额外的依赖包或使用spark-submit的--packages从Maven仓库自动下载。Hive查询报错FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask 这通常是MapReduce任务执行失败。首先去YARN UI8088找到对应的应用查看日志。常见原因有内存不足调整mapreduce.map.memory.mb和mapreduce.reduce.memory.mb、HDFS权限问题Hive表目录权限不对、数据格式与表定义不匹配。磁盘空间不足导致HDFS DataNode下线 检查DataNode日志确认磁盘空间。HDFS有配置项dfs.datanode.du.reserved用于保留一部分空间给非HDFS使用默认是0。可以适当调整或清理磁盘。6.3 性能调优与稳定性建议针对学习环境内存配置伪分布式模式下所有服务挤在一台机器容易内存不足。务必在hadoop-env.sh、yarn-env.sh中为HADOOP_HEAPSIZE、YARN_HEAPSIZE设置合理的值如2GB。在yarn-site.xml中调整yarn.nodemanager.resource.memory-mb总可用内存和yarn.scheduler.maximum-allocation-mb单个容器最大内存。关闭IPv6某些情况下Hadoop服务可能错误地绑定到IPv6地址导致连接问题。可以在hadoop-env.sh中添加export HADOOP_OPTS-Djava.net.preferIPv4Stacktrue $HADOOP_OPTS。使用脚本管理服务编写简单的shell脚本一键启动/停止所有服务HDFS, YARN, Spark History Server, Hive Metastore等避免手动输入多个命令。定期清理临时文件Hadoop和Spark会产生大量临时文件定期清理/tmp和hadoop.tmp.dir指定的目录防止磁盘写满。整个安装配置过程本质上是对分布式系统组件之间依赖关系和配置约定的学习。最宝贵的经验往往来自于解决那些千奇百怪的报错信息。建议每完成一个组件的安装就立即进行基础功能测试确保它是正常的再继续下一个。这样一旦出问题排查范围会小很多。最后将这份配置文档和你自己的安装笔记保存好未来搭建新环境时它就是你的最佳模板。
返回列表