2014-11-03 77 views
3

我是Hadoop的新手。我對我的數據運行了縮減地圖,現在我想查詢它,以便將其放入我的網站。 Apache Hive是最好的方法嗎?我將不勝感激任何幫助。如何從HDFS獲取數據?蜂巢?

回答

3

請記住,Hive是一個批處理系統,它在內部將SQL語句轉換爲一堆MapReduce作業,其中包含階段構建。此外,Hive是一個高延遲系統,即基於您在幾分鐘到幾小時甚至幾天內處理複雜查詢的數據集大小。

因此,如果您想在您的網站中提供MapReduce作業輸出的結果,那麼強烈建議您使用sqoop將結果導出回RDBMS,然後從中取出。或者,如果數據本身很大並且不能導出回RDBMS。然後你可以想到的另一個選擇是使用NoSQL系統,如HBase

0

如果你只是想從HDFS獲取數據,那麼是的,你可以通過Hive來實現。 但是,如果您的數據已經組織(例如,在列中),您將從中獲益最多。我們舉一個例子:map-reduce作業生成一個名爲wordcount.csv的csv文件,其中包含兩行:word和count。這個csv文件在HDFS上。

現在讓我們假設你想知道單詞「gloubiboulga」的出現。你可以簡單地通過下面的代碼實現這一點:

CREATE TABLE data 
(
    word STRING, 
    count INT, 
    text2 STRING 
) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ","; 

LOAD DATA LOCAL INPATH '/wordcount.csv' 
OVERWRITE INTO TABLE data; 

select word, count from data where word=="gloubiboulga"; 

請注意,雖然這種語言看起來像高SQL,你還是要了解它的幾件事情。

1

歡迎來到Hadoop!

高度建議您觀看Cloudera Essentials for Apache Hadoop | Chapter 5: The Hadoop Ecosystem並熟悉從HDFS羣集傳輸入站和出站數據的不同方法。該視頻是易於觀察和描述優勢/劣勢每個工具,但是這個大綱應該給你的Hadoop生態系統的基礎:

  1. Flume - 數據集成和平面文件導入到HDFS。專爲異步數據流(例如日誌文件)而設計。分佈式,可擴展和可擴展。支持各種端點。允許在加載到HDFS之前對數據進行預處理。
  2. Sqoop - 結構化數據(RDBMS)和HDFS的雙向傳輸。允許向HDFS增量導入。 RDBMS必須支持JDBC或ODBC。
  3. Hive - 類似於SQL的Hadoop接口。需要表格結構。 JDBC和/或ODBC是必需的。
  4. Hbase - 允許HDFS交互式訪問。位於HDFS之上並將結構應用於數據。允許隨機讀取,與羣集水平縮放。不是完整的查詢語言;只允許獲取/放置/掃描操作(可與Hive和/或Impala一起使用)。行鍵索引僅適用於數據。不使用Map Reduce範例。
  5. Impala - 與Hive類似,它是用於查詢存儲在HDFS中的大量數據的高性能SQL引擎。不使用Map Reduce。蜂巢的好選擇。
  6. Pig - 用於轉換大型數據集的數據流語言。允許在運行時定義的架構。PigServer(Java API)允許編程訪問。

注意:我假設您嘗試讀取的數據已經存在於HDFS中。但是,Hadoop生態系統中的一些產品可能對您的應用程序有用或作爲一般參考,因此我將它們包括在內。