数据采集问题
针对flume数据采集 是不是只能采取文本单行的比如json对象数据很大可能跨多行该如何处理 同问下mapreduce默认处理也是单行的数据 如果使用多行的处理 每个json对象的行数不确定该怎么做?
正在回答
刚才回复的一条没显示出来,我再回复一下
针对flume数据采集,单行或者多行无所谓,反正flume是一次采集一行,就算你的一条数据跨行了,也是可以采集到hdfs上的。
关键是在后期处理的时候,如果一个json串跨行了,也就是有多行
默认情况下mapreduce读取文本文件使用的是TextInputFormat,读取的时候是一次读一行,这样在处理数据的时候,这一行数据就不完整了,解析就会出问题
我们在实际工作中使用的时候,可以将json传转成一行,去掉里面的换行符,因为换行符是为了让人看起来更加清晰的,对于程序而言是不需要的。
如果可以确定json串的行数,也就是每一个json串的行数是固定的,那么可以使用NlineTextInputFormat,使用它可以直接一次读取指定行数的数据。
如果无法确定json串的行数,那就不好处理了
flume采集数据是一行一行的采集,多行json对象使用flume可以采集到hdfs上面,只不过后期在处理的时候会有问题
因为mapreduce、spark在读取hdfs中文件的时候,默认使用的是TextInputFormat,它默认是一行一行的读取
所以如果你的json出现了多行,那在处理的时候肯定会有问题,因为我们也不知道这里的一条json会有多少行
在实际工作中,我们需要将一个大的json串写成一行,json内部不需要加换行符就行了,json中加换行符只是为了我们看起来更加清晰,对程序而言是不需要的。
还有一种情况,如果你可以确定你的每一个json串是多少行,可以使用NlineTextInputFormat,它可以指定一次读取多行数据
相似问题
登录后可查看更多问答,登录/注册
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星