构建基于Hadoop的数据湖解决方案

一、实验目的

  1. 理解分布式数据存储的基本概念和应用场景。

  2. 学习Hadoop生态系统的架构及其在构建数据湖中的关键作用。

  3. 掌握使用Hadoop和相关工具(如HDFS, Hive)构建简单的数据湖解决方案。

二、实验环境准备

  1. JAVA环境准备:确保Java Development Kit (JDK) 已安装并配置好环境变量。

  2. Hadoop环境准备:安装并配置Hadoop环境,确保Hadoop的各个组件可以在伪分布式模式下运行。

三、实验教材参考

《大数据存储》,谭旭,人民邮电出版社,2022,ISBN 978-7-115-59414-3。

四、实验内容与步骤

1、安装hive

  1. 在官网下载Hive的安装包Index of /dist/hive
  1. 将安装包上传到namenode中的software文件夹中。
  1. 同样上传到datanode的software文件夹中
  1. 查看software目录中的内容
  1. 解压安装包并将文件夹改名为Hive
  1. 修改/etc/profile,添加环境变量

重新加载配置环境文件

  1. 初始化元数据库

2、安装MySQL

  1. 将安装包上传到namenode中的software文件夹中。
  1. 解压MySQL安装包
  1. 卸载系统自带的mariadb
  1. 安装MySQL依赖
  1. 安装MySQL-Client
  1. 安装MySQL-Server
  1. 启动MySQL

启动MySQL服务器

查看服务器状态

设置MySQL开机自启动

  1. 查看MySQL密码

随机生成的密码为:hogN+fA!s16q

  1. 使用密码进入MySQL
  1. 设置新密码:Wzh@5678
  1. 更改密码为简单密码:000000
  1. 进入MySQL

查询user表:SELECT user,host from user;

修改user表,把Hostname表内容修改为%:update user set host="%" where user="root";

刷新:flush privileges;

3、 配置Hive元数据到MySQL

  1. 新建Hive元数据库

(1)登录MySQL

(2)创建Hive元数据库

  1. 将MySQL的JDBC驱动拷贝到Hive的lib目录下
  1. 在$HIVE_HOME/conf目录下新建hive-site.xml文件
XML 复制代码
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
    <!-- jdbc连接的URL -->
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://namenode:3306/metastore?useSSL=false</value>
    </property>
    
    <!-- jdbc连接的Driver-->
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
    </property>
    
	<!-- jdbc连接的username-->
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
    </property>

    <!-- jdbc连接的password -->
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>000000</value>
    </property>

    <!-- Hive默认在HDFS的工作目录 -->
    <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/user/hive/warehouse</value>
    </property>
</configuration>
  1. 初始化Hive元数据库,修改为采用MySQL存储元数据库

schematool -dbType mysql -initSchema

根据报错信息,schematool 在初始化 Hive Metastore Schema 时由于 MySQL 的连接配置问题失败。连接失败的原因:java.sql.SQLNonTransientConnectionException : Public Key Retrieval is not allowed。这是因为 MySQL 的默认身份验证模式(caching_sha2_password)可能与 Public Key Retrieval 相关联,而 JDBC 驱动默认不允许公钥自动检索。

编辑hive-site.xml文件,找到 javax.jdo.option.ConnectionURL 配置,添加 allowPublicKeyRetrieval=true 参数。

  1. 启动
  1. 查看 hdfs dfsadmin -report
  1. 确认safe mode状态

检查namenode是否仍存在 Safe Mode。

强制退出Safe Mode。

确认Safe Mode状态。

  1. 启动Hive
  1. SLF4J错误信息

SLF4J(Simple Logging Facade for Java) 没有找到具体的日志实现库(例如 Logback 或 Log4j),导致它默认使用了"NOP"实现(即不输出日志)。虽然不会影响程序功能,但日志系统无法正常工作。

下载需要的jar文件。

无法解析主机地址。

首先检查是否可以连接网络。

可以连接到网络,检查/etc/resolv.conf文件配置。

文件里没有内容,配置有效的 DNS 服务器。

重新下载:

wgethttps://repo1.maven.org/maven2/org/slf4j/slf4j-log4j12/1.7.30/slf4j-log4j12-1.7.30.jar

wget https://repo1.maven.org/maven2/log4j/log4j/1.2.17/log4j-1.2.17.jar

如果是Hive,则将上述JAR文件下载到Hive的lib目录:

cd /software/hive/lib

重启Hive验证。

4、构建简单的数据湖

使用HDFS命令行工具上传样本数据文件(如CSV格式的交易数据)至HDFS。

学习Hive的基本概念和操作,创建Hive表来映射到HDFS中的数据文件。

  1. 准备数据文件data.csv
  1. 在本地文件系统中,将文件上传到HDFS的/data目录中

hdfs dfs -mkdir -p /data

hdfs dfs -put /software/hadoop/data/data.csv /data

  1. 验证文件是否上传成功

hdfs dfs -ls /data

  1. 启动Hive,创建一个新数据库

CREATE DATABASE IF NOT EXISTS data_lake;

USE data_lake;

  1. 创建Hive表来映射到HDFS中的数据文件

CREATE EXTERNAL TABLE IF NOT EXISTS transactions (

transaction_id INT,

customer_id INT,

amount DOUBLE,

transaction_date STRING

)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY ','

STORED AS TEXTFILE

LOCATION '/data'

TBLPROPERTIES ("skip.header.line.count"="1");

  1. 验证表结构

DESCRIBE transactions;

  1. 检查表内容

SELECT * FROM transactions LIMIT 10;

5、 数据探索与查询

使用Hive执行SQL查询,进行数据探索,如计算总交易量、查询特定条件的交

易记录等。

  1. 查询金额大于100 的交易记录
  1. 按客户统计交易金额

SELECT customer_id, SUM(amount) AS total_amount

FROM transactions

GROUP BY customer_id

ORDER BY total_amount DESC;

  1. 按日期统计交易量,统计每天的交易总金额和交易次数

SELECT transaction_date,

SUM(amount) AS daily_total_amount,

COUNT(transaction_id) AS daily_transaction_count

FROM transactions

GROUP BY transaction_date

ORDER BY transaction_date;

相关推荐
2601_9630162610 分钟前
统一消息与事件调用:如何用微信接口把微信自动化做成稳健中台?
大数据·运维·人工智能·微信·自动化
ljs64827395134 分钟前
VMware 中部署 HDFS 集群环境(Hadoop 3.4.3)完整指南
大数据·hadoop·hdfs
雪碧聊技术9 小时前
Badge 应用场景与落地实践指南
大数据·人工智能
望江东浪10 小时前
我的 Claude Code 效率工具全套配置分享
大数据·elasticsearch·搜索引擎
chaoyuanl11 小时前
现有游乐设施 XR 数字化升级改造方案
大数据·科技·3d·xr·娱乐
LL3344556711 小时前
创业自动化平台怎么选
大数据·人工智能
珠海西格电力12 小时前
云边端协同架构:零碳园区管理系统的技术底座
大数据·运维·人工智能·算法·架构·能源
cc57250265313 小时前
大数据专业是不是热门专业
大数据
汇策研习社13 小时前
StdDev标准差指标深度解析:量化市场波动的核心工具
大数据·经验分享·金融·区块链·fastbull
大大大大晴天14 小时前
Hudi技术内幕: Concurrency Control原理与实践
大数据