2015-12-10 10 views
7

फ़्लम ट्विटर एजेंट का उपयोग करके ट्विटर डेटा स्ट्रीम करके बनाई गई फ़ाइल को पढ़ने और पार्स करने में सक्षम नहीं है, न तो जावा और न ही एरो टूल्स का उपयोग कर। मेरी आवश्यकता है एवरो प्रारूप को जेएसओएन प्रारूप में परिवर्तित करना।फ्लूम ट्विटर एजेंट द्वारा उत्पन्न एवरो टेक्स्ट फ़ाइल जावा में पढ़ा नहीं जा रहा है

जब विधि का उपयोग करने वाली, मैं अपवाद: org.apache.avro.AvroRuntimeException: java.io.IOException: Block size invalid or too large for this implementation: -40

मैं छद्म नोड क्लस्टर में Hadoop वेनिला config उपयोग कर रहा हूँ और Hadoop संस्करण है 2.7.1

Flume संस्करण 1.6.0 है

TwitterAgent.sources=Twitter 
TwitterAgent.channels=MemChannel 
TwitterAgent.sinks=HDFS 
TwitterAgent.sources.Twitter.type=org.apache.flume.source.twitter.TwitterSource 
TwitterAgent.sources.Twitter.channels=MemChannel 

TwitterAgent.sources.Twitter.consumerKey=xxxxxxxxxxxxxx 
TwitterAgent.sources.Twitter.consumerSecret=xxxxxxxxxxxxxxxx 
TwitterAgent.sources.Twitter.accessToken=xxxxxxxxxxxxxxxx 
TwitterAgent.sources.Twitter.accessTokenSecret=xxxxxxxxxxxxxx 

TwitterAgent.sources.Twitter.keywords=Modi,PMO,Narendra Modi,BJP 

TwitterAgent.sinks.HDFS.channel=MemChannel 
TwitterAgent.sinks.HDFS.type=hdfs 
TwitterAgent.sinks.HDFS.hdfs.path=hdfs://localhost:9000/user/ashish/Twitter_Data 
TwitterAgent.sinks.HDFS.hdfs.fileType=DataStream 
TwitterAgent.sinks.HDFS.hdfs.writeformat=Text 
TwitterAgent.sinks.HDFS.hdfs.batchSize=100 
TwitterAgent.sinks.HDFS.hdfs.rollSize=0 
TwitterAgent.sinks.HDFS.hdfs.rollCount=10 
TwitterAgent.sinks.HDFS.hdfs.rollInterval=30 
TwitterAgent.channels.MemChannel.type=memory 
TwitterAgent.channels.MemChannel.capacity=10000 
TwitterAgent.channels.MemChannel.transactionCapacity=100 
01:

चहचहाना एजेंट और एवरो फ़ाइल को पार्स करने जावा कोड के लिए Flume कॉन्फ़िग फ़ाइल नीचे जुड़ा हुआ है

import org.apache.avro.file.DataFileReader; 
import org.apache.avro.file.FileReader; 
import org.apache.avro.file.SeekableInput; 
import org.apache.avro.generic.GenericDatumReader; 
import org.apache.avro.generic.GenericRecord; 
import org.apache.avro.io.DatumReader; 
import org.apache.avro.mapred.FsInput; 
import org.apache.hadoop.conf.Configuration; 
import org.apache.hadoop.fs.Path; 

import java.io.IOException; 

public class AvroReader { 

    public static void main(String[] args) throws IOException { 
     Path path = new Path("hdfs://localhost:9000/user/ashish/Twitter_Data/FlumeData.1449656815028"); 
     Configuration config = new Configuration(); 
     SeekableInput input = new FsInput(path, config); 
     DatumReader<GenericRecord> reader = new GenericDatumReader<>(); 
     FileReader<GenericRecord> fileReader = DataFileReader.openReader(input, reader); 

     for (GenericRecord datum : fileReader) { 
      System.out.println("value = " + datum); 
     } 

     fileReader.close(); 
    } 
} 

अपवाद स्टैक ट्रेस जो मुझे मिल गया है:

2015-12-09 17:48:19,291 WARN [main] util.NativeCodeLoader (NativeCodeLoader.java:<clinit>(62)) - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 
    value = {"id": "674535686809120768", "user_friends_count": 1260, "user_location": "ユウサリ", "user_description": "「テガミバチ」に登場するザジのbotです。追加してほしい言葉などの希望があればDMでお願いします。リムーブする際はブロックでお願いします。", "user_statuses_count": 47762, "user_followers_count": 1153, "user_name": "ザジ", "user_screen_name": "zazie_bot", "created_at": "2015-12-09T15:56:54Z", "text": "@ill_akane_bot お前、なんか、\u2026すっげー楽しそうだな\u2026", "retweet_count": 0, "retweeted": false, "in_reply_to_user_id": 204695477, "source": "<a href=\"http:\/\/twittbot.net\/\" rel=\"nofollow\">twittbot.net<\/a>", "in_reply_to_status_id": 674535430423887872, "media_url_https": null, "expanded_url": null} 
    Exception in thread "main" org.apache.avro.AvroRuntimeException: java.io.IOException: Block size invalid or too large for this implementation: -40 
     at org.apache.avro.file.DataFileStream.hasNextBlock(DataFileStream.java:275) 
     at org.apache.avro.file.DataFileStream.hasNext(DataFileStream.java:197) 
     at avro.AvroReader.main(AvroReader.java:24) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:497) 
     at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 
    Caused by: java.io.IOException: Block size invalid or too large for this implementation: -40 
     at org.apache.avro.file.DataFileStream.hasNextBlock(DataFileStream.java:266) 
     ... 7 more 

इसके अलावा यदि ऐसा है तो जहां, मैं एवरो फ़ाइल के लिए एवरो स्कीमा देने की आवश्यकता को सही ढंग से पढ़ने के लिए करते हैं?

+0

एचडीएफएस में संग्रहीत आउटपुट फ़ाइल जोड़ने के लिए भूल गए: http://www.megafileupload.com/mq7i/FlumeData.1449730709818 – Ashu

उत्तर

0

मैं भी इस समस्या से मुलाकात की। हालांकि मैं आपकी डेटा फाइल देख सकता हूं जो अब और मौजूद नहीं है। मैंने यह मेरी डेटा फ़ाइल की जांच की है जो आपके साथ समान होनी चाहिए।

मैंने पाया अपने डेटा फ़ाइल पहले से ही एक एवरो कंटेनर फ़ाइल का मतलब है कि वह अपने स्कीमा और डेटा है था। क्योंकि यह सिर्फ एक सिर कि एवरो स्कीमा शामिल शामिल करना चाहिए

एवरो फ़ाइल मुझे मिल बहुत गलत था, लेकिन वास्तव में यह अपने फ़ाइल में अनेक सिर है।

एक और बात कर रहे हैं JSON प्रारूप, क्यों Flume एवरो प्रारूप करने के लिए उन्हें बदलने के पहले से ही ट्वीट्स है?

संबंधित मुद्दे