数据采集问题

数据采集问题

针对flume数据采集 是不是只能采取文本单行的比如json对象数据很大可能跨多行该如何处理   同问下mapreduce默认处理也是单行的数据  如果使用多行的处理  每个json对象的行数不确定该怎么做?

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

刚才回复的一条没显示出来,我再回复一下

针对flume数据采集,单行或者多行无所谓,反正flume是一次采集一行,就算你的一条数据跨行了,也是可以采集到hdfs上的。

关键是在后期处理的时候,如果一个json串跨行了,也就是有多行

默认情况下mapreduce读取文本文件使用的是TextInputFormat,读取的时候是一次读一行,这样在处理数据的时候,这一行数据就不完整了,解析就会出问题

我们在实际工作中使用的时候,可以将json传转成一行,去掉里面的换行符,因为换行符是为了让人看起来更加清晰的,对于程序而言是不需要的。

如果可以确定json串的行数,也就是每一个json串的行数是固定的,那么可以使用NlineTextInputFormat,使用它可以直接一次读取指定行数的数据。

如果无法确定json串的行数,那就不好处理了


  • GRdreamflying 提问者 #1
    实际工作遇到这种json不确定行数的多么?
    2020-09-08 12:55:19
  • GRdreamflying 提问者 #2
    课程后面会有这种情况的演示么
    2020-09-08 12:57:44
  • 实际工作中我没有遇到过这种json行数不确定的情况,课程中没有涉及这种情况的内容
    2020-09-08 12:59:23
徐老师 2020-09-08 12:42:56

flume采集数据是一行一行的采集,多行json对象使用flume可以采集到hdfs上面,只不过后期在处理的时候会有问题

因为mapreduce、spark在读取hdfs中文件的时候,默认使用的是TextInputFormat,它默认是一行一行的读取

所以如果你的json出现了多行,那在处理的时候肯定会有问题,因为我们也不知道这里的一条json会有多少行

在实际工作中,我们需要将一个大的json串写成一行,json内部不需要加换行符就行了,json中加换行符只是为了我们看起来更加清晰,对程序而言是不需要的。

还有一种情况,如果你可以确定你的每一个json串是多少行,可以使用NlineTextInputFormat,它可以指定一次读取多行数据




问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师