当前位置: 首页 > 知识库问答 >
问题:

根据文件大小滚动时,将数据复制到 HDFS 需要时间

龙骏
2023-03-14

我有一个用例,我想使用flume将远程文件复制到hdfs中。我还希望复制的文件应与HDFS块大小(128MB/256MB)对齐。远程数据的总大小为33GB。

我使用avro源和接收器将远程数据复制到hdfs中。类似地,在接收端,我正在进行文件大小滚动(128,256)。但是从远程机器复制文件并存储到hdfs(文件大小128/256 MB)中,flume平均需要2分钟。

水槽配置:阿夫罗源(远程机器)

### Agent1 - Spooling Directory Source and File Channel, Avro Sink  ###
# Name the components on this agent
Agent1.sources = spooldir-source  
Agent1.channels = file-channel
Agent1.sinks = avro-sink

# Describe/configure Source
Agent1.sources.spooldir-source.type = spooldir
Agent1.sources.spooldir-source.spoolDir =/home/Benchmarking_Simulation/test


# Describe the sink
Agent1.sinks.avro-sink.type = avro
Agent1.sinks.avro-sink.hostname = xx.xx.xx.xx   #IP Address destination machine
Agent1.sinks.avro-sink.port = 50000

#Use a channel which buffers events in file
Agent1.channels.file-channel.type = file
Agent1.channels.file-channel.checkpointDir = /home/Flume_CheckPoint_Dir/
Agent1.channels.file-channel.dataDirs = /home/Flume_Data_Dir/
Agent1.channels.file-channel.capacity = 10000000
Agent1.channels.file-channel.transactionCapacity=50000

# Bind the source and sink to the channel
Agent1.sources.spooldir-source.channels = file-channel
Agent1.sinks.avro-sink.channel = file-channel

Avro Sink(运行hdfs的机器)

### Agent1 - Avro Source and File Channel, Avro Sink  ###
# Name the components on this agent
Agent1.sources = avro-source1  
Agent1.channels = file-channel1
Agent1.sinks = hdfs-sink1

# Describe/configure Source
Agent1.sources.avro-source1.type = avro
Agent1.sources.avro-source1.bind = xx.xx.xx.xx
Agent1.sources.avro-source1.port = 50000

# Describe the sink
Agent1.sinks.hdfs-sink1.type = hdfs
Agent1.sinks.hdfs-sink1.hdfs.path =/user/Benchmarking_data/multiple_agent_parallel_1
Agent1.sinks.hdfs-sink1.hdfs.rollInterval = 0
Agent1.sinks.hdfs-sink1.hdfs.rollSize = 130023424
Agent1.sinks.hdfs-sink1.hdfs.rollCount = 0
Agent1.sinks.hdfs-sink1.hdfs.fileType = DataStream
Agent1.sinks.hdfs-sink1.hdfs.batchSize = 50000
Agent1.sinks.hdfs-sink1.hdfs.txnEventMax = 40000
Agent1.sinks.hdfs-sink1.hdfs.threadsPoolSize=1000
Agent1.sinks.hdfs-sink1.hdfs.appendTimeout = 10000
Agent1.sinks.hdfs-sink1.hdfs.callTimeout = 200000


#Use a channel which buffers events in file
Agent1.channels.file-channel1.type = file
Agent1.channels.file-channel1.checkpointDir = /home/Flume_Check_Point_Dir
Agent1.channels.file-channel1.dataDirs = /home/Flume_Data_Dir
Agent1.channels.file-channel1.capacity = 100000000
Agent1.channels.file-channel1.transactionCapacity=100000


# Bind the source and sink to the channel
Agent1.sources.avro-source1.channels = file-channel1
Agent1.sinks.hdfs-sink1.channel = file-channel1

两台机器之间的网络连接为686 Mbps。

请有人帮我确定配置或备用配置中是否有问题,这样复制就不会花费太多时间。

共有1个答案

席烨
2023-03-14

两个代理都使用文件通道。因此,在写入HDFS之前,数据已经写入磁盘两次。您可以尝试为每个代理使用一个内存通道,看看性能是否有所提高。

 类似资料:
  • 我想将文件salesjan2009.csv(存储在本地文件系统中,~/input/salesjan2009.csv)复制到HDFS(Hadoop分布式文件系统)主目录中 我编写了这段代码hduser@ubuntu:/usr/local/hadoop$hdfs dfs-copyfromlocal'/home/hduser/desktop/input/salesjan2009.csv'/hdfs-pa

  • 是否有一种已知的方法使用Hadoop api/spark scala在Hdfs上将文件从一个目录复制到另一个目录? 我尝试使用copyFromLocalFile,但没有帮助

  • 我搜索了Firebase:只读&非实时模式,为提高浏览器性能而激活,以及其他一些相关站点。我找不到实时数据库的最大文件限制大小。 我知道,这是非常明显的,我们放的JSON文件越小,我们就越实时。请不要评论说“使用小型的实时数据库”。我想知道实时数据库的最大文件大小。

  • 我使用java数组列表按大小对目录中的文件进行排序&&如何在java中按元素大小对ArrayList进行排序? 我的问题是实现比较器的最佳方式是什么,这样排序会更快?我被告知100K文件的排序应该在几秒钟内完成,而不是在几分钟内,因为文件的大小是长的。是否有更好的方法来实现比较器? null 可以观察到,在20K之后,排序需要几分钟。我有什么建议可以降低排序时间吗? 我还查阅了https://do

  • 我们正在运行以下阶段DAG,对于相对较小的洗牌数据大小(每个任务约19MB),我们经历了较长的洗牌读取时间 一个有趣的方面是,每个执行器/服务器中的等待任务具有等效的洗牌读取时间。这里有一个例子说明了它的含义:对于下面的服务器,一组任务等待大约7.7分钟,另一组等待大约26秒。 这是同一阶段运行的另一个例子。该图显示了3个执行器/服务器,每个执行器/服务器具有相同的洗牌读取时间的统一任务组。蓝色组

  • 我正在尝试创建一个脚本,该脚本将循环txt文件中列出的所有服务,检查服务启动类型是否正确(如果不正确,则更改它),并在需要时启动服务。我不太擅长Powershell,也不会真正从谷歌找到任何有用的东西。 我的文本文件: 我当前的脚本看起来是这样的,目前我能够从文本文件中打印每一个服务,但缺少下一步的信息。 困难的是每个服务都不具有相同的启动类型和状态,因此它更加复杂,例如 服务A需要手动并正在运行