1. 前言
今天我在Linux CentOS系统中搭建了一个个人博客网站,用于存放我的学习笔记和文章。这个网站使用了HTML、CSS、JavaScript和PHP技术栈。同时,我还按照教程在虚拟机上安装了Hive元数据库。本文将记录这两个项目的实践过程,分享从零开始搭建个人网站和配置大数据环境的关键步骤。
2. 个人博客网站搭建
2.1 环境准备
首先确保CentOS系统已安装必要的Web服务组件:
# 更新系统 sudo yum update -y 安装Apache Web服务器 sudo yum install httpd -y 安装PHP sudo yum install php php-mysqlnd php-gd php-xml -y 安装MySQL/MariaDB数据库 sudo yum install mariadb-server mariadb -y 启动服务并设置开机自启 sudo systemctl start httpd sudo systemctl start mariadb sudo systemctl enable httpd sudo systemctl enable mariadb2.2 网站目录结构
在Apache的默认网站目录下创建博客网站:
# 进入网站根目录 cd /var/www/html 创建博客目录结构 mkdir -p myblog/{css,js,images,posts} touch myblog/index.php touch myblog/css/style.css touch myblog/js/main.js2.3 前端页面设计
创建基本的HTML结构和CSS样式:
<!-- index.php --> <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>我的个人博客</title> <link rel="stylesheet" href="css/style.css"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css"> </head> <body> <header> <h1><i class="fas fa-blog"></i> 我的技术博客</h1> <nav> <a href="index.php">首页</a> <a href="posts/">文章列表</a> <a href="about.php">关于我</a> </nav> </header> <main> <section class="welcome"> <h2>欢迎来到我的博客</h2> <p>这里记录我的学习笔记和技术分享</p> </section> &lt;section class="recent-posts"&gt; &lt;h3&gt;&lt;i class="fas fa-newspaper"&gt;&lt;/i&gt; 最新文章&lt;/h3&gt; &lt;?php include 'get_posts.php'; ?&gt; &lt;/section&gt; </main> <footer> <p>© 2025 我的博客 | 使用PHP + MySQL构建</p> </footer> <script src="js/main.js"></script> </body> </html>2.4 CSS样式设计
/* style.css */ * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; line-height: 1.6; color: #333; background-color: #f5f5f5; } header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 2rem; text-align: center; box-shadow: 0 4px 6px rgba(0,0,0,0.1); } nav { margin-top: 1rem; } nav a { color: white; text-decoration: none; margin: 0 1rem; padding: 0.5rem 1rem; border-radius: 4px; transition: background-color 0.3s; } nav a:hover { background-color: rgba(255,255,255,0.2); } main { max-width: 1200px; margin: 2rem auto; padding: 0 1rem; } .welcome { background: white; padding: 2rem; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); margin-bottom: 2rem; } .recent-posts { background: white; padding: 2rem; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); } footer { text-align: center; padding: 1.5rem; background: #333; color: white; margin-top: 2rem; }2.5 PHP后端功能
创建简单的文章管理系统:
<?php // get_posts.php $servername = "localhost"; $username = "blog_user"; $password = "your_password"; $dbname = "myblog_db"; // 创建连接 $conn = new mysqli($servername, $username, $password, $dbname); // 检查连接 if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } // 查询最新文章 $sql = "SELECT id, title, created_at, excerpt FROM posts ORDER BY created_at DESC LIMIT 5"; $result = $conn->query($sql); if ($result->num_rows > 0) { echo "<ul class='post-list'>"; while($row = $result->fetch_assoc()) { echo "<li>"; echo "<h4><a href='posts/post.php?id=" . $row["id"] . "'>" . $row["title"] . "</a></h4>"; echo "<p>" . $row["excerpt"] . "</p>"; echo "<small>发布时间: " . $row["created_at"] . "</small>"; echo "</li>"; } echo "</ul>"; } else { echo "<p>暂无文章</p>"; } $conn->close(); ?>2.6 JavaScript交互功能
// main.js document.addEventListener('DOMContentLoaded', function() { // 暗色模式切换 const darkModeToggle = document.createElement('button'); darkModeToggle.textContent = '🌙 暗色模式'; darkModeToggle.style.position = 'fixed'; darkModeToggle.style.top = '20px'; darkModeToggle.style.right = '20px'; darkModeToggle.style.padding = '10px 15px'; darkModeToggle.style.borderRadius = '5px'; darkModeToggle.style.border = 'none'; darkModeToggle.style.cursor = 'pointer'; darkModeToggle.style.backgroundColor = '#667eea'; darkModeToggle.style.color = 'white'; document.body.appendChild(darkModeToggle); darkModeToggle.addEventListener('click', function() { document.body.classList.toggle('dark-mode'); if (document.body.classList.contains('dark-mode')) { document.body.style.backgroundColor = '#1a1a1a'; document.body.style.color = '#f0f0f0'; darkModeToggle.textContent = '☀️ 亮色模式'; } else { document.body.style.backgroundColor = '#f5f5f5'; document.body.style.color = '#333'; darkModeToggle.textContent = '🌙 暗色模式'; } }); // 文章搜索功能 const searchBox = document.createElement('input'); searchBox.type = 'text'; searchBox.placeholder = '搜索文章...'; searchBox.style.marginLeft = '1rem'; searchBox.style.padding = '0.5rem'; searchBox.style.borderRadius = '4px'; searchBox.style.border = '1px solid #ddd'; const nav = document.querySelector('nav'); nav.appendChild(searchBox); searchBox.addEventListener('input', function(e) { const searchTerm = e.target.value.toLowerCase(); const posts = document.querySelectorAll('.post-list li'); posts.forEach(post => { const text = post.textContent.toLowerCase(); post.style.display = text.includes(searchTerm) ? 'block' : 'none'; }); }); });3. Hive元数据库安装
3.1 环境要求
在安装Hive之前,需要确保虚拟机已安装以下组件:
- Java JDK 8或更高版本
- Hadoop(HDFS和YARN)
- MySQL或PostgreSQL(作为元数据库)
3.2 安装步骤
# 1. 下载Hive wget https://downloads.apache.org/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz 2. 解压到指定目录 tar -xzf apache-hive-3.1.3-bin.tar.gz -C /usr/local/ cd /usr/local ln -s apache-hive-3.1.3-bin hive 3. 配置环境变量 echo 'export HIVE_HOME=/usr/local/hive' >> ~/.bashrc echo 'export PATH=$PATH:$HIVE_HOME/bin' >> ~/.bashrc source ~/.bashrc 4. 配置Hive cd $HIVE_HOME/conf cp hive-default.xml.template hive-site.xml cp hive-env.sh.template hive-env.sh cp hive-log4j2.properties.template hive-log4j2.properties3.3 配置MySQL作为元数据库
# 1. 安装MySQL客户端和服务器 sudo yum install mysql-server mysql -y sudo systemctl start mysqld sudo systemctl enable mysqld 2. 创建Hive元数据库 mysql -u root -p 输入密码后执行以下SQL CREATE DATABASE metastore_db; CREATE USER 'hiveuser'@'localhost' IDENTIFIED BY 'hivepassword'; GRANT ALL PRIVILEGES ON metastore_db.* TO 'hiveuser'@'localhost'; FLUSH PRIVILEGES; EXIT;3.4 配置hive-site.xml
<!-- hive-site.xml 关键配置 --> <configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost/metastore_db?createDatabaseIfNotExist=true</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</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> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> </property> <property> <name>hive.exec.scratchdir</name> <value>/tmp/hive</value> </property> </configuration>3.5 下载MySQL JDBC驱动
# 下载MySQL连接器 wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.33.tar.gz tar -xzf mysql-connector-java-8.0.33.tar.gz cp mysql-connector-java-8.0.33/mysql-connector-java-8.0.33.jar $HIVE_HOME/lib/3.6 初始化元数据库并启动Hive
# 初始化元数据库 schematool -dbType mysql -initSchema 启动Hive CLI hive 在Hive中测试 hive> CREATE DATABASE mydb; hive> USE mydb; hive> CREATE TABLE users (id INT, name STRING, age INT); hive> SHOW TABLES; hive> DESCRIBE users;4. 遇到的问题与解决方案
4.1 网站搭建常见问题
- Apache无法启动:检查80端口是否被占用,使用
sudo netstat -tlnp | grep :80 - PHP无法连接MySQL:确保安装了php-mysqlnd扩展,并重启Apache
- 权限问题:确保
/var/www/html目录有正确的读写权限
4.2 Hive安装常见问题
- schematool初始化失败:检查MySQL服务是否运行,JDBC驱动是否正确放置
- Hive无法连接Hadoop:确保Hadoop服务正常运行,HDFS可访问
- 内存不足:调整Hive的堆内存设置,修改
hive-env.sh中的HADOOP_HEAPSIZE
5. 总结与展望
通过这次实践,我掌握了在CentOS系统上搭建个人博客网站的全过程,包括Web服务器配置、前端页面设计、后端PHP开发和数据库集成。同时,通过安装Hive元数据库,我对大数据生态系统的组件安装和配置有了更深入的理解。
未来可以进一步优化:
- 为博客添加用户认证和评论系统
- 实现文章分类和标签功能
- 集成Hive与Spark进行数据分析
- 使用Docker容器化部署整个环境
这两个项目虽然技术栈不同,但都体现了Linux环境下软件安装、配置和集成的核心技能,为后续更复杂的企业级应用开发打下了坚实基础。