日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hive集成HBase详解

發布時間:2024/4/17 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hive集成HBase详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
摘要 Hive提供了與HBase的集成,使得能夠在HBase表上使用HQL語句進行查詢 插入操作以及進行Join和Union等復雜查詢 應用場景 1. 將ETL操作的數據存入HBase 2. HBase作為Hive的數據源 3. 構建低延時的數據倉庫 使用 1.從Hive中創建HBase表
  • 使用HQL語句創建一個指向HBase的Hive表
CREATE TABLE hbase_table_1(key int, value string) //Hive中的表名hbase_table_1 STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' //指定存儲處理器 WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val") //聲明列族,列名 TBLPROPERTIES ("hbase.table.name" = "xyz", "hbase.mapred.output.outputtable" = "xyz"); //hbase.table.name聲明HBase表名,為可選屬性默認與Hive的表名相同, //hbase.mapred.output.outputtable指定插入數據時寫入的表,如果以后需要往該表插入數據就需要指定該值
  • 通過HBase shell可以查看剛剛創建的HBase表的屬性
$ hbase shell HBase Shell; enter 'help<RETURN>' for list of supported commands. Version: 0.20.3, r902334, Mon Jan 25 13:13:08 PST 2010 hbase(main):001:0> list xyz 1 row(s) in 0.0530 seconds hbase(main):002:0> describe "xyz" DESCRIPTION ENABLED {NAME => 'xyz', FAMILIES => [{NAME => 'cf1', COMPRESSION => 'NONE', VE true RSIONS => '3', TTL => '2147483647', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}]} 1 row(s) in 0.0220 seconds
hbase(main):003:0> scan "xyz" ROW COLUMN+CELL 0 row(s) in 0.0060 seconds
  • 使用HQL向HBase表中插入數據
INSERT OVERWRITE TABLE hbase_table_1 SELECT * FROM pokes WHERE foo=98;
  • 在HBase端查看插入的數據
hbase(main):009:0> scan "xyz" ROW COLUMN+CELL 98 column=cf1:val, timestamp=1267737987733, value=val_98 1 row(s) in 0.0110 seconds 2.從Hive中映射HBase
  • 創建一個指向已經存在的HBase表的Hive表
CREATE EXTERNAL TABLE hbase_table_2(key int, value string) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = "cf1:val") TBLPROPERTIES("hbase.table.name" = "some_existing_table", "hbase.mapred.output.outputtable" = "some_existing_table"); 該Hive表一個外部表,所以刪除該表并不會刪除HBase表中的數據 注意
  • 建表或映射表的時候如果沒有指定:key則第一個列默認就是行鍵
  • HBase對應的Hive表中沒有時間戳概念,默認返回的就是最新版本的值
  • 由于HBase中沒有數據類型信息,所以在存儲數據的時候都轉化為String類型
  • 3.多列及多列族的映射 如下表:value1和value2來自列族a對應的b c列,value3來自列族d對應的列 CREATE TABLE hbase_table_1(key int, value1 string, value2 int, value3 int) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ( "hbase.columns.mapping" = ":key,a:b,a:c,d:e" ); INSERT OVERWRITE TABLE hbase_table_1 SELECT foo, bar, foo+1, foo+2 FROM pokes WHERE foo=98 OR foo=100; 4.Hive Map類型在HBase中的映射規則 如下表:通過Hive的Map數據類型映射HBase表,這樣每行都可以有不同的列組合,列名與map中的key對應,列值與map中的value對應 CREATE TABLE hbase_table_1(value map<string,int>, row_key int) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ( "hbase.columns.mapping" = "cf:,:key" ); INSERT OVERWRITE TABLE hbase_table_1 SELECT map(bar, foo), foo FROM pokes WHERE foo=98 OR foo=100; cf為列族,其列名對應map中的bar,列值對應map中的foo
    • 在HBase下查看數據
    hbase(main):012:0> scan "hbase_table_1" ROW COLUMN+CELL 100 column=cf:val_100, timestamp=1267739509194, value=100 98 column=cf:val_98, timestamp=1267739509194, value=98 2 row(s) in 0.0080 seconds
    • 在Hive下查看數據
    hive> select * from hbase_table_1; Total MapReduce jobs = 1 Launching Job 1 out of 1 ... OK {"val_100":100} 100 {"val_98":98} 98 Time taken: 3.808 seconds 注意:由于map中的key是作為HBase的列名使用的,所以map中的key類型必須為String類型 以下映射語句都會報錯 1. CREATE TABLE hbase_table_1(key int, value map<int,int>) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ( "hbase.columns.mapping" = ":key,cf:" ); 原因:map中的key必須是String 2. CREATE TABLE hbase_table_1(key int, value string) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ( "hbase.columns.mapping" = ":key,cf:" ); 原因:當hbase.columns.mapping中的列族后面為空時(形如cf:),說明在Hive中其對應的數據類型為map,而這條語句中對應的是String所以報錯 5.Hive還支持簡單的復合行鍵 如下:創建一張指向HBase的Hive表,行鍵有兩個字段,字段之間使用~分隔 CREATE EXTERNAL TABLE delimited_example(key struct<f1:string, f2:string>, value string) ROW FORMAT DELIMITED COLLECTION ITEMS TERMINATED BY '~' STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ('hbase.columns.mapping'=':key,f:c1'); 6.使用Hive集成HBase表的需注意
  • 對HBase表進行預分區,增大其MapReduce作業的并行度
  • 合理的設計rowkey使其盡可能的分布在預先分區好的Region上
  • 通過set hbase.client.scanner.caching設置合理的掃描緩存
  • ?

    參考資料:

    Hive HBase Integration

    ?

    ?

    轉載于:https://www.cnblogs.com/MOBIN/p/5704001.html

    總結

    以上是生活随笔為你收集整理的Hive集成HBase详解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。