我正在尝试使用使用Hive的Jaspersoft iReport运行一些报告,运行正常,除了我尝试为Hive查询设置减少器数量的情况。我认为这个问题可能适用于使用Hive JDBC设置reducer数量的一般情况。
我该怎么做?
答案 0 :(得分:1)
您不能将2个SQL语句(或HiveQL语句)放入报表查询中。这意味着你不能使用这样的查询字符串:
set mapred.running.reduce.limit = 25;
SELECT name, phone_office, billing_address_city, billing_address_street, billing_address_country FROM accounts;
通常我会考虑将这样的属性放入JDBC连接中。但据我所知,Hive并不支持这一点。但我认为您可以通过将“set”HiveQL语句作为主报表查询来解决此问题。然后将“select”查询作为子数据集。这是报告中的一个片段,我测试了这个想法:
<subDataset name="Accounts">
<queryString language="HiveQL">
<![CDATA[SELECT name, phone_office, billing_address_city, billing_address_street, billing_address_country FROM accounts]]>
</queryString>
<field name="name" class="java.lang.String"/>
<field name="phone_office" class="java.lang.String"/>
<field name="billing_address_city" class="java.lang.String"/>
<field name="billing_address_street" class="java.lang.String"/>
<field name="billing_address_country" class="java.lang.String"/>
</subDataset>
<queryString language="HiveQL">
<![CDATA[set mapred.running.reduce.limit = 25]]>
</queryString>
我确认报告的工作原理如下。我的子数据集就像你期望的那样填充一个Table组件。我没有一个简单的方法来确认它真正限制了减速器的数量......但它应该。 (如果有,请告诉我们!)