HBaseのとハイブの比較
1.Hive
(1)データウェアハウス
HDFSに保存されたファイルへの実際の同等の自然のハイブは、すでにクエリを管理するために使用HQLを容易にするために、2つのショットの関係MySQLを持っていました。
データ解析のために(2)、清掃
オフラインデータ分析およびクリーニング、長い待ち時間に適したハイブ。
HDFS、MapReduceのに基づいて、(3)
ハイブデータは、まだ最終的にMapReduceのコードの実行に変換されますHQL文で書かれた、データノードに格納されます。
2.HBase
(1)データベース
これは、非リレーショナルデータベースを格納するカラムです。
(2)データ記憶構造化および非構造化
単一テーブルの非リレーショナルデータのためのストレージではなく、関連するクエリに適した、および他の同様の操作をJOIN。
HDFSに基づいて、(3)
データの永続ストレージの形で具現化領域で管理するResionServerにデータノードに格納されているのhFileです。
(4)低遅延は、使用してオンラインサービスにアクセスします
効率的なデータアクセス速度を提供しながら、エンタープライズデータの多数の顔は、HBaseのは、大量のデータを格納するために単一のテーブル線形とすることができます。
6.4.2のHBaseとHiveの統合利用
ヒントスクリーミング:HBaseのとハイブ統合は、最新の2つのバージョンが互換性がないことができます。ハイブHBaseのハンドラ-1.2.2.jarは:だから、私たちは勇敢な再コンパイルを涙することができます!!良い空気!!
環境の準備
私たちが動作し、HBaseのハイブジャーの動作を保持するために必要されている間にもHBaseのハイブに影響を与える可能性が従っているので、その後、次のコピーハイブジャーパッケージが依存(またはソフト有線の形で)。
輸出HBASE_HOME =は/ opt /モジュール/ HBaseの 輸出HIVE_HOME =は/ opt /モジュール/ハイブ
LN -s $ HBASE_HOME / libに/ HBaseの共通-1.3.1.jar $ HIVE_HOME / libに/ HBaseの共通-1.3.1.jar LN -s $ HBASE_HOME / libに/ HBaseのサーバ-1.3.1.jar $ HIVE_HOME / libに/ HBaseのサーバ-1.3.1.jar LN -s $ HBASE_HOME / libに/ HBaseのクライアント-1.3.1.jar $ HIVE_HOME / libに/ HBaseのクライアント-1.3.1.jar LN -s $ HBASE_HOME / libに/ HBaseのプロトコル-1.3.1.jar $ HIVE_HOME / libに/ HBaseのプロトコル-1.3.1.jar LN -s $ HBASE_HOME / libに/ HBaseの-IT-1.3.1.jar $ HIVE_HOME / libに/ HBaseの-IT-1.3.1.jar LN -s $ HBASE_HOME / libに/ HTRACEコア-3.1.0-incubating.jar $ HIVE_HOME / libに/ HTRACEコア-3.1.0-incubating.jar LN -s $ HBASE_HOME / libに/ HBaseの-hadoop2-compatの-1.3.1.jar $ HIVE_HOME / libに/ HBaseの-hadoop2-compatの-1.3.1.jar LN -s $ HBASE_HOME / libに/ HBaseの-Hadoopの-compatの-1.3.1.jar $ HIVE_HOME / libに/ HBaseの-Hadoopの-compatの-1.3.1.jar |
次のように飼育係はまた、ハイブ-site.xmlののプロパティを変更します。
<プロパティ> <名前> hive.zookeeper.quorum </名前> <値> hadoop102、hadoop103、hadoop104 </ value>の <説明>に話をするのZooKeeperサーバーのリストを指定します。これはのみ、読み取り/書き込みロックのために必要とされている。</記述> </プロパティ> <プロパティ> <name>hive.zookeeper.client.port</name> <value>2181</value> <description>The port of ZooKeeper servers to talk to. This is only needed for read/write locks.</description> </property> |
1.案例一
目标:建立Hive表,关联HBase表,插入数据到Hive表的同时能够影响HBase表。
分步实现:
(1) 在Hive中创建表同时关联HBase
CREATE TABLE hive_hbase_emp_table( empno int, ename string, job string, mgr int, hiredate string, sal double, comm double, deptno int) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:ename,info:job,info:mgr,info:hiredate,info:sal,info:comm,info:deptno") TBLPROPERTIES ("hbase.table.name" = "hbase_emp_table"); |
提示:完成之后,可以分别进入Hive和HBase查看,都生成了对应的表
(2) 在Hive中创建临时中间表,用于load文件中的数据
提示:不能将数据直接load进Hive所关联HBase的那张表中
CREATE TABLE emp( empno int, ename string, job string, mgr int, hiredate string, sal double, comm double, deptno int) row format delimited fields terminated by '\t'; |
(3) 向Hive中间表中load数据
hive> load data local inpath '/home/admin/softwares/data/emp.txt' into table emp; |
(4) 通过insert命令将中间表中的数据导入到Hive关联HBase的那张表中
hive> insert into table hive_hbase_emp_table select * from emp; |
(5) 查看Hive以及关联的HBase表中是否已经成功的同步插入了数据
Hive:
hive> select * from hive_hbase_emp_table; |
HBase:
hbase> scan ‘hbase_emp_table’ |
2.案例二
目标:在HBase中已经存储了某一张表hbase_emp_table,然后在Hive中创建一个外部表来关联HBase中的hbase_emp_table这张表,使之可以借助Hive来分析HBase这张表中的数据。
注:该案例2紧跟案例1的脚步,所以完成此案例前,请先完成案例1。
分步实现:
(1) 在Hive中创建外部表
CREATE EXTERNAL TABLE relevance_hbase_emp( empno int, ename string, job string, mgr int, hiredate string, sal double, comm double, deptno int) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:ename,info:job,info:mgr,info:hiredate,info:sal,info:comm,info:deptno") TBLPROPERTIES ("hbase.table.name" = "hbase_emp_table"); |
(2) 关联后就可以使用Hive函数进行一些分析操作了
hive (default)> select * from relevance_hbase_emp; |