2016-09-23 63 views
1

插入和查詢大量的數據我必須建立與Java和Hadoop的系統來處理大量的數據處理(JSON格式)的要求。我要創建的系統包括向文件存儲(無論是HDFS還是數據庫)插入數據並查詢處理後的數據的Java Hadoop的JSON格式

我大致瞭解如何使用Hadoop MapReduce查詢用戶需要的數據。 但是有一件事讓我感到困惑的是我該如何插入數據。我應該使用HDFS並使用Hadoop API使用Java插入文件嗎?還是使用其他工具(例如HBase,Relational Database,NoSQL Database)來插入數據,以便Hadoop MapReduce將從我將使用的其他工具中獲取輸入數據更好?

請指教。

非常感謝您

+2

這要看你的「處理的數據」是哪裏來的?如果它只是一些文件,那麼你可以使用'hadoop fs -put '。如果從另一個系統來那麼你可以使用其他工具,如卡夫卡/水槽/星火/等 –

+0

其實,大的圖景是我的Java應用程序將寫入日誌上的WEP應用,約200日誌記錄的進程JSON格式的服務器端文件( /秒)。減少記錄文件的地圖將分開完成,手動(不通過應用程序中的某些功能)。我讀過使用帶有hadoop API的java編寫HDFS,但是使用hadoop API同時寫入一個文件是否是線程安全的?或者我應該使用其他工具來編寫日誌文件? –

+1

不,它不會是線程安全的,寫入單個文件的多個進程將帶來痛苦的世界。你可以1)管理你自己的線程。 2)看看[Apache Flume](https://flume.apache.org/index.html)。它有一個[HTTP源](https://flume.apache.org/FlumeUserGuide.html#http-source)或3)寫出200個文件,然後減少它們 –

回答

1

我會建議你使用HDFS/HIVE/JSONSerde方法。

解決方案大綱會是什麼樣子。

  1. 存儲在HDFS的JSON數據。
  2. 創建外部表使用蜂巢和使用jsonSerde到JSON數據映射到表的列。
  3. 使用hiveQL查詢您的數據。

在上面的解決方案中,由於配置單元是在架構上讀取的,因此您每次查詢表時都會解析您的json數據。

但是,如果你想一次分析數據,如果您有批次(每週,每月)到達的數據,這將是很好的一次分析數據,並創建一個臨時表。可用於頻繁查詢以避免serde重複解析。

我有一個例子,在創建:Hadoopgig