2016-10-19 3 views
2

Я пытаюсь использовать простые команды для доступа к HBase через подпроцесс в Python. Следующий код дает мне неправильный вывод:Использование подпроцесса для доступа к HBase

import subprocess 
cmd=['hbase','shell','list'] 
subprocess.call(cmd) 

Вместо того чтобы дать мне список таблиц в HBase, я получаю следующий вывод:

Usage: hbase [<options>] <command> [<args>] 
Options: 
    --config DIR Configuration direction to use. Default: ./conf 
    --hosts HOSTS Override the list in 'regionservers' file 

Commands: 
Some commands take arguments. Pass no args or -h for usage. 
shell   Run the HBase shell 
hbck   Run the hbase 'fsck' tool 
snapshot  Create a new snapshot of a table 
snapshotinfo Tool for dumping snapshot information 
wal    Write-ahead-log analyzer 
hfile   Store file analyzer 
zkcli   Run the ZooKeeper shell 
upgrade   Upgrade hbase 
master   Run an HBase HMaster node 
regionserver Run an HBase HRegionServer node 
zookeeper  Run a Zookeeper server 
rest   Run an HBase REST server 
thrift   Run the HBase Thrift server 
thrift2   Run the HBase Thrift2 server 
clean   Run the HBase clean up script 
classpath  Dump hbase CLASSPATH 
mapredcp  Dump CLASSPATH entries required by mapreduce 
pe    Run PerformanceEvaluation 
ltt    Run LoadTestTool 
version   Print the version 
CLASSNAME  Run the class named CLASSNAME 

Как дать команду подпроцесса?

+0

Я уверен, что оболочка hbase фактически ожидает интерактивную оболочку. – orion78fr

ответ

0

Если вам нужно получить доступ к HBase от Python, я настоятельно рекомендую вам посмотреть модули happybase.

Я использую их в производстве в течение последних 4 лет - и они упростили наши задачи ETL.

Из коробки они Python 2.x, но с работой несколько минут - вы можете обновить их на Python 3 (полезно, если вы данные UTF-8)

+0

Может ли happybase использоваться для переименования таблицы? Единственное, что я нашел в документации, это то, как читать/писать в HBase – anonymous

+0

. Я прочитал в Документах, что это возможно в Connection, но я не вижу никаких методов, которые позволяют это. Извините –

+0

Я прочитал в Документах, что это возможно в Connection, но я не вижу никаких методов, которые позволяют это. Из быстрого обзора кода - счастливая база использует интерфейс бережливости (http://wiki.apache.org/hadoop/Hbase/ThriftApi), но этот интерфейс не включает моментальный снимок, clone_snapshot и delete_snapshot (шаги, которые я предполагаю, что вы используя для вашего переименования). Таким образом, не дефект в счастливом базовом слое - больше ограничений бережливости. –

0

Разобрался путем. Я создал файл оболочки, содержащий команды:

echo 'list' | hbase shell -n 

Ran this in Python.