在 AWS 上安装 Cloudera。尝试对其进行设置,使其具有多个命名队列,并且我可以使用 JDBC 连接到队列并执行查询。
根据我目前收集到的信息,一旦队列在那里,使用 JDBC 连接到它们就相当简单,因为它只有以下格式:
http://<server name>:<port>/<queue name>
但是,在查看大量不同文档时并不清楚如何首先设置队列。似乎如果你有一个 hadoop-site.xml 文件,你可以进去并添加属性 mapred.queue.name 和一个逗号分隔的字符串。但是 Cloudera 没有那个文件。它确实有一个 mapred-site.xml,但添加该属性然后转到命令行并询问队列列表仍然只是返回默认值。
然后我们尝试使用 FairScheduler,但它是一种新的基于 yarn 的调度器,它具有在命名队列之间平衡工作的概念。
所以我要找的是:
- 一种只创建 2 个队列的方法,例如工程与营销
- 证明一旦我拥有它们,我就可以使用 JDBC 连接到任何一个
- 并执行查询
之后,我可以担心使用 ACL 使队列对数据的不同部分具有不同的访问权限,并可能管理对资源的访问。现在,只是想证明我可以获得通过命名队列公开的数据。
最佳答案
美好的一天!
在官方文档中写道,这些操作可以通过在 jdbc 参数列表“hive_conf_list”中抛出指定队列名称来完成(https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients#HiveServer2Clients-ConnectionUR ...
在这种情况下,您的连接字符串如下所示:
jdbc:hive2://:/dbName;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 依赖项)版本 1.1.0
关于jdbc - 使用 JDBC 连接到 Hadoop 中的命名队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18543553/