Análise de sentimento com Flume e Twitter

PRIMEIRA PARTE

Link da documentação oficial do Hadoop:

http://hadoop.apache.org/

Link do meu Github:

https://github.com/toticavalcanti

AVISO:

As 3 aulas a seguir referentes a Análise de sentimento com Flume e Twitter, infelizmente não funciona mais na prática, a máquina cloudera usada na aula ficou desatualizada e foi descontinuada pela empresa.

Mantenho essas aulas na playlist como documentação da experiência realizada.

CONFIGURAÇÃO APP TWITTER

Acessar o endereço abaixo e criar uma App:

https://apps.twitter.com/

Criar login, senha e logar Criar uma nova App clicando em Create New App Definir os detalhes da aplicação: nome, descrição, website, etc Clicar em Create my acess token para gerar as chaves da App para usar na configuração do Flume Adicionar a linha abaixo em /etc/hosts da máquina Cloudera: 199.59.148.138 stream.twitter.com No diretório da máquina CLOUDERA /etc/flume-ng/conf/ criar o arquivo flume_twitter.conf  e inserir o conteúdo a seguir:

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

# Describing/Configuring the source
TwitterAgent.sources.Twitter.type = com.cloudera.flume.source.TwitterSource
#TwitterAgent.sources.Twitter.type=org.apache.flume.source.twitter.TwitterSource
TwitterAgent.sources.Twitter.consumerKey = your consumerKey
TwitterAgent.sources.Twitter.consumerSecret = your consumerSecret
TwitterAgent.sources.Twitter.accessToken = your acsessToken
TwitterAgent.sources.Twitter.accessTokenSecret = your accessTokenSecret
TwitterAgent.sources.Twitter.keywords = @LuizInacioLuladaSilva, @lula, @luladasilva, @luizinácioluladasilva, @lula2018, @JairBolsonaro, @JoãoDoria, @CiroGomes, @AlvaroDias, @ÁlvaroDias, @MarinaSilva, @GeraldoAlckmin, @JoãoDoria, @JoaoDoria, @GuilhermeBoulos, @guilhermeboulos, @JoãoAmoêdo, @JoaoAmoedo,@RodrigoMaia, #eleições2018, #eleição2018, #eleicao2018, #eleicoes2018, #GeraldoAlckmin, #alvarodias, #AlvaroDias, #CiroGomes, #Bolsonaro, #MarinaSilva, #LuizInacioLuladaSilva,#eleicoes, #eleicoes2018, #eleicao2018, #eleicoes2018, #eleicao2018, #GeraldoAlckmin, #alvarodias, #AlvaroDias, #CiroGomes,#Lula, #JoãoDoria, #luladasilva, #GuilhermeBoulos, #guilhermeboulospsol,#joaodoria, #joãodoria, #JoãoAmoêdo, #JoaoAmoedo, #RodrigoMaia

# Describing/Configuring the sink
TwitterAgent.sinks.HDFS.type = hdfs
TwitterAgent.sinks.HDFS.hdfs.path = /twitteranalytics/incremental
TwitterAgent.sinks.HDFS.hdfs.fileType = DataStream
TwitterAgent.sinks.HDFS.hdfs.writeFormat = Text

TwitterAgent.sinks.HDFS.hdfs.filePrefix = twitter-
TwitterAgent.sinks.HDFS.hdfs.rollInterval = 0
TwitterAgent.sinks.HDFS.hdfs.rollSize = 524288
TwitterAgent.sinks.HDFS.hdfs.rollCount = 0
TwitterAgent.sinks.HDFS.hdfs.idleTimeout = 0
TwitterAgent.sinks.HDFS.hdfs.batchSize = 100
TwitterAgent.sinks.HDFS.hdfs.threadsPoolSize = 2
TwitterAgent.sinks.HDFS.hdfs.round = true
TwitterAgent.sinks.HDFS.hdfs.roundUnit = hour

# 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
ESSE ARQUIVO PODE SER BAIXADO EM:

Download do arquivo flume_twitter.conf

COLOQUE O ARQUIVO flume_twitter.conf em /etc/flume-ng/conf/ PELO TERMINAL, USE O COMANDO ABAIXO: cp flume_twitter.conf /etc/flume-ng/conf/ OU SE PREFERIR, USE O WINSCP PARA FAZER ISSO.

PROBLEMA ENCONTRADO DURANTE A EXECUÇÃO DO PROJETO

USANDO org.apache.flume.source.twitter.TwitterSource NA CONFIGURAÇÃO DO AGENTE, O ARQUIVO GERADO É TOTALMENTE ILEGÍVEL.

Objavro.schemaä {"type":"record","name":"Doc","doc":"adoc","fields":[{"name":"id","type":"string"},{"name":"user_friends_count","type":["int","null"]},{"name":"user_location","type":["string","null"]},{"name":"user_description","type":["string","null"]},{"name":"user_statuses_count","type":["int","null"]},{"name":"user_followers_count","type":["int","null"]},{"name":"user_name","type":["string","null"]},{"name":"user_screen_name","type":["string","null"]},{"name":"created_at","type":["string","null"]},{"nme":"text","type":["string","null"]},{"name":"retweet_count","type":["long","null"]},{"name":"retweeted","type":["boolean","null"]},{"name":"in_reply_to_user_id","type":["long","null"]},{"name":"source","type":["string","null"]},{"name":"in_reply_to_status_id","type":["long","null"]},{"name":"media_url_https","type":["string","null"]},{"name":"expanded_url","type":["string","null"]}]} øa >‡Ùó°‚¢ì¢Àß,¤Œ$967438715848200192 ì †¿ ¦ Dani👑 Danimarquez21 (2018-02-24T16:38:58Z @💙💙 https://t.co/I1X88sku4T      ˆ<a href="https://mobile.twitter.com" rel="nofollow">Twitter Lite</a>  ^https://pbs.twimg.com/media/DW0H2moWsAEKuXv.jpg †https://twitter.com/Danimarquez21/status/967438715848200192/photo/1$967438720071819267 ì Mic4mundo òý’€¦     š<a href="http://www.twitter.com" rel="nofollow">Twitter for Windows Phone</a> $967438720067661825 ¶  v ABCD ABCDABCD98 (2018-02-24T16:38:59Z òRT @AwatefMM: ياحبي للكويت وحبي لاهلها   ياجعلي ان شاءالله اسكن فيها يارب     ¤< IMPOSSÍVEL A DESSERIALIZAÇÃO DESSES ARQUIVOS! ERRO: OK Failed with exception java.io.IOException:org.apache.avro.AvroRuntimeException: java.io.IOException: Block size invalid or too large for this implementation: -40 Time taken: 0.156 seconds PARA CONTORNAR O PROBLEMA FOI USADO: TwitterAgent.sources.Twitter.type = com.cloudera.flume.source.TwitterSource AO INVÉS DE: TwitterAgent.sources.Twitter.type = org.apache.flume.source.twitter.TwitterSource MAS, PARA USAR com.cloudera.flume.source.TwitterSource SÃO NECESSÁRIOS DOIS ARQUIVOS: flume-sources-1.0-SNAPSHOT.jar hive-serdes-1.0-SNAPSHOT.jar EU FIZ O BUILD DESSES DOIS ARQUIVOS COMO MOSTRADO EM: https://github.com/cloudera/cdh-twitter-example MAS, PARA FACILITAR, OS ARQUIVOS JÁ ESTÃO PRONTOS NO MEU GITHUB, É SÓ FAZER O DOWNLOAD NOS LINKS ABAIXO: https://github.com/toticavalcanti/Curso_Hadoop/tree/master/Flume/Flume_Twitter/Arquivos_extras/flume-sources-1.0-SNAPSHOT.jar https://github.com/toticavalcanti/Curso_Hadoop/tree/master/Flume/Flume_Twitter/Arquivos_extras/hive-serdes-1.0-SNAPSHOT.jar MAS, SÓ IREMOS PRECISAR DELES NA PRÓXIMA AULA. AGORA CRIE A PASTA /twitteranalytics/ NO HDFS COM O COMANDO: hadoop fs -mkdir -p /twitteranalytics/ SE PREFERIR UTILIZE A INTERFACE WEB PARA CRIAR A PASTA NO HDFS, COMO FOI MOSTRADO NO VÍDEO, EU PARTICULARMENTE PREFIRO USAR O TERMINAL. EM ALGUNS CASOS É NECESSÁRIO ATUALIZAR O DATETIME DA MÁQUINA ANTES DE RODAR O AGENTE, PARA ISSO, USE O COMANDO ABAIXO: sudo ntpdate ntp.ubuntu.com AGORA DIGITE O COMANDO ABAIXO PARA INICIAR O AGENTE FLUME:

flume-ng agent -n TwitterAgent -c conf -f /etc/flume-ng/conf/flume_twitter.conf -Dflume.root.logger=debug,console -n TwitterAgent
PARA PARAR O AGENTE USE: ctrl c

Obrigado

Até a próxima