2016-03-13 139 views
-1

嘿,我是一個大數據新人。我正在製作一個系統,它將從社交媒體中獲取數據並處理結果,爲此,我使用apache spark。獲取社交媒體數據的最佳方法是什麼?

以下是我的模型的流程:

  1. 用戶將使用在PHP做了一個網頁保存所需的關鍵字。

  2. 這些關鍵詞我會從社交媒體中獲取數據, 處理數據(例如,情緒和視圖),然後將其提供給最終用戶 。

現在我的困惑是應該如何從社交媒體獲取數據。使用

  • 阿帕奇卡夫卡
  • 阿帕奇水槽
  • 或通過直接調用API twitter4j(只是一個例子)。

雖然我必須學會實現所有三個數據抓取技術,如果我碰巧使用直接api,那麼我可以跳過整個hadoop部分。如果你們可以建議我哪一個更好,那將會很棒。

以上都是我在本地機器上做的。我已經完成了UI部分,現在我正處於需要獲取數據的階段。

謝謝。

回答

0

我想我會提出這個建議。

除非您計劃對其生產服務器執行DDoS操作,否則您可能不想從使用分佈式系統的任何源獲取數據。如果您的集羣設置在一臺路由器後面,您的整個集羣可能會被列入黑名單,因爲所有節點始終達到路由器上的訪問速率限制,這取決於服務器是否強大。 Twitter服務器並不關心100條線程(只要你知道你在做什麼),但任何初創公司都可能馬上找到你。

如果你有一個帶4核的工作站,那麼抓住流數據就足以進行學術研究的初始階段。或者,如果您真的需要大量數據,則可以使用Hadoop將fetcher腳本作爲映射器並且不使用簡化器,從而實現快速簡單的流式傳輸。如果您是Java或Scala的超級巨星,請在Spark的執行程序上的每個vcore上獲取一個獲取線程。

現在,Twitter擁有REST API,這意味着您幾乎可以使用任何編程語言獲取數據。當然,有時使用現有的接口可能更容易,假設它們維護良好,它們幾乎總是更健壯。但我一直都很懶惰。例如,我有時只需要一個示例數據點,因此我只需將curl輸入jq以檢查我想要檢查的內容。

是的,瞭解jq也會爲您節省大量的時間。併成爲一名沒有DDoS的人的紳士。

+0

感謝您的回覆。我將它作爲一個演示目的的項目,所以即使100年的記錄也會爲我做,而且我知道scala。這就是爲什麼我感到困惑,這將是更好的方式。使用其他API或使用卡夫卡或水槽,是的,我很清楚速度限制。所以我的計劃是獲取一些數據進行測試,當它正常工作時,獲取更多的演示數據。 –

+0

@UmeshKaushik我認爲你仍然感到困惑,所以我會讓它變得晶瑩剔透,請不要冒犯它。一旦達到速率限制,無論在多少容器/執行程序中有多少個線程都無關緊要。對於大多數用途,除非您與Twitter達成協議,否則任何分佈式系統(Hadoop/Spark)都非常過分。 – Mai

+0

@UmeshKaushik假設你在Spark上有10個執行器,每個執行器有4個內核,那麼你將運行40個線程。但是,這將達到與4線程Python腳本在單節點進程中相同的速率限制。那麼爲什麼'小數據'就足夠了'大數據'。 – Mai