大数据-离线数据处理

本文介绍了使用Hadoop搭建环境,通过Flume收集数据,使用Hive进行离线数据处理和清洗的过程。主要内容包括创建Hive外部表管理HDFS日志,数据清洗,以及通过PV、UV、SV等指标进行业务分析。最后,讨论了如何通过sqoop将数据导入MySQL以及Echarts的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hive离线分析

回顾业务流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1d3cJqbL-1641900824962)(day06_离线数据分析.assets/1628589606864.png)]

准备

搭建环境

1.启动Hadoop

start-all.sh

2.修改flume配置文件

a1.sources  =  r1
a1.sinks  =  k1
a1.channels  =  c1

a1.sources.r1.type  =  avro
a1.sources.r1.bind  =  0.0.0.0
a1.sources.r1.port  =  22222


a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = hdfs://hadoop01:8020/flux/reportTime=%Y-%m-%d
a1.sinks.k1.hdfs.fileType=DataStream
a1.sinks.k1.serializer = text
a1.sinks.k1.serializer.appendNewline = false
a1.sinks.k1.hdfs.useLocalTimeStamp = true

a1.channels.c1.type  =  memory
a1.channels.c1.capacity  =  1000
a1.channels.c1.transactionCapacity  =  100

 

a1.sources.r1.channels  =  c1
a1.sinks.k1.channel  =  c1

3.启动flume

进入flume的根目录

/bin/flume-ng agent -c conf/ -f conf/jtlog_hdfs.conf -n a1 -Dflume.root.logger=INFO,console

4.启动jt-logserver

5.测试

访问locahost/a.jsp和locahost/b.jsp

准备数据

以下方式只做参考,可以自己随意访问产生数据,注意,关闭浏览器代表一个会话终结,清除cookie或者更换浏览器模拟不同用户。

浏览器A:访问3次a.jsp,2次b.jsp关闭浏览器

浏览器B:访问3次a.jsp,2次b.jsp关闭浏览器

浏览器A:访问1次a.jps

浏览器B:访问1次b.jps

注意,flume输出的数据不是一条一个单独文件,而是根据我们的配置及自身的策略来决定何时生成一个完整的文件。离线数据处理

离线数据处理

Hive管理数据

创建flux外部表,管理HDFS中的日志信息。

hive> create database jtlogdb;
 
hive> use jtlogdb;
 
hive> create external table flux (url string,urlname string,title string,chset string,src string,col string,lg string, je string,ec string,fv string,cn string,ref string,uagent string,stat_uv string,stat_ss string,cip string) partitioned by (reportTime string) row format delimited fields terminated by '|' location '/flux';

create external table flux:创建外部表

partitioned by (reportTime string):根据日期分区

row format delimited fields terminated by ‘|’:通过 | 分割数据

location ‘/flux’:管理HDFS中/flux文件夹

url string

urlname string

title string

chset string

src string

col string

lg string

je string

ec string

fv string

cn string

ref string

uagent string

stat_uv string

stat_ss string

cip string

原始数据很多,但并不是所有的数据都跟我们的业务有关。所以。在正式处理之前我们还会对flux表做一次清洗。去除不相干的数据。

查询flux表

select * from flux;

发现并没有数据,这是为什么?—没有添加分区信息。

添加分区信息:

alter table flux add partition (reportTime='2021-12-23') location '/flux/reportTime=2021-12-23';

再次查看整表,发现数据已经被正确管理了。

数据清洗

明细宽表:将原始表按照业务需求拆分成更细粒度的表。

需要的数据字段

reportTime 产生日期

url 访问路径

urlname 页面名称

uvid 访客id

ssid 会话id

sscount 会话编号

sstime 会话时间戳

cip 访客ip

创建数据清洗表:

create table dataclear(reportTime string,url string,urlname string,uvid string,ssid string,sscount string,sstime string,cip string) 
<think>好的,用户想了解大数据离线数据处理的基础知识和入门方法,特别是Hadoop和Spark的相关内容。首先,我需要明确离线数据处理的基本概念,以及Hadoop和Spark在其中的角色。根据引用[2],大数据处理框架包括数据采集、存储、清洗、查询分析和可视化。离线处理属于批处理,通常处理历史数据,如日志分析、ETL作业,引用[4]提到Spark适用于大数据批处理,如日志处理和ETL。 接下来,基础概念部分需要解释离线数据处理的定义、特点,以及Hadoop和Spark的组件。HadoopHDFS和MapReduce是核心,而Spark的RDD和内存计算更适合迭代任务。引用[3]和[5]强调了Java基础的重要性,特别是对于Hadoop开发,而Spark可以使用Scala或Python。 在入门方法中,学习路径可能需要先掌握Java和Linux,然后学习Hadoop和Spark的架构。引用[3]提到Linux基本操作是必要的基础。实践部分应包括环境搭建,比如安装Hadoop和Spark,编写MapReduce作业,以及使用Spark进行数据处理。引用[4]中的Spark应用场景可以作为例子,比如使用Spark SQL进行查询。 工具和框架方面,需要列出Hadoop生态系统组件如Hive、HBase,以及Spark的模块如Spark SQL和MLlib。引用[2]中的数据预处理和存储技术也需涵盖。 最后,生成相关问题时要考虑用户可能的后续疑问,比如性能优化、与其他框架对比,以及实际应用案例。确保引用正确,例如引用[4]关于Spark的应用场景,引用[2]关于处理框架的结构。需要注意使用正确的LaTeX格式,如数学公式用$...$,独立公式用$$...$$,并检查中文表达的流畅性。</think>### 大数据离线数据处理入门指南 #### 一、基础概念 1. **离线数据处理** 指对非实时、大规模历史数据进行的批量处理,典型应用包括日志分析、数据仓库构建、ETL(提取、转换、加载)等。其核心特点是高吞吐量、高延迟(小时/天级)[^2]。 2. **Hadoop与Spark的定位** - **Hadoop**: 基于分布式文件系统(HDFS)和MapReduce计算模型,适合低成本、高可靠性的海量数据存储与批处理。 - **Spark**: 基于内存计算的分布式框架,支持批处理、流处理、机器学习等,性能优于MapReduce,适合迭代计算和交互式查询[^4]。 3. **核心组件** - **Hadoop生态**: - HDFS: 分布式文件存储系统 - MapReduce: 分布式计算框架 - Hive: 数据仓库工具(SQL接口) - HBase: 分布式NoSQL数据库 - **Spark生态**: - Spark Core: 基础计算引擎 - Spark SQL: 结构化数据处理 - Spark MLlib: 机器学习库 #### 二、入门方法 1. **学习路径** - **编程基础**: Java(Hadoop开发核心语言)或Python/Scala(Spark推荐语言)[^3][^5] - **Linux操作**: 掌握基本命令和Shell脚本(Hadoop/Spark部署依赖Linux环境) - **Hadoop入门**: - 理解HDFS架构(NameNode/DataNode) - 编写MapReduce程序(WordCount示例) - 使用Hive进行SQL化查询 - **Spark入门**: - 学习RDD(弹性分布式数据集)概念 - 掌握DataFrame API和Spark SQL - 实践批处理任务(如日志清洗) 2. **实践步骤** ```bash # Hadoop单机环境搭建示例 $ wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz $ tar -xzvf hadoop-3.3.6.tar.gz $ cd hadoop-3.3.6 $ ./bin/hadoop version ``` ```python # Spark批处理示例(Python版) from pyspark.sql import SparkSession spark = SparkSession.builder.appName("BatchDemo").getOrCreate() df = spark.read.csv("hdfs://path/to/input.csv") result = df.groupBy("category").count() result.write.parquet("hdfs://path/to/output") ``` #### 三、工具与框架对比 | 特性 | Hadoop MapReduce | Spark | |-------------------|---------------------------|--------------------------| | 计算模型 | 磁盘迭代 | 内存迭代 | | 延迟 | 高(分钟级) | 低(秒级) | | 适用场景 | 简单ETL、海量数据持久化 | 复杂ETL、机器学习、交互查询 | | 编程复杂度 | 高(需手动实现逻辑) | 低(高阶API支持) | #### 四、性能优化基础 1. **Hadoop调优**: - 调整HDFS块大小(默认128MB) - 优化MapReduce的Combiner和Partitioner - 使用压缩算法(Snappy/LZO)减少I/O开销 2. **Spark调优**: - 合理设置`spark.executor.memory`和并行度 - 利用缓存机制(`persist()`)减少重复计算 - 避免Shuffle操作(如用`reduceByKey`替代`groupByKey`) $$ \text{执行时间} \propto \frac{\text{数据量}}{\text{并行度} \times \text{单任务效率}} $$ #### 五、扩展学习资源 1. **官方文档**: - [Hadoop官方指南](https://hadoop.apache.org/docs/stable/) - [Spark编程指南](https://spark.apache.org/docs/latest/rdd-programming-guide.html) 2. **书籍推荐**: -Hadoop权威指南》 - 《Spark快速大数据分析》
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值