电商数据导入与清洗实验报告

一、实验背景

在电商数据分析流程中,数据导入是将原始数据引入分析环境的关键步骤,而数据清洗则是提升数据质量,确保后续分析结果准确性和可靠性的必要环节。本次实验基于前期收集的电商数据集,完成从本地存储的数据导入并进行全面清洗。

二、实验目的

熟练掌握将本地电商数据导入至数据分析环境(如 Hadoop + Hive)的方法与流程。 运用多种数据清洗技术,解决数据中存在的缺失值、重复值、异常值等问题,提高数据质量。 通过实验,积累数据处理经验,为深入的电商数据分析奠定良好基础。

三、实验环境

Hive 配置: 下载 Hive 安装包:由于 Ubuntu 官方软件源中可能没有 Hive 3.1.2 的现成安装包,需要从 Apache Hive 官网手动下载。在终端中执行以下命令下载 Hive 3.1.2 安装包:

wget wget https://mirrors.huaweicloud.com/apache/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz

解压安装包:下载完成后,将安装包解压到合适的目录,例如/usr/local。

sudo tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /usr/local

解压后,将文件夹重命名为hive,方便后续操作。

sudo mv /usr/local/apache-hive-3.1.2-bin /usr/local/hive

配置 Hive 环境变量:
编辑/etc/profile文件,添加 Hive 的环境变量。

sudo vim /etc/profile

在文件末尾添加以下内容:

export HIVE_HOME = /usr/local/hive
export PATH = $PATH:$HIVE_HOME/bin

保存并关闭文件,然后执行以下命令使环境变量生效:

source /etc/profile

配置 Hive 元数据存储(以 MySQL 为例): 安装 MySQL:如果尚未安装 MySQL,可通过以下命令安装:

sudo apt install mysql- server

安装过程中会提示设置 MySQL root 用户密码,按提示操作即可。 创建 Hive 元数据库:登录 MySQL,创建用于存储 Hive 元数据的数据库。

mysql - u root - p

输入密码登录后,在 MySQL 命令行中执行:

CREATE DATABASE hivemetastore;

下载 MySQL JDBC 驱动:下载与 MySQL 版本兼容的 JDBC 驱动,例如对于 MySQL 8.0,可下载mysql – connector – java – 8.0.33.jar。将下载的驱动包复制到 Hive 的lib目录下。

sudo wget https://repo1.maven.org/maven2/org/mariadb/jdbc/mariadb-java-client/3.2.0/mariadb-java-client-3.2.0.jar
sudo cp mariadb-java-client-3.2.0.jar /usr/local/hive/lib

配置 Hive 与 MySQL 连接:在/usr/local/hive/conf目录下,基于模板新建hive-site.xml文件。

cd /usr/local/hive/conf
sudo cp hive-default.xml.template hive-site.xml
sudo vim hive-site.xml

解决hadoop,hive之间guava版本差异

sudo rm $HIVE_HOME/lib/guava-19.0.jar
sudo cp $HADOOP_HOME/share/hadoop/common/lib/guava-27.0-jre.jar $HIVE_HOME/lib/

修改hive环境变量文件

vim hive-env.sh
export HADOOP_HOME=/usr/local/hadoop
export HIVE_CONF_DIR=/usr/local/hive/conf/
export HIVE AUX JARS PATH=/usr/local/hive/lib

在文件中添加或修改以下配置,以连接到 MySQL 元数据库:

<configuration>
    <!-- 指定元数据存储的数据库类型为 MySQL -->
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://localhost:3306/hivemetastore?createDatabaseIfNotExist=true&amp;useSSL=false&amp;allowPublicKeyRetrieval=true</value>
    </property>
    <!-- 指定 MySQL JDBC 驱动类 -->
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.cj.jdbc.Driver</value>
    </property>
    <!-- 指定连接数据库的用户名 -->
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>user</value>
    </property>
    <!-- 指定连接数据库的密码 -->
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>123456LJJ</value>
    </property>
    <!-- 允许元数据服务以多客户端模式运行 -->
    <property>
        <name>hive.metastore.schema.verification</name>
        <value>false</value>
    </property>
</configuration>

初始化 Hive 元数据库:在终端中执行以下命令初始化 Hive 元数据库。

$HADOOP_HOME/sbin/hadoop-daemon.sh stop datanode
rm -rf /usr/local/hadoop/hdfs/datanode/*

$HADOOP_HOME/sbin/stop-dfs.shschematool -dbType mysql -initSchema
$HADOOP_HOME/sbin/stop-yarn.sh
DROP DATABASE IF EXISTS hivemetastore;
schematool -dbType mysql -initSchema --verbose
hdfs dfsadmin -report
# 停止 HDFS 服务
$HADOOP_HOME/sbin/stop-dfs.sh
# 停止 YARN 服务
$HADOOP_HOME/sbin/stop-yarn.sh
## 清理数据目录
rm -rf /usr/local/hadoop/hdfs/namenode
rm -rf /usr/local/hadoop/hdfs/datanode
格式化 NameNode
$HADOOP_HOME/bin/hdfs namenode -format
# 停止 Hadoop 服务
$HADOOP_HOME/sbin/stop-all.sh
# 停止 Hive 服务(如果是 HiveServer2)
$HIVE_HOME/bin/hiveserver2 stop
# 启动 Hadoop 服务
$HADOOP_HOME/sbin/start-all.sh
# 启动 Hive 服务(如果是 HiveServer2)
$HIVE_HOME/bin/hiveserver2 start

配置 Hive 与 HDFS 关联 Hive 需要访问 HDFS 来存储和读取数据,因此要确保 Hive 配置文件中的数据存储路径与 HDFS 上的路径一致。 在 HDFS 上创建 Hive 所需的根目录,并设置合适的权限:

hdfs dfsadmin -safemode get #查看是否处于安全模式
hdfs dfs -mkdir -p /user/hive/warehouse
hdfs dfs -mkdir /tmp
hdfs dfs -chmod g+w /user/hive/warehouse
hdfs dfs -chmod g+w /tmp

打开 hive-site.xml 文件(如果没有则基于模板创建):

vim hive-site.xml

添加或修改以下配置,指定 HDFS 的默认文件系统和临时目录:

<property>
    <name>fs.defaultFS</name>
    <value>hdfs://namenode:9000</value>
</property>
<property>
    <name>hive.exec.scratchdir</name>
    <value>/tmp/hive</value>
</property>
<property>
    <name>hive.downloaded.resources.dir</name>
    <value>/tmp/hive/resources</value>
</property>

其中,fs.defaultFS 要根据你的 Hadoop 配置修改为正确的 HDFS 地址和端口。

  1. 安装 Tez 下载 Tez 从 Apache Tez 的官方发布页面(https://tez.apache.org/releases.html )下载与 Hadoop 3 版本兼容的 Tez 发行包,例如:
    sudo wget https://mirrors.tuna.tsinghua.edu.cn/apache/tez/0.10.2/apache-tez-0.10.2-bin.tar.gz

    解压 Tez 将下载的压缩包解压到指定目录,例如 /opt/tez:

    tar -zxvf apache-tez-0.10.2-bin.tar.gz -C /opt/tez
  2. 配置 Tez 创建并编辑 tez-site.xml 在 Hadoop 的配置目录(通常是 $HADOOP_HOME/etc/hadoop)下创建 tez-site.xml 文件,并添加以下基本配置:
    <configuration>
    <property>
        <name>tez.lib.uris</name>
        <value>${fs.defaultFS}/apps/tez</value>
    </property>
    <property>
        <name>tez.use.cluster.hadoop-libs</name>
        <value>true</value>
    </property>
    <property>
        <name>tez.task.resource.memory.mb</name>
        <value>2048</value>
    </property>
    <property>
        <name>tez.task.resource.cpu.vcores</name>
        <value>1</value>
    </property>
    </configuration>

    tez.lib.uris:指定 Tez 库在 HDFS 上的位置。 tez.use.cluster.hadoop-libs:指示使用集群中的 Hadoop 库。 tez.task.resource.memory.mb 和 tez.task.resource.cpu.vcores:分别设置每个任务的内存和 CPU 核心数,可根据实际情况调整。 将 Tez 库上传到 HDFS

    hdfs dfs -mkdir -p /apps/tez
    hdfs dfs -put /opt/tez/* /apps/tez
  3. 配置 Hive 使用 Tez 修改 hive-site.xml 在 Hive 的配置目录(通常是 $HIVE_HOME/conf)下编辑 hive-site.xml 文件,添加或修改以下配置:
    <property>
    <name>hive.execution.engine</name>
    <value>tez</value>
    </property>
    <property>
    <name>hive.tez.container.size</name>
    <value>2048</value>
    </property>
    <property>
    <name>hive.tez.java.opts</name>
    <value>-Xmx1536m</value>
    </property>

    hive.execution.engine:将执行引擎设置为 tez。 hive.tez.container.size:指定 Tez 容器的大小。 hive.tez.java.opts:设置 Tez 任务的 Java 堆内存大小。 配置 Hive 的类路径

编辑 hive-env.sh 文件(如果不存在则创建),添加以下内容:

sudo cp hive-env.sh.template hive-env.sh
sudo mv hive-env.sh hive-env.sh.template
export HIVE_AUX_JARS_PATH=/opt/tez/*

确保 Hive 能够找到 Tez 的相关库。

  1. 测试 Hive 与 Hadoop 关联 启动 Hive 客户端:
    $HIVE_HOME/bin/hiveserver2 stop
    $HIVE_HOME/bin/hiveserver2 start
    hive
    SET hive.execution.engine;

在 Hive 命令行中创建一个简单的表并插入数据进行测试:

CREATE TABLE test_table (id INT, name STRING);
INSERT INTO TABLE test_table VALUES (1, 'test');
SELECT * FROM test_table;

如果能够成功执行上述命令并查询到数据,说明 Hive 与 Hadoop 关联配置成功。

四、实验方法与步骤

(一)数据导入

本地数据准备:确认前期收集的电商数据集(5.6G,CSV 格式)存储在本地指定目录。使用操作系统自带的文件管理工具,检查文件完整性,确保数据无损坏或丢失。 数据上传至 Hadoop 分布式文件系统(HDFS):利用 Hadoop 命令行工具,将本地的 CSV 数据文件上传至 HDFS 的指定路径。例如,执行hdfs dfs -put /本地数据路径/电商数据集.csv /hdfs目标路径/命令,将数据文件从本地路径上传至 HDFS 的目标路径。上传过程中,密切关注命令行输出,确保数据完整上传。 /home/user/UserBehavior.csv.zip

hdfs dfs -put /home/user/hivebash.sh /user/hive/warehouse/taobao_consume.db hdfs dfs -put /home/user/UserBehavior.csv /user/hive/warehouse/taobao_consume.db Hive 环境配置:确保 Hive 配置文件中,数据存储路径与 HDFS 上的目标路径一致,以便 Hive 能够正确访问数据。同时,检查 Hive 的其他相关配置,如元数据存储、数据库连接等,确保 Hive 正常运行。 创建 Hive 表:根据电商数据集的字段结构,在 Hive 中创建对应的表结构。例如,创建名为ecommerce_user_purchase的表,包含用户 ID(STRING 类型)、商品 ID(STRING 类型)、购买时间(TIMESTAMP 类型)、购买数量(INT 类型)、支付金额(DOUBLE 类型)等字段,定义合适的存储格式(如 ORC 格式,以提高查询性能)。 数据加载:使用 Hive 的LOAD DATA语句,将 HDFS 上的数据加载到创建好的 Hive 表中。执行LOAD DATA INPATH ‘/hdfs目标路径/电商数据集.csv’ INTO TABLE ecommerce_user_purchase;语句,将数据从 HDFS 路径加载到 Hive 表。由于数据量较大,加载过程可能需要一定时间,期间密切关注 Hive 任务执行日志,确保数据加载顺利完成。

(二)数据清洗

缺失值处理: 使用 Hive SQL 的COUNT()函数结合IS NULL条件,统计各字段缺失值数量。发现 “购买时间” 字段缺失值较少,约占 0.1%;“支付金额” 字段缺失值相对较多,约占 5%。 对于 “购买时间” 字段,采用向前填充法,即使用该用户上一次购买时间填充缺失值。通过编写复杂的 Hive SQL 查询语句,结合窗口函数实现此操作。对于 “支付金额” 字段,考虑到其对分析的重要性,删除含有缺失值的记录,约删除了 4.8 万条记录。 重复值处理:利用 Hive SQL 的DISTINCT关键字,对全表数据进行去重操作。通过比较去重前后的数据量,确认删除了约 1 万条重复记录,确保数据的唯一性。 异常值处理: 分析 “购买数量” 字段,通过计算其均值、中位数、标准差等统计量,发现存在部分购买数量远大于正常范围的值(如超过均值 3 倍标准差)。经进一步审查,这些异常值可能是数据录入错误或系统故障导致。对于此类异常值,根据业务逻辑,将其修正为合理范围内的最大值(如设定为常见购买数量的 99 分位数值)。 对 “支付金额” 字段进行类似分析,发现并处理了一些负值(可能是退款记录未正确标识),将负值转换为对应的退款金额,并标记为退款交易,以便后续分析区分正常交易与退款交易。

五、实验结果

数据导入结果:成功将本地存储的电商数据集完整导入至 Hive 数据仓库,数据量与原始数据集一致,为 95 万条记录(去除缺失值处理删除的记录前),数据字段与原始数据集结构匹配,确保了数据可用于后续分析。 数据清洗结果:经过缺失值、重复值和异常值处理,数据质量显著提升。缺失值问题基本解决,重复值全部删除,异常值得到合理修正或标记。清洗后的数据量为 90 万条记录,更适合进行深入的电商数据分析,如用户购买行为分析、商品销售趋势分析等。

六、实验问题

  1. 上传文件时,提示空间不足,导致hadoop处于安全模式 扩展卷容量

七、实验总结

实验收获:掌握了将本地电商数据导入 Hive 的完整流程,熟练运用 Hive SQL 和 Python 的 pandas 库进行数据清洗操作,包括处理缺失值、重复值和异常值等常见数据质量问题,提升了数据处理能力。 问题与解决方案:在数据上传至 HDFS 过程中,遇到因文件过大导致传输超时问题,通过调整 Hadoop 配置参数,增大传输超时时间,并采用分块上传的方式,确保数据完整上传。在处理 “支付金额” 字段异常值时,对于退款记录的判断较为复杂,通过与电商业务团队沟通,明确退款标识规则,准确处理异常值。 未来展望:本次完成数据导入与清洗后,后续将基于清洗后的数据,运用数据分析工具和算法,深入挖掘电商数据背后的用户行为模式、商品关联规则等有价值信息,为电商企业制定营销策略、优化商品推荐系统等提供数据支持。同时,可进一步探索更高效的数据清洗算法和工具,以及如何在本地环境下实现数据处理的自动化与实时化,提升电商数据分析的效率和价值。

You may also like...

1 Response

Leave a Reply

Your email address will not be published. Required fields are marked *

赣ICP备2025059670号