Неверный формат файла - PullRequest
0 голосов
/ 28 октября 2018

Я работаю в Cloudera и только начал изучать это.Поэтому я пытался реализовать знаменитый пример в твиттере с помощью flume.Благодаря усилиям я смог передать данные из Twitter, и теперь они сохраняются в файл.После того, как я получил данные, я хочу провести анализ данных в Твиттере.Но проблема в том, что я не могу получить данные из твиттера в таблице.Я успешно создал таблицу "твиты" , но не могу загрузить данные в таблицу.Ниже я дал файл Twitter.conf, запрос на создание внешней таблицы, запрос на загрузку данных, сообщение об ошибке и некоторую часть полученных данных.Пожалуйста, направьте меня туда, где я делаю неправильно.Обратите внимание, что я писал запросы в редакторе HIVE.

Файл Twitter.conf

# Naming the components on the current agent. 
TwitterAgent.sources = Twitter 
TwitterAgent.channels = MemChannel 
TwitterAgent.sinks = HDFS

# Describing/Configuring the source 
TwitterAgent.sources.Twitter.type = org.apache.flume.source.twitter.TwitterSource
TwitterAgent.sources.Twitter.consumerKey = 95y0IPClnNPUTJ1AHSfvBLWes
TwitterAgent.sources.Twitter.consumerSecret = UmlNcFwiBIQIvuHF9J3M3xUv6UmJlQI3RZWT8ybF2KaKcDcAw5
TwitterAgent.sources.Twitter.accessToken = 994845066882699264-Yk0DNFQ4VJec9AaCQ7QTBlHldK5BSK1 
TwitterAgent.sources.Twitter.accessTokenSecret =  q1Am5G3QW4Ic7VBx6qJg0Iv7QXfk0rlDSrJi1qDjmY3mW
TwitterAgent.sources.Twitter.keywords = hadoop, big data, analytics, bigdata, cloudera, data science, data scientiest, business intelligence, mapreduce, data warehouse, data warehousing, mahout, hbase, nosql, newsql, businessintelligence, cloudcomputing



# Describing/Configuring the channel 
TwitterAgent.channels.MemChannel.type = memory 
TwitterAgent.channels.MemChannel.capacity = 10000 
TwitterAgent.channels.MemChannel.transactionCapacity = 100

# Binding the source and sink to the channel 
TwitterAgent.sources.Twitter.channels = MemChannel
TwitterAgent.sinks.HDFS.channel = MemChannel 

# Describing/Configuring the sink 

TwitterAgent.sinks.HDFS.type = hdfs 
TwitterAgent.sinks.HDFS.hdfs.path = /user/cloudera/latestdata/
TwitterAgent.sinks.flumeHDFS.hdfs.fileType = DataStream 
TwitterAgent.sinks.HDFS.hdfs.writeFormat = Text 
TwitterAgent.sinks.HDFS.hdfs.batchSize = 1000
TwitterAgent.sinks.HDFS.hdfs.rollSize = 0 
TwitterAgent.sinks.HDFS.hdfs.rollCount = 10000 

Запрос внешней таблицы и загрузка данных в запрос таблицы

CREATE External  TABLE tweets (


id BIGINT,
   created_at STRING,
   source STRING,
   favorited BOOLEAN,
   retweet_count INT,
   retweeted_status STRUCT<
     text:STRING,
     user:STRUCT<screen_name:STRING,name:STRING>>,
   entities STRUCT<
     urls:ARRAY<STRUCT<expanded_url:STRING>>,
     user_mentions:ARRAY<STRUCT<screen_name:STRING,name:STRING>>,
     hashtags:ARRAY<STRUCT<text:STRING>>>,
   text STRING,
   user STRUCT<
     screen_name:STRING,
     name:STRING,
     friends_count:INT,
     followers_count:INT,
     statuses_count:INT,
     verified:BOOLEAN,
     utc_offset:INT,
     time_zone:STRING>,
   in_reply_to_screen_name STRING
 ) 
 PARTITIONED BY (datehour INT)
 ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
 LOCATION '/user/cloudera/tweets';




LOAD DATA INPATH '/user/cloudera/latestdata/FlumeData.1540555155464'
INTO TABLE `default.tweets`
PARTITION (datehour='2013022516')

Ошибка Когда я пытаюсь загрузить данные в таблицу

Ошибка при обработке оператора: СБОЙ: Ошибка выполнения, код возврата 20013 из org.apache.hadoop.hive.ql.exec.MoveTask.Неправильный формат файла.Пожалуйста, проверьте формат файла.

файл данных Twitter, который я получил

SEQ! Org.apache.hadoop.io.LongWritableorg.apache.hadoop.io.Text� �����R�LX�} H�f�> (�H�Objavro.schema� {"type": "record", "name": "Doc", "doc": "adoc","полей": [{ "имя": "идентификатор", "Тип": "строка"}, { "имя": "user_friends_count", "тип": [ "ИНТ", "нуль"]}, { "имя":" USER_LOCATION», "тип": [ "строка", "нуль"]}, { "имя": "USER_DESCRIPTION", "тип": [ "строка", "нуль"]}, { "имя":"user_statuses_count", "тип": [ "ИНТ", "нуль"]}, { "имя": "user_followers_count", "тип": [ "ИНТ", "нуль"]}, { "имя": "user_name», "тип": [ "строка", "нуль"]}, { "имя": "", "тип user_screen_name": [ "строка", "нуль"]}, { "имя": "created_at","Тип": [ "строка", "нуль"]}, { "имя": "текст", "тип": [ "строка", "нуль"]}, { "имя": тип "retweet_count", "": [" длинный», "нулевой"]}, { "имя": "Процитировал", "тип": [ "логическое", "нуль"]}, { "имя": "in_reply_to_user_id", "тип":[ "длинный", "нулевой"]}, { "имя": "источник", "тип": [ "строка", "нуль"]}, { "имя": "in_reply_to_status_id", "тип": [»длинные «» нюLL "]}, {" имя ":" media_url_https», "тип": [ "строка", "нулевой"]}, { "имя": "expanded_url", "тип": [ "строка", "нулевой"]}]} �y ږ��� w����M ߀ J�� & 1055790978844540929���� gracie ?owehimnothng (2018-10-26T04: 59: 19ZZGIRLS, КОТОРЫЕ МЫ ВЫБРАЛИ, ЧТО ДЖОАН

Прошла 1 неделя и не смог выяснить, в чем заключается решение.Пожалуйста, дайте мне знать, если потребуется дополнительная информация, я предоставлю ее здесь.

1 Ответ

0 голосов
/ 28 октября 2018

Flume не пишет JSON, поэтому JSONSerde - это не то, что вам нужно.

Вам нужно будет настроить эти строки

TwitterAgent.sinks.flumeHDFS.hdfs.fileType = DataStream 
TwitterAgent.sinks.HDFS.hdfs.writeFormat = Text

В настоящий момент Flume пишет файл последовательностей, содержащий Avro

SEQ!org.apache.hadoop.io.LongWritableorg.apache.hadoop.io.Text� �����R�LX� }H�f�>(�H�Objavro.schema�

И Hive может читать Avro как есть, поэтому не ясно, почему вы используете JSONSerde

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...