大数据基础-采集文件内容上传到HDFS

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 采集文件内容上传到HDFS

需求

采集目录中已有的文件内容,存储到HDFS

分析

source是要基于目录的,channel建议使用file,可以保证不丢数据,sink使用hdfs

source使用Spooling Directory Source

网络异常,图片无法展示
|

配置Agent

从example.conf 复制一个新的配置文件

网络异常,图片无法展示
|

创建数据目录

网络异常,图片无法展示
|

网络异常,图片无法展示
|

文件配置信息如图

# Name the components on this agent

a1.sources = r1

a1.sinks = k1

a1.channels = c1

# Describe/configure the source

a1.sources.r1.type = spooldir

a1.sources.r1.spoolDir = /data/log/studentDir

# Use a channel which buffers events in memory

a1.channels.c1.type = file

a1.channels.c1.checkpointDir = /data/soft/apache-flume-1.9.0-bin/data/studentDir/checkpoint

a1.channels.c1.dataDirs = /data/soft/apache-flume-1.9.0-bin/data/studentDir/data

# Describe the sink

a1.sinks.k1.type = hdfs

a1.sinks.k1.hdfs.path = hdfs://192.168.197.101:9000/flume/studentDir

a1.sinks.k1.hdfs.filePrefix = stu-

a1.sinks.k1.hdfs.fileType = DataStream

a1.sinks.k1.hdfs.writeFormat = Text

a1.sinks.k1.hdfs.rollInterval = 3600

a1.sinks.k1.hdfs.rollSize = 134217728

a1.sinks.k1.hdfs.rollCount = 0

# Bind the source and sink to the channel

a1.sources.r1.channels = c1

a1.sinks.k1.channel = c1

主要配置checkpointDir和dataDir,

因为这两个目录默认会在用户家目录下生成,

建议修改到其他地方

checkpointDir是存放检查点目录

data是存放数据的目录

最后是sink 因为要向hdfs中输出数据,所以可以使用hdfssink

网络异常,图片无法展示
|

hdfs.path:是必填项,指定hdfs上的存储目录

filePrefix参数:文件前缀,这个属于可选项

writeFormat:建议改为Text,后期Hive和Impala可以操作这份数据

fileType:默认是SequenceFile,还支持DataStream 和 CompressedStream,DataStream 不会对输出 数据进行压缩,CompressedStream 会对输出数据进行压缩,在这里我们先不使用压缩格式的,所以选 择DataStream

hdfs.rollInterval:默认值是30,单位是秒,表示hdfs多长时间切分一个文件,因为这个采集程序是一 直运行的,只要有新数据,就会被采集到hdfs上面,hdfs默认30秒钟切分出来一个文件,如果设置 为0表示不按时间切文件

hdfs.rollSize:默认是1024,单位是字节,最终hdfs上切出来的文件大小都是1024字节,如果设置为0 表示不按大小切文件

hdfs.rollCount:默认设置为10,表示每隔10条数据切出来一个文件,如果设置为0表示不按数据条数 切文件 这三个参数,如果都设置的有值,哪个条件先满足就按照哪个条件都会执行。 在实际工作中一般会根据时间或者文件大小来切分文件,我们之前在工作中是设置的时间和文件大小 相结合,时间设置的是一小时,文件大小设置的128M,这两个哪个满足执行哪个 所以针对hdfssink的配置最终是这样的。

在启动前,我们初始化一份测试数据

网络异常,图片无法展示
|

接来下启动Agent

flume-ng agent --name a1 --conf /data/soft/apache-flume-1.9.0-bin/conf/ --conf-file ../conf/file-to-hdfs.conf -Dflume.root.logger=INFO,console

Flume Agent启动成功,成功将数据文件写入HDFS

网络异常,图片无法展示
|

网络异常,图片无法展示
|

此时发现文件已经生成了,只不过默认情况下现在的文件是 .tmp 结尾的,表示它在被使用,

因为Flume 只要采集到数据就会向里面写,这个后缀默认是由 hdfs.inUseSuffix 参数来控制的。

文件名上还拼接了一个当前时间戳,这个是默认文件名的格式,当达到文件切割时机的时候会给文件改名 字,去掉.tmp 这个文件现在也是可以查看的,里面的内容其实就是class1.dat文件中的内容。

查看文件内容:表明我们此次采集结果是成功的

网络异常,图片无法展示
|

那Flume怎么知道哪些文件是新文件呢?它会不会重复读取同一个文件的数据呢?

我们进入目录:/data/log/studentDir

网络异常,图片无法展示
|

我们发现此时这个文件已经被加了一个后缀 .COMPLETED ,表示这个文件已经被读取过了,所以Flume在 读取的时候会忽略后缀为 .COMPLETED 的文件

接着我们再看一下channel中的数据,因为数据是存在本地磁盘文件中的,所以是可以去看一下的,进入 dataDir指定的目录

网络异常,图片无法展示
|

发现里面有一个 log-1 的文件,这个文件中存储的其实就是读取到的内容,不过在这无法直接查看

现在我们想看一下Flume最终生成的文件是什么样子的,难道要根据配置等待1个小时或者弄一个128M 的文件过来吗, 其实也没必要,我们可以暴力操作一下 停止Agent就可以看到了,当Agent停止的时候就会去掉 .tmp 标志了

那我再重启Agent之后,会不会再给加上.tmp呢,不会了,每次停止之前都会把所有的文件解除占用状 态,下次启动的时候如果有新数据,则会产生新的文件,这其实就模拟了一下自动切文件之后的效果。

网络异常,图片无法展示
|

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
13天前
|
分布式计算 Kubernetes Hadoop
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
78 6
|
13天前
|
消息中间件 分布式计算 关系型数据库
大数据-140 - ClickHouse 集群 表引擎详解5 - MergeTree CollapsingMergeTree 与其他数据源 HDFS MySQL
大数据-140 - ClickHouse 集群 表引擎详解5 - MergeTree CollapsingMergeTree 与其他数据源 HDFS MySQL
32 0
|
14天前
|
存储 分布式计算 资源调度
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(一)
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(一)
60 5
|
14天前
Hadoop-09-HDFS集群 JavaClient 代码上手实战!详细附代码 安装依赖 上传下载文件 扫描列表 PUT GET 进度条显示(二)
Hadoop-09-HDFS集群 JavaClient 代码上手实战!详细附代码 安装依赖 上传下载文件 扫描列表 PUT GET 进度条显示(二)
29 3
|
13天前
|
JSON 分布式计算 大数据
大数据-85 Spark 集群 RDD创建 RDD-Action Key-Value RDD详解 RDD的文件输入输出
大数据-85 Spark 集群 RDD创建 RDD-Action Key-Value RDD详解 RDD的文件输入输出
27 1
|
14天前
|
消息中间件 Java 大数据
大数据-56 Kafka SpringBoot与Kafka 基础简单配置和使用 Java代码 POM文件
大数据-56 Kafka SpringBoot与Kafka 基础简单配置和使用 Java代码 POM文件
47 2
|
14天前
|
设计模式 NoSQL 网络协议
大数据-48 Redis 通信协议原理RESP 事件处理机制原理 文件事件 时间事件 Reactor多路复用
大数据-48 Redis 通信协议原理RESP 事件处理机制原理 文件事件 时间事件 Reactor多路复用
30 2
|
14天前
|
分布式计算 Java Hadoop
Hadoop-09-HDFS集群 JavaClient 代码上手实战!详细附代码 安装依赖 上传下载文件 扫描列表 PUT GET 进度条显示(一)
Hadoop-09-HDFS集群 JavaClient 代码上手实战!详细附代码 安装依赖 上传下载文件 扫描列表 PUT GET 进度条显示(一)
36 2
|
14天前
|
分布式计算 Hadoop 网络安全
Hadoop-08-HDFS集群 基础知识 命令行上机实操 hadoop fs 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件
Hadoop-08-HDFS集群 基础知识 命令行上机实操 hadoop fs 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件
22 1
|
14天前
|
存储 机器学习/深度学习 缓存
Hadoop-07-HDFS集群 基础知识 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件
Hadoop-07-HDFS集群 基础知识 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件
34 1