В настоящее время я работаю над расширением функциональности Apache Knox, взаимодействующей с HBase на HDP 2.3.2. Я создал новый шлюз на Apache Knox под названием Decode, чтобы запросить HBase. Шлюз декодирования был построен с использованием шлюза HBase в качестве шаблона. Топологии были отредактированы таким образом, что следующий запрос:Расширение пользовательской службы Apache Knox для запроса нескольких таблиц HBase
curl -ku admin:admin-password -H "Accept: application/json" https://sandbox.hortonworks.com:8443/gateway/default/decode/hbase/MyHBaseTable/HBaseRowKey123*
возвращает данные из Роу 123 (в базе 64)
Есть ли способ изменить rewrite.xml декодирования шлюза и service.xml так, чтобы запрос не нужно будет пройти через Hbase, например:
curl -ku admin:admin-password -H "Accept: application/json" https://sandbox.hortonworks.com:8443/gateway/default/decode/MyHBaseTable/HBaseRowKey123*
Я понимаю, это может показаться странным, чтобы не использовать в встроенного шлюза HBase но общая цель состоит в том, чтобы расширить шлюз Decode таким образом, что он будет иметь возможность запрашивать несколько таблиц и/или несколько строк данных из HBase, а не по одной строке за раз.
В настоящее время мой Decode rewrite.xml является:
<rules>
<rule dir="IN" name="DECODE/decode/inbound" pattern="*://*:*/**/decode/{path=**}?{**}">
<rewrite template="{$serviceUrl[DECODE]}/{path=**}?{**}"/>
</rule>
<rule dir="IN" name="DECODE/decode/inbound" pattern="*://*:*/**/decode{**}">
<rewrite template="{$serviceUrl[DECODE]}/{path=**}?{**}"/>
</rule>
<filter name="WEBHBASE/webhbase/status/outbound">
<content type="*/json">
<apply path="$[LiveNodes][*][name]" rule="WEBHBASE/webhbase/address/outbound"/>
</content>
<content type="*/xml">
<apply path="/ClusterStatus/LiveNodes/Node/@name" rule="WEBHBASE/webhbase/address/outbound"/>
</content>
</filter>
</rules>
и service.xml:
<service role="DECODE" name="decode" version="0.0.1">
<routes>
<route path="/decode/**"/>
<route path="/decode/?**">
<rewrite apply="WEBHBASE/webhbase/headers/outbound" to="response.headers"/>
</route>
<route path="/decode/**?**">
<rewrite apply="WEBHBASE/webhbase/headers/outbound" to="response.headers"/>
</route>
<route path="/decode/status/cluster?**">
<rewrite apply="WEBHBASE/webhbase/status/outbound" to="response.body"/>
</route>
<route path="/decode/*/regions?**">
<rewrite apply="WEBHBASE/webhbase/regions/outbound" to="response.body"/>
</route>
</routes> <dispatch classname="org.apache.hadoop.gateway.hbase.HBaseDispatch"/> </service>
Я ничего не вижу в вашем текущем файле rewrite.xml, который указывает, что «hbase» требуется или ожидается. Когда вы говорите: «Вернет ли данные из строки 123 (на базе 64)», вы говорите, что это работает или что вы намерены работать так? – lmccay