Hive和Hbase的區(qū)別
Hive:
1. 數(shù)據(jù)倉(cāng)庫(kù)
? Hive的本質(zhì)其實(shí)就相當(dāng)于將HDFS中已經(jīng)存儲(chǔ)的文件在Mysql中做了一個(gè)雙射關(guān)系,以方便使用HQL去管理查詢
2.用于數(shù)據(jù)分析、清洗
? Hive適用于離線的數(shù)據(jù)分析和清洗再榄,延遲較高
3. 基于HDFS,MapReduce
? Hive存儲(chǔ)的數(shù)據(jù)依舊在DataNode上咬摇,編寫的HQL語(yǔ)句終將是轉(zhuǎn)換為MapReduce代碼執(zhí)行陷谱。(不要鉆不需要執(zhí)行MapReduce代碼的情況的牛角尖)
Hbase:
1. 數(shù)據(jù)庫(kù)
? 是一種面向列存儲(chǔ)的非關(guān)系型數(shù)據(jù)庫(kù)迷扇。
2.用于存儲(chǔ)結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)
? 適用于單表非關(guān)系型數(shù)據(jù)的存儲(chǔ)惧浴,不適合做關(guān)聯(lián)查詢存和,類似JOIN等操作。
3. 基于HDFS
? 數(shù)據(jù)持久化存儲(chǔ)的體現(xiàn)形式是Hfile衷旅,存放于DataNode中捐腿,被ResionServer以region的形式進(jìn)行管理。
4.延遲較低柿顶,接入在線業(yè)務(wù)使用
? 面對(duì)大量的企業(yè)數(shù)據(jù)叙量,HBase可以直線單表大量數(shù)據(jù)的存儲(chǔ),同時(shí)提供了高效的數(shù)據(jù)訪問(wèn)速度九串。
總結(jié):
? Hive和Hbase是兩種基于Hadoop的不同技術(shù)绞佩,Hive是一種類SQL的引擎,并且運(yùn)行MapReduce任務(wù)猪钮,Hbase是一種在Hadoop之上的NoSQL 的Key/vale數(shù)據(jù)庫(kù)品山。這兩種工具是可以同時(shí)使用的。就像用Google來(lái)搜索烤低,用FaceBook進(jìn)行社交一樣肘交,Hive可以用來(lái)進(jìn)行統(tǒng)計(jì)查詢,HBase可以用來(lái)進(jìn)行實(shí)時(shí)查詢扑馁,數(shù)據(jù)也可以從Hive寫到HBase涯呻,或者從HBase寫回Hive。
?
整合:
需求一:將hive分析結(jié)果的數(shù)據(jù)腻要,保存到HBase當(dāng)中去
? HBase的五個(gè)jar包拷貝到hive的lib目錄下:
? hbase-client-1.2.0-cdh5.14.0.jar
? hbase-hadoop2-compat-1.2.0-cdh5.14.0.jar
? hbase-hadoop-compat-1.2.0-cdh5.14.0.jar
? hbase-it-1.2.0-cdh5.14.0.jar
? hbase-server-1.2.0-cdh5.14.0.jar
?
可以使用軟連接
ln -s /export/servers/hbase-1.2.0-cdh5.14.0/lib/hbase-client-1.2.0-cdh5.14.0.jar /export/servers/hive-1.1.0-cdh5.14.0/lib/hbase-client-1.2.0-cdh5.14.0.jar
ln -s /export/servers/hbase-1.2.0-cdh5.14.0/lib/hbase-hadoop2-compat-1.2.0-cdh5.14.0.jar /export/servers/hive-1.1.0-cdh5.14.0/lib/hbase-hadoop2-compat-1.2.0-cdh5.14.0.jar
ln -s /export/servers/hbase-1.2.0-cdh5.14.0/lib/hbase-hadoop-compat-1.2.0-cdh5.14.0.jar /export/servers/hive-1.1.0-cdh5.14.0/lib/hbase-hadoop-compat-1.2.0-cdh5.14.0.jar
ln -s /export/servers/hbase-1.2.0-cdh5.14.0/lib/hbase-it-1.2.0-cdh5.14.0.jar /export/servers/hive-1.1.0-cdh5.14.0/lib/hbase-it-1.2.0-cdh5.14.0.jar
ln -s /export/servers/hbase-1.2.0-cdh5.14.0/lib/hbase-server-1.2.0-cdh5.14.0.jar /export/servers/hive-1.1.0-cdh5.14.0/lib/hbase-server-1.2.0-cdh5.14.0.jar
修改hive的配置文件
cd /export/servers/hive-1.1.0-cdh5.14.0/conf
vim hive-site.xml
<property>
<name>hive.zookeeper.quorum</name>
<value>hadoop01,hadoop02,hadoop03</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop01,hadoop02,hadoop03</value>
</property>
修改hive-env.sh下的配置
export HADOOP_HOME=/export/servers/hadoop-2.6.0-cdh5.14.0
export HBASE_HOME=/export/servers/hbase-1.2.0-cdh5.14.0
export HIVE_CONF_DIR=/export/servers/hive-1.1.0-cdh5.14.0/conf
在hive中建表加載數(shù)據(jù)
create database course;
use course;
create external table if not exists course.score(id int,cname string,score int) row format delimited fields terminated by '\t' stored as textfile ;
準(zhǔn)備數(shù)據(jù)
1 zhangsan 80
2 lisi 60
3 wangwu 30
4 zhaoliu 70
進(jìn)行加載
hive (course)> load data local inpath '/export/hive-hbase.txt' into table score;
hive (course)> select * from score;
創(chuàng)建一個(gè)hive管理表與Hbase進(jìn)行映射
create table course.hbase_score(id int,cname string,score int)
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
with serdeproperties("hbase.columns.mapping" = "cf:name,cf:score")
tblproperties("hbase.table.name" = "hbase_score");
通過(guò)insert overwrite select 進(jìn)行插入
insert overwrite table course.hbase_score select id,cname,score from course.score;
在hbase中查看表
hbase(main):024:0> scan 'hbase_score'
需求二:創(chuàng)建hive外部表复罐,映射Hbase當(dāng)中已有的表模型,直接通過(guò)
進(jìn)入Hbase中創(chuàng)建表并手動(dòng)加載一些數(shù)據(jù)
進(jìn)入Hbase客戶端雄家,手動(dòng)創(chuàng)建一張表效诅,并插入數(shù)據(jù)
create 'hbase_hive_score',{ NAME =>'cf'}
put 'hbase_hive_score','1','cf:name','zhangsan'
put 'hbase_hive_score','1','cf:score', '95'
put 'hbase_hive_score','2','cf:name','lisi'
put 'hbase_hive_score','2','cf:score', '96'
put 'hbase_hive_score','3','cf:name','wangwu'
put 'hbase_hive_score','3','cf:score', '97'
建立hive外部表,映射Hbase當(dāng)中的字段
CREATE external TABLE course.hbase2hive(id int, name string, score int) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf:name,cf:score") TBLPROPERTIES("hbase.table.name" ="hbase_hive_score");