HBase Shell 十大花式玩兒法

来源:https://www.cnblogs.com/zpb2016/archive/2020/04/16/12715945.html
-Advertisement-
Play Games

前言: 工欲善其事必先利其器,今天給大家介紹一下HBase Shell十大花式利器,在日常運維工作中,可以試著用起來。 1. 交互模式 也就是我們最常用到的Shell命令行的方式。 2. 非交互模式 與交互模式比較 如果我們想要知道HBase Shell命令執行之後是否成功,那一定要使用非交互模式。 ...


前言:工欲善其事必先利其器,今天給大家介紹一下HBase Shell十大花式利器,在日常運維工作中,可以試著用起來。

1. 交互模式

也就是我們最常用到的Shell命令行的方式。

$ hbase shell

hbase(main):001:0> list

2. 非交互模式

$ echo "describe 'test1'" | hbase shell -n
# 結果輸出到文件
$ echo "describe 'test1'" | hbase shell -n > tmp.log
# 不列印輸出結果
$ echo "describe 'test'" | hbase shell -n > /dev/null 2>&1

與交互模式比較

如果我們想要知道HBase Shell命令執行之後是否成功,那一定要使用非交互模式。因為交互模式執行命令後總是返回0。當執行命令失敗後,非交互模式將返回非0數值。如下示例:

$ echo "error cmd" | hbase shell > /dev/null 2>&1
$ echo $?
0

$ echo "error cmd" | hbase shell -n > /dev/null 2>&1
$ echo $?
1

3. 使用Ruby腳本

$ hbase org.jruby.Main PATH_TO_SCRIPT

我們拿HBase bin目錄下的get-active-master.rb腳本舉例:

#!/usr/bin/env hbase-jruby
include Java
import org.apache.hadoop.hbase.HBaseConfiguration
import org.apache.hadoop.hbase.ServerName
import org.apache.hadoop.hbase.zookeeper.ZKUtil
import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher

# disable debug/info logging on this script for clarity
log_level = org.apache.log4j.Level::ERROR
org.apache.log4j.Logger.getLogger('org.apache.hadoop.hbase').setLevel(log_level)
org.apache.log4j.Logger.getLogger('org.apache.zookeeper').setLevel(log_level)

config = HBaseConfiguration.create

zk = ZooKeeperWatcher.new(config, 'get-active-master', nil)
begin
  master_address = ZKUtil.getData(zk, zk.masterAddressZNode)
  if master_address
    puts ServerName.parseFrom(master_address).getHostname()
  else
    puts 'Master not running'
  end
ensure
  zk.close()
end

執行命令如下:

$ hbase org.jruby.Main get-active-master.rb
xxxxxxxx.xxx.com.cn

4. 使用Bash腳本

示例1:

#!/bin/bash
echo "describe 'test:t1'" | hbase shell -n > tmp.log
status=$?
echo "The status was " $status
if [ $status == 0 ]; then
  echo "The command succeeded"
else
  echo "The command may have failed."
fi

示例2:

#!/bin/bash
arr=('test:t1' 'test:t2')

for table in ${arr[@]}
do 
    echo \'$table\'
    hbase shell << EOF 
    disable '$table'
    drop '$table'
    exit
EOF
done

執行腳本:

$ sh xxx.sh

5. 讀取文本文件

假如我的文本文件是sample_commands.txt,內容如下:

create 'test', 'cf'
list 'test'
put 'test', 'row1', 'cf:a', 'value1'
put 'test', 'row2', 'cf:b', 'value2'
put 'test', 'row3', 'cf:c', 'value3'
put 'test', 'row4', 'cf:d', 'value4'
scan 'test'
get 'test', 'row1'
disable 'test'
enable 'test'
exit

執行命令如下:

$ hbase shell ./sample_commands.txt

6. 執行Java代碼

hbase(main):001:0> import java.util.Date
file:/usr/hdp/2.6.5.0-292/hbase/lib/ruby/jruby-complete-1.6.8.jar!/builtin/javasupport/core_ext/object.rb:99 warning: already initialized constant Date
=> Java::JavaUtil::Date
hbase(main):002:0> Date.new(1218920189000).toString()
=> "Sun Aug 17 04:56:29 CST 2008"

hbase(main):004:0> import java.text.SimpleDateFormat
=> Java::JavaText::SimpleDateFormat
hbase(main):005:0> import java.text.ParsePosition
=> Java::JavaText::ParsePosition
hbase(main):006:0> SimpleDateFormat.new("yy/MM/dd HH:mm:ss").parse("08/08/16 20:56:29", ParsePosition.new(0)).getTime()
=> 1218891389000

hbase(main):003:0>

7. 傳遞VM參數

可以使用HBase_Shell_OPTS環境變數將VM選項傳遞給HBase Shell。可以在環境中設置它,例如編輯~/.bashrc,或者將其設置為啟動HBase Shell命令的一部分。下麵的示例設置了幾個與垃圾回收相關的變數,這些變數只在運行HBase Shell的VM的生存期內使用。該命令應在一行上運行,但為了可讀性,它被\字元打斷。

$ HBASE_SHELL_OPTS="-verbose:gc -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDateStamps \
  -XX:+PrintGCDetails -Xloggc:$HBASE_HOME/logs/gc-hbase.log" hbase shell

8. 配置覆蓋

以下版本hbase-2.0.5/hbase-2.1.3/hbase-2.2.0/hbase-1.4.10/hbase-1.5.0,通過在命令行上傳遞以-D為首碼的鍵/值,可以傳遞或重寫hbase-*.xml中指定的hbase配置,如下所示:

$ hbase shell -Dhbase.zookeeper.quorum=ZK0.remote.cluster.example.org,ZK1.remote.cluster.example.org,ZK2.remote.cluster.example.org -Draining=false
...
hbase(main):001:0> @shell.hbase.configuration.get("hbase.zookeeper.quorum")
=> "ZK0.remote.cluster.example.org,ZK1.remote.cluster.example.org,ZK2.remote.cluster.example.org"
hbase(main):002:0> @shell.hbase.configuration.get("raining")
=> "false"

9. 表變數

HBase 0.95添加了為表提供jruby樣式的面向對象引用的shell命令。以前,作用於表的所有shell命令都有一個過程樣式,該樣式始終將表的名稱作為參數。HBase 0.95引入了將表分配給jruby變數的功能。表引用可用於執行數據讀寫操作,如放置、掃描和獲取,以及管理功能,如禁用、刪除和描述表。
例如,以前您總是指定一個表名:

hbase(main):000:0> create 'test', 'f'
0 row(s) in 1.0970 seconds
hbase(main):001:0> put 'test', 'rold', 'f', 'v'
0 row(s) in 0.0080 seconds
hbase(main):002:0> scan 'test'
ROW                                COLUMN+CELL
 rold                              column=f:, timestamp=1378473207660, value=v
1 row(s) in 0.0130 seconds
hbase(main):004:0> disable 'test'
0 row(s) in 14.8700 seconds
hbase(main):005:0> drop 'test'
0 row(s) in 23.1670 seconds
hbase(main):006:0>

現在,可以將表分配給一個變數,併在jruby shell代碼中使用結果。

hbase(main):007 > t = create 'test', 'f'
0 row(s) in 1.0970 seconds
=> Hbase::Table - t
hbase(main):008 > t.put 'r', 'f', 'v'
0 row(s) in 0.0640 seconds
hbase(main):009 > t.scan
ROW                           COLUMN+CELL
 r                            column=f:, timestamp=1331865816290, value=v
1 row(s) in 0.0110 seconds
hbase(main):038:0> t.disable
0 row(s) in 6.2350 seconds
hbase(main):039:0> t.drop
0 row(s) in 0.2340 seconds

如果表已創建,則可以使用get_table方法將表分配給變數:

hbase(main):011 > create 't','f'
0 row(s) in 1.2500 seconds

=> Hbase::Table - t
hbase(main):012:0> tab = get_table 't'
0 row(s) in 0.0010 seconds

=> Hbase::Table - t
hbase(main):013:0> tab.put 'r1' ,'f', 'v'
0 row(s) in 0.0100 seconds
hbase(main):014:0> tab.scan
ROW                                COLUMN+CELL
 r1                                column=f:, timestamp=1378473876949, value=v
1 row(s) in 0.0240 seconds
hbase(main):015:0>

列表功能也得到了擴展,以便它以字元串形式返回表名列表。然後可以使用jruby根據這些名稱編寫表操作腳本。list_snapshots命令的作用也類似。

hbase(main):016 > tables = list('ns:t.*')
TABLE
t
1 row(s) in 0.1040 seconds

=> #<#<Class:0x7677ce29>:0x21d377a4>
hbase(main):017:0> tables.map { |t| disable t ; drop  t}
0 row(s) in 2.2510 seconds
=> [nil]
hbase(main):018:0>

10. 開啟debug模式

可以在shell中設置調試開關,以便在運行命令時看到更多的輸出,例如更多的異常堆棧跟蹤:
方式一:

hbase(main):007:0> debug
Debug mode is ON

hbase(main):008:0> debug
Debug mode is OFF

方式二:

$ ./bin/hbase shell -d

掃描二維碼關註博主公眾號

轉載請註明出處!歡迎關註本人微信公眾號【HBase工作筆記】


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近發現我們開發環境的 IIS 上的 SSL 證書過期了,為了後面方便維護和更新,搞了一個 powershell 腳本,以後要更新的時候直接跑一下腳本就可以了,所以有了這篇文章 ...
  • 本教程主要介紹如何在Ubuntu 18.04系統上實現Spire.Cloud私有化部署。CentOS 7系統部署請參考 這篇教程。 詳細步驟如下: 一、環境配置 1、關閉防火牆 1)首先查看防火牆狀態 ufw status verbose (非管理員需在最前面加sudo) 預設情況下,防火牆狀態是i ...
  • 基本GCC命令的使用 GCC是一套由GNU項目開發的編程語言編譯器,可處理C語言、 C++、Fortran、Pascal、Objective C、Java等等。GCC通常是 跨平臺軟體的編譯器首選。gcc是GCC套件中的編譯驅動程式名。 若電腦是x86 64位系統,為了編譯成IA 32指令集, 則 ...
  • 目錄和文件都能操作的命令 rm cp mv rm 英文原意:remove files or directories 功能:刪除文件或目錄 語法:rm 選項[ fir] 文件或目錄 cp 英文原意:copy files and directories 功能:複製文件和目錄 語法:cp 選項[ adil ...
  • 本文主要給大家羅列了HBase協處理器載入的三種方式:Shell載入(動態)、Api載入(動態)、配置文件載入(靜態)。其中靜態載入方式需要重啟HBase。 我們假設我們已經有一個現成的需要載入的協處理器Jar包: HelloCoprocessor 0.0.1.jar 。 協處理器載入的三種方式 S ...
  • 一個問題 有一張表test,這張表除了主鍵id外,還有a,b, c 三列 假設給這三個欄位建一個複合索引 index_abc (a, b, c),問,下麵幾種查詢中,哪種查詢會用到索引 index_abc ? 1. 查詢一 select * from test where a > 1000 and ...
  • 前言:當項目上線並穩定運行後,我們就需要考慮自動備份功能了,自動備份固然簡單,但是需要相應的自動刪除來配合使用。 首先我們打開SqlServer管理工具(SSMS),在左側目錄中找到 管理-->右鍵維護計劃-->新建維護計劃 雙擊左側下方目錄:創建 ”清除維護“ 任務 雙擊後打開提示視窗,我們設置 ...
  • 文章目錄 前言 Druid介紹 主要特性 基礎概念 數據格式 數據攝入 數據存儲 數據查詢 查詢類型 架構 運維 OLAP方案對比 使用場景 使用建議 參考 近期主題 前言 項目早期、數據(報表分析)的生產、存儲和獲取業務,MySQL基本上可以滿足需要,但是隨著業務的快速增長,數據量翻至億為單位時, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...