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

Aula 09 – Análise de sentimento com Flume / Twitter 01

About The Author
-

2 Comentários

  • Marcos
    Reply

    Olá professor! Estou seguindo sua aula, porém não funcionou o agent. O IP 199.59.148.138 stream.twitter.com não responde e se coloco um nameserver no resolv.conf a cada momento retorna um ip diferente.

    No console aparece esse erro:

    19/08/19 18:06:39 INFO twitter4j.TwitterStreamImpl: Establishing connection.
    19/08/19 18:06:41 INFO twitter4j.TwitterStreamImpl: Connection reset
    19/08/19 18:06:41 INFO twitter4j.TwitterStreamImpl: Waiting for 250 milliseconds
    19/08/19 18:06:41 INFO twitter4j.TwitterStreamImpl: Establishing connection.
    19/08/19 18:06:41 INFO twitter4j.TwitterStreamImpl: Connection reset
    19/08/19 18:06:41 INFO twitter4j.TwitterStreamImpl: Waiting for 500 milliseconds
    19/08/19 18:06:42 INFO twitter4j.TwitterStreamImpl: Establishing connection.
    19/08/19 18:06:42 INFO twitter4j.TwitterStreamImpl: Connection reset

    Não sei como resolver isso.

    Obrigado

    • toticavalcanti
      Reply

      Olá Marcos, algumas pessoas relataram o mesmo problema, não sei o que tá ocorrendo, talvez tenha mudado alguma coisa na app do twitter, ainda não tive tempo de investigar isso.
      Você é a terceira pessoa a relatar isso.
      Quando eu tiver um tempinho vou dá uma olhada pra tentar descobrir.
      Abraço. 🙂

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>