jdbc - 使用 JDBC 连接到 Hadoop 中的命名队列

标签 jdbc hadoop cloudera

在 AWS 上安装 Cloudera。尝试对其进行设置,使其具有多个命名队列,并且我可以使用 JDBC 连接到队列并执行查询。

根据我目前收集到的信息,一旦队列在那里,使用 JDBC 连接到它们就相当简单,因为它只有以下格式:

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

但是,在查看大量不同文档时并不清楚如何首先设置队列。似乎如果你有一个 hadoop-site.xml 文件,你可以进去并添加属性 mapred.queue.name 和一个逗号分隔的字符串。但是 Cloudera 没有那个文件。它确实有一个 mapred-site.xml,但添加该属性然后转到命令行并询问队列列表仍然只是返回默认值。

然后我们尝试使用 FairScheduler,但它是一种新的基于 yarn 的调度器,它具有在命名队列之间平衡工作的概念。

所以我要找的是:

  1. 一种只创建 2 个队列的方法,例如工程与营销
  2. 证明一旦我拥有它们,我就可以使用 JDBC 连接到任何一个
  3. 并执行查询

之后,我可以担心使用 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/

相关文章:

functional-programming - 原始函数式语言中的 MapReduce 的可扩展性如何?

hadoop - 为什么 Ceph 在仍有可用存储空间时将状态变为 Err

Hadoop Mapreduce tasktrackers 不断忽略 HADOOP_CLASSPATH。 Zookeeper 尝试连接到本地主机而不是集群地址

mysql - mysql 5.6 无法连接jdbc

java - 将查询中的 BIT 作为准备语句中的参数传递

java - Hadoop MapReduce程序连接到数据库

hadoop - 启用kerberos后,historyserver无法读取日志

java - 远程运行 spark 作业

java - 在 sql2o 中插入时出错

sql - 使用 SQLKorma 获取语法 : Failure to execute query with SQL 的异常