2013-08-31 26 views
0

在AWS上安裝Cloudera。試圖讓它安裝,以便它有多個命名隊列,我可以使用JDBC連接到隊列並執行查詢。使用JDBC連接到Hadoop中的命名隊列

從我已經能夠到目前爲止收集,一旦隊列在那裏,連接到他們與JDBC是相當簡單的,因爲它只是具有格式:

http://<server name>:<port>/<queue name> 

但是,目前還不清楚亂跑看看不同文檔的大量文檔如何設置隊列。看起來,如果你有一個hadoop-site.xml文件,你可以在那裏添加屬性mapred.queue.name和一個逗號分隔的字符串。但Cloudera沒有該文件。它有一個mapred-site.xml,但添加該屬性,然後轉到命令行並要求列出隊列仍然只是返回默認值。

然後我們嘗試使用FairScheduler,但它是基於紗線的新紗線,它具有在指定隊列之間平衡工作的概念。

所以,我在找的是:

  1. 辦法只是創建2個隊列,例如工程和營銷
  2. 表明,一旦我有他們,我可以連接使用JDBC任何一個
  3. 和執行查詢

後,我可以不用擔心使用ACL來進行隊列具有不同的訪問權限數據的不同部分,並可能管理對資源的訪問。現在,只是想表明我可以獲得通過指定隊列公開的數據。

回答

1

事實證明,當你選擇使用它們的調度程序時,你會得到命名隊列。這花了很多研究,因爲在Hadoop的第一個版本中,FairScheduler使用了池而不是隊列,只有CapacityScheduler使用了隊列。在Hadoop 2.x中,新的FairScheduler已經重做以使用隊列。但那仍然是測試版。

0

美好的一天!

在官方文檔中寫道,這些行動可以做的JDBC PARAMS列表「hive_conf_list」扔specifing隊列名稱(https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients#HiveServer2Clients-ConnectionUR ...

在這種情況下,您的連接字符串看起來像:

JDBC :hive2://:/數據庫名; sess_var_list mapred.job.queue.name = your_queue_name

但是,當然,這個解決方案並不適用於我(((

所以我發現這個問題的解決辦法?當你創造Ë通過DriverManager的一個新的連接,你可以在下面的代碼指定的附加屬性, 例如:

java.lang.Class.forName("org.apache.hive.jdbc.HiveDriver"); 
java.util.Properties properties = new Properties(); 
properties.put("mapred.job.queue.name", "queu_name"); 

return java.sql.DriverManager.getConnection(url, properties); 

所以在這種屬性還可以用於創建連接指定闕名。

此解決方案適用於jdbc驅動程序(maven dependency)版本1.1.0