构建基于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;

相关推荐
镭速30 分钟前
镭速大文件传输视频文件预览实现原理
大数据·运维·服务器
lisacumt2 小时前
【odbc】odbc连接kerberos认证的 hive和spark thriftserver
hive·hadoop·spark
路边草随风4 小时前
paimon使用腾讯云cosn作为仓库存储的使用方式
java·大数据·flink·云计算·腾讯云
ayt0075 小时前
【Flink系列】10. Flink SQL
大数据·sql·flink
codeBrute5 小时前
Flink的优化技巧
大数据
张某人想退休5 小时前
请简述公司的系统服务架构类型(单体架构、分布式架构、微服务架构、分层架构、集群架构、SOA 架构、中台架构)
分布式·微服务·架构
lovelin+v175030409666 小时前
基于API接口的电商数据可视化探索与实践
大数据·人工智能·爬虫·python·数据分析
昵称难产中6 小时前
浅谈云计算17 | 分布式存储
分布式·网络协议·云原生·系统架构·云计算
WTT00116 小时前
信安大赛-应急响应
大数据·运维·网络·安全·web安全
飞的肖7 小时前
【Elasticsearch】搜索类型介绍,以及使用SpringBoot实现,并展现给前端
大数据·elasticsearch·搜索引擎