1. 程式人生 > >使用hive讀取hbase資料

使用hive讀取hbase資料

(1) 建立hbase識別的表
CREATE TABLE hbase_table_1(key int, value string) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val") TBLPROPERTIES ("hbase.table.name" = "xyz");
hbase.table.name 定義在hbase的table名稱,多列時,data:1,data:2;多列族時,data1:1,data2:1;
hbase.columns.mapping 定義在hbase的列族,裡面的:key 是固定值而且要保證在表pokes中的foo欄位是唯一值

建立有分割槽的表

CREATE TABLE hbase_table_1(key int, value string)  partitioned by (day string) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val") TBLPROPERTIES ("hbase.table.name" = "xyz");

不支援表的修改
會提示不能修改非本地表。
hive> ALTER TABLE hbase_table_1 ADD PARTITION (day = '2012-09-22');
FAILED: Error in metadata: Cannot use ALTER TABLE on a non-native table FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask 


(2) 使用sql匯入資料
新建hive的資料表
create table pokes(foo int,bar string)row format delimited fields terminated by ',';
批量匯入資料
load data local inpath '/home/1.txt' overwrite into table pokes;

1.txt檔案的內容為 
1,hello 
2,pear 
3,world

使用sql匯入hbase_table_1

<span style="color: rgb(255, 0, 0);">SET hive.hbase.bulk=<span class="code-keyword" style="background-color: inherit;">true</span>;</span>

insert overwrite table hbase_table_1 select * from pokes;

匯入有分割槽的表

insert overwrite table hbase_table_1  partition (day='2012-01-01') select * from pokes;

(3) 檢視資料 
hive> select * from hbase_table_1;
OK
1 hello
2 pear
3 world

(注:與hbase整合的有分割槽的表存在個問題  select * from table查詢不到資料,select key,value from table可以查到資料)

(4)登入Hbase去檢視資料
hbase shell

hbase(main):002:0> describe 'xyz' 
DESCRIPTION ENABLED {NAME => 'xyz', FAMILIES => [{NAME => 'cf1', BLOOMFILTER => 'NONE', REPLICATION_S true 
COPE => '0', COMPRESSION => 'NONE', VERSIONS => '3', TTL => '2147483647', BLOCKSI 
ZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}]} 
1 row(s) in 0.0830 seconds
hbase(main):003:0> scan 'xyz'
ROW COLUMN+CELL 
1 column=cf1:val, timestamp=1331002501432, value=hello 
2 column=cf1:val, timestamp=1331002501432, value=pear 
3 column=cf1:val, timestamp=1331002501432, value=world

這時在Hbase中可以看到剛才在hive中插入的資料了。

7 對於在hbase已經存在的表,在hive中使用CREATE EXTERNAL TABLE來建立
例如hbase中的表名稱為test1,欄位為 a: , b: ,c: 在hive中建表語句為

create external table hive_test (key int,gid map<string,string>,sid map<string,string>,uid map<string,string>) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" ="a:,b:,c:")  TBLPROPERTIES  ("hbase.table.name" = "test1");
在hive中建立好表後,查詢hbase中test1表內容
Select * from hive_test;

OK
1 {"":"qqq"} {"":"aaa"} {"":"bbb"}
2 {"":"qqq"} {} {"":"bbb"}

查詢gid欄位中value值的方法為
select gid[''] from hbase2;
得到查詢結果
Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks is set to 0 since there's no reduce operator
Starting Job = job_201203052222_0017, Tracking URL = http://localhost:50030/jobdetails.jsp?jobid=job_201203052222_0017
Kill Command = /opt/mapr/hadoop/hadoop-0.20.2/bin/../bin/hadoop job -Dmapred.job.tracker=maprfs:/// -kill job_201203052222_0017
2012-03-06 14:38:29,141 Stage-1 map = 0%, reduce = 0%
2012-03-06 14:38:33,171 Stage-1 map = 100%, reduce = 100%
Ended Job = job_201203052222_0017
OK
qqq
qqq

如果hbase表test1中的欄位為user:gid,user:sid,info:uid,info:level,在hive中建表語句為
create external table hive_test(key int,user map<string,string>,info map<string,string>) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" ="user:,info:")  TBLPROPERTIES  ("hbase.table.name" = "test1");

查詢hbase表的方法為
select user['gid'] from hbase2;

 注:hive連線hbase優化,將HADOOP_HOME/conf中的hbase-site.xml檔案中增加配置

 <property>
   <name>hbase.client.scanner.caching</name>
   <value>10000</value>
 </property>

或者在執行hive語句之前執行hive>set hbase.client.scanner.caching=10000;

相關推薦

使用hive讀取hbase資料

(1) 建立hbase識別的表 CREATE TABLE hbase_table_1(key int, value string) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERD

MapReduce 中如何處理HBase中的資料?如何讀取HBase資料給Map?如何將結果儲存到HBase中?

   MapReduce 中如何處理HBase中的資料?如何讀取HBase資料給Map?如何將結果儲存到HBase中? Mapper類:包括一個內部類(Context)和四個方法(setup,map,cleanup,run);     &n

使用MapReduce讀取HBase資料儲存到MySQL

Mapper讀取HBase資料 package MapReduce; import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hbase.CellUtil; import org.apache.hadoop.hbase.client

hive讀取es資料

轉自:https://www.iteblog.com/archives/1857.html  本文將介紹如何通過Hive來讀取中的資料,然後我們可以像操作其他正常Hive表一樣,使用Hive來直接操作中的資料,將極大的方便開發人員。本文使用的各元件版本分別為

hivehbase資料相互關聯

一.使用hive獲取,HBASE中資料 1.create 'hadoop:hbase_hive_human','info' 2.造數 put 'hadoop:hbase_hive_human','1','info:id','1' put 'hadoop:hbase_hive_human','1','

Spark學習-SparkSQL--06-spark讀取HBase資料報異常java.io.NotSerializableException

1.準備工作,安裝好HABSE之後,執行Hbase shell create ‘表名稱’, ‘列名稱1’,’列名稱2’,’列名稱N’ create ‘表名稱’,’列族名稱’ 在hbase中列是可以動態新增的,只需要有個列族就可以了 create

hive結合hbase資料處理解決方案測評二(優化篇)

接上一篇,對hbase引數進行優化,主要是調整與查詢效率相關的引數 count select count(1) from hbase_table; 部分欄位切表 insert overwrite table hive_table select a,b,c,d from hba

Pig指令碼從Hive中load資料並存入到Hbase

1、我們先建一個Hive表test01: create table test01(name String, age int, phone String,province String, city String) ROW FORMAT DELIMITED FIELDS TERMINATED B

Sqoop與HDFS、HiveHbase等系統的資料同步操作

Sqoop與HDFS結合         下面我們結合 HDFS,介紹 Sqoop 從關係型資料庫的匯入和匯出。 Sqoop import        

把kafka資料hbase遷移到hdfs,並按天載入到hive表(hbase與hadoop為不同叢集)

需求:由於我們用的阿里雲Hbase,按儲存收費,現在需要把kafka的資料直接同步到自己搭建的hadoop叢集上,(kafka和hadoop叢集在同一個區域網),然後對接到hive表中去,表按每天做分割槽 一、首先檢視kafka最小偏移量(offset) /usr/local/kafka/bin/k

Java API 讀取HBase資料

Java API 讀取HBase表資料 1. 在使用java api 去獲取資料的時候,先用 hbase shell 展示一下 hbase 中的表。 hbase(main):005:0> scan 'tsdb-uid' ROW

Hive讀取HDFS上面的資料和使用Squirrel客戶端連線Hive

一、把資料從HDFS匯入到hive的表裡 前面已經測試了利用Sqoop把資料從SQL Server匯入到hdfs中,但是分成了好多小檔案,正在思考如何把很多小檔案一起匯入到hive裡面,突然想到可以用*來代替啊。 1.建表 在hive裡面建立好對應的表格  create t

資料之Spark(八)--- Spark閉包處理,部署模式和叢集模式,SparkOnYarn模式,高可用,Spark整合Hive訪問hbase類載入等異常解決,使用spark下的thriftserv

一、Spark閉包處理 ------------------------------------------------------------ RDD,resilient distributed dataset,彈性(容錯)分散式資料集。 分割槽列表,function,dep Op

HBase資料讀取流程解析

  和寫流程相比,HBase讀資料是一個更加複雜的操作流程,這主要基於兩個方面的原因:其一是因為整個HBase儲存引擎基於LSM-Like樹實現,因此一次範圍查詢可能會涉及多個分片、多塊快取甚至多個數據儲存檔案;其二是因為HBase中更新操作以及刪除操作實現都很簡單,更新操作並沒有更新

Hive連線Hbase操作資料

Hive連線Hbase操作資料   版權宣告:本文為博主原創文章,未經博主允許不得轉載。轉載請註明來自http://blog.csdn.net/lr131425 https://blog.csdn.net/lr131425/article/details/72722932 Hi

HBase資料Hive對映

背景:需要將HBase中表某列的值抽取到hive中,在hive中進行ETL的處理 在hive shell中執行如下命令 CREATE EXTERNAL TABLE hbase_table_1(key int, value string) STORED BY 'org.a

通過spark-sql快速讀取hive中的資料

1 配置並啟動 1.1 建立並配置hive-site.xml 在執行Spark SQL CLI中需要使用到Hive Metastore,故需要在Spark中新增其uris。具體方法是將HIVE_CONF/hive-site.xml複製到SPARK_CONF目錄下,然後在該配置檔案中,新增hive.metast

spark從hbase讀取寫入資料

將RDD寫入hbase 注意點: 依賴: 將lib目錄下的hadoop開頭jar包、hbase開頭jar包新增至classpath 此外還有lib目錄下的:zookeeper-3.4.6.jar、metrics-core-2.2.0.jar(缺少會提示hbase Rpc

sparksql讀取hive中的資料儲存到hdfs中

package wondersgroup_0905_Test import org.apache.spark.sql.SparkSession object sparkHive { def main(args: Array[String]): Unit = { //資料庫名稱

資料Spark優化讀取Hbase--region 提高並行數過程詳細解析

一. Hbase 的 region 我們先簡單介紹下 Hbase 的 架構和 region : 從物理叢集的角度看,Hbase 叢集中,由一個 Hmaster 管理多個 HRegionServer,其中每個 HRegionServer 都對應一臺物理機器,一臺 HRegionServer