TwitterStreaming踩到的那些坑

Databricks依赖的包

在databrikcs上跑代码,最大的好处就是不用麻烦的编译。但是就存在一个问题,就是要自己上传libraries,这个时候版本的选择就成了很大的问题。

一开始我随便的上传了相关的包,然后就是编译不成功,缺三少四的。推荐一个网站,根据下面的compile dependencies来下载你需要的包。注意scala的版本也要选择。

比如说这里,选择了Twitter4j Stream » 4.0.4,下面就会显示,就同时下载所依赖的包,下载同样的版本。

shoufei

时区不同步的问题

在我折腾了n久终于把包弄对了以后,新的问题出现了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
401:Authentication credentials (https://dev.twitter.com/pages/auth) were missing or incorrect. Ensure that you have set valid consumer key/secret, access token/secret, and the system clock is in sync.
<html>\n<head>\n<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>\n<title>Error 401 Unauthorized</title>
</head>
<body>
<h2>HTTP ERROR: 401</h2>
<p>Problem accessing '/1.1/statuses/filter.json'. Reason:
<pre> Unauthorized</pre>
</body>
</html>
Relevant discussions can be found on the Internet at:
http://www.google.co.jp/search?q=1169356e or
http://www.google.co.jp/search?q=c04b39e1
TwitterException{exceptionCode=[1169356e-c04b39e1], statusCode=401, message=null, code=-1, retryAfter=-1, rateLimitStatus=null, version=4.0.4}
at twitter4j.HttpClientImpl.handleRequest(HttpClientImpl.java:164)
at twitter4j.HttpClientBase.request(HttpClientBase.java:57)
at twitter4j.HttpClientBase.post(HttpClientBase.java:86)
at twitter4j.TwitterStreamImpl.getFilterStream(TwitterStreamImpl.java:346)
at twitter4j.TwitterStreamImpl$8.getStream(TwitterStreamImpl.java:322)
at twitter4j.TwitterStreamImpl$TwitterStreamConsumer.run(TwitterStreamImpl.java:552)

说是授权有问题,但是我已经设置好了各种钥匙了啊。所以应该是the system clock is in sync,时钟不同步的原因吧。

看了一下我现在时间是中午12点,但是databricks上的时间确实上午4点,然后Twitter上我的时区又是US。这差别也太大了吧。

算了一下databricks上的时区应该是london的时间,所以在twitter上把时区改成了london时间。

问题解决!!

java.lang.NoClassDefFoundError: org/apache/spark/Logging

这个问题也是坑了好久,我去搜到了这个logging的包把它也弄上去了,但是还是跑不出结果。

然后看到了这个网页,发现可能是同一个问题。

databricks上默认的Spark版本为2.1.0版本,然而在spark 1.5.2版本之后 org/apache/spark/Logging 已经被移除了。而且在前面下载依赖的那些包还都是1.6.3版本的。好吧还是版本问题

所以在databricks里把版本改成了Spark 1.6.3-db2 (Hadoop 2, Scala 2.10),然后问题就解决了。

总结一下,就是databricks很方便,包的选择要谨慎啊!