3

このようにテーブルを切り捨てようとしています

list.each{|name| truncate(name) if name.end_with?('abc123')}

動作しません。これにどのようにアプローチしますか?

4

5 に答える 5

4

あなたHBase shellもすることができます:

java_import org.apache.hadoop.hbase.client.HBaseAdmin
java_import org.apache.hadoop.hbase.HBaseConfiguration

admin = HBaseAdmin.new(HBaseConfiguration.create)
admin.listTables.each {|i| t=i.getNameAsString; truncate(t) if t.end_with?('abc123')} 
于 2012-11-12T10:05:38.520 に答える
2

これを行うには、 Python のHappybaseと以下のスクリプトを使用できます (HBase への Thrift 接続も有効にする必要があります)。

import happybase

# String that the table name ends with
string = "abc123"

# Connect to HBase
c = happybase.Connection()

# For each table
for t in c.tables():
  # If the table ends with this string
  if t.endswith(string):
    # Disable and delete the table
    c.disable_table(t)
    c.delete_table(t)
    # Recreate it
    # Make sure to edit the below line with your own column-family structure
    c.create_table(t, {'cf':{}})
    # Print the name of the table
    print (t + " truncated")
于 2012-11-08T23:21:44.107 に答える
1

バッシュで

私は通常、開発したこの Bash ワンライナーを使用して、すべての HBase テーブルを反復処理し、それらを 1 つずつ切り捨てます。

$ for i in $(hbase shell <<<list |& sed -e '/row(s)/,$d;1,/TABLE/d;/SLF4J:/d'); do \
    hbase shell <<<"truncate '$i'"; done

for ループは、このコマンドによって生成されたすべての出力を通過します。

hbase shell <<<list |& sed -e '/row(s)/,$d;1,/TABLE/d;/SLF4J:/d'

これは、hbase shell listコマンドからの出力を取得し、それを解析して、テーブル名だけになるようにします。hbase shell <<<"truncate '..tablename..'"for ループは単純に複数回呼び出します。

ルビーで

HBase のシェルでは、Ruby に完全にアクセスできるため、代わりにこれを行うことができます。

$ echo 'list.each {|t| truncate t}; quit;' | hbase shell
于 2016-04-27T05:02:23.267 に答える
1

上記のSumanの回答を補完するために、倹約を使用した私自身のルビーレーキタスクを次に示します。

# coding: utf-8
namespace :truncate do
  desc 'batch truncate tables'
  task :tables => :environment do

    require 'thrift'

    socket = ::Thrift::Socket.new(Constants.hbase_url, Constants.hbase_port, 5)
    transport = ::Thrift::BufferedTransport.new(socket)
    transport.open

    protocol = ::Thrift::BinaryProtocol.new(transport)

    hbase_conn = Apache::Hadoop::Hbase::Thrift::Hbase::Client.new(protocol)

    # define some columns
    col1 = Apache::Hadoop::Hbase::Thrift::ColumnDescriptor.new(:name => 'cf1', :maxVersions => 1, :inMemory => true)
    col2 = Apache::Hadoop::Hbase::Thrift::ColumnDescriptor.new(:name => 'cf2', :maxVersions => 1, :inMemory => true)

    hbase_conn.getTableNames.each do |table_name|
      if table_name.end_with?('abc123')
        hbase_conn.disableTable(table_name)
        hbase_conn.deleteTable(table_name)
        hbase_conn.createTable(table_name,[col1,col2])
        puts "truncated #{table_name}"
      end
    end

  end
end
于 2012-11-12T07:59:59.943 に答える