l'intégration hive hbase nécessite plus d'exigences,
1.hive doit être 0.6.0
2.hive lui-même nécessite que la version la plus élevée de hadoop soit hadoop-0.20.2
3. La version de hbase doit être 0.20.3, les autres versions doivent recompiler hive_hbase-handler
mais le nouveau version de hbase (0.90) Les modifications sont si importantes qu'il est impossible de compiler à partir de. C'est dégoûtant, hbase est actuellement mis à jour relativement rapidement, actuellement 0.90 (de 0.20.6 à 0.89), pour savoir pourquoi ce saut, reportez-vous à l'explication officielle http://wiki.apache.org/hadoop/Hbase/HBaseVersions
1 ) Démarrer Hbase,
exiger hbase-0.20.3, zookeeper-3.2.2
Si vous n'utilisez pas hbase-0.20.3, vous devez recompiler hive_hbase-handler.jar
2) Connexion HBase à nœud unique./bin/hive
-hiveconf hbase .master =master:60000
3) Connexion au cluster HBase
1. Démarrez zookeeper
2. Démarrez hbase
3. Démarrez hive, ajoutez la prise en charge de zookeeper
code java
./bin/hive -hiveconf hbase.zookeeper.quorum= master,slave-A,slave-B
//Tous les nœuds zookeeper
2. Insérer
le début des données
./bin/hive --auxpath /data/soft/hive/lib/hive_hbase-handler.jar,/data/soft/hive/lib/hbase-0.20.3.jar,/data/soft/hive/lib/zookeeper-3.2.2.jar -hiveconf hbase.zookeeper.quorum=slave-001,slave-002,slave-003
hive
1. Créer une base de données reconnue par 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 définit le nom de la table dans hbase
hbase.columns.mapping définit la famille de colonnes dans hbase
2. Utilisez sql pour importer des données
I. Préparez les données à l'avance
a) Créez une nouvelle table de données Hive
CREATE TABLE pokes (foo INT, bar STRING);
b) Données d'insertion de lot
hive> LOAD DATA LOCAL INPATH './examples/files/kv1.txt' OVERWRITE INTO TABLE pokes;
Ce fichier se trouve dans le répertoire d'installation de la ruche, examples/files/kv1.txt
- ii. Utilisez sql pour importer hbase_table_1
INSERT OVERWRITE TABLE hbase_table_1 SELECT * FROM pokes WHERE foo=86;
Notez que le démarrage par défaut signalera
FAILED : Erreur d'exécution, le code de retour 2 de org.apache.hadoop.hive.ql.exec.ExecDriver
doit être ajouté au démarrage
-auxpath /data/soft/hive/lib/hive_hbase-handler.jar,/data/soft/hive/lib/hbase-0.20.3.jar,/data/soft/hive/lib/zookeeper-3.2.2.jar
3 afficher les données
hive> select * from hbase_table_1;
Il affichera les données que vous venez d'insérer
86 val_86
hbase
1. Connectez-vous à hbase
[root@master hbase]# ./bin/hbase shell
2. Afficher la structure du tableau
hbase(main):001: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.7460 seconds
3. Afficher les données chargées
hbase(main):002:0> scan 'xyz'
ROW COLUMN+CELL
86 column=cf1:val, timestamp=1297690405634, value=val_86
1 row(s) in 0.0540 seconds
On peut voir que les données 86 ajoutées dans hive sont déjà dans hbase
4. Ajouter des données
' hbase(main):008:0> put 'xyz','100','cf1:val','www.360buy.com'
0 row(s) in 0.0630 seconds
Hive
fait référence aux données de Hive
hive> select * from hbase_table_1;
OK
100 www.360buy.com
86 val_86
Time taken: 8.661 seconds
Les données qui viennent d'être insérées dans hbase sont déjà dans hive.
hive accède à la hbase existante
à l'aide de CREATE EXTERNAL TABLE
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");
3. Colonnes et familles multiples (Colonnes et familles multiples)
1. créer une base de données
CREATE TABLE hbase_table_2(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"
);
2. Insérer des données
INSERT OVERWRITE TABLE hbase_table_2 SELECT foo, bar, foo+1, foo+2
FROM pokes WHERE foo=98 OR foo=100;
Cela a 3 colonnes hive (valeur1 et valeur2, valeur3), 2 familles de colonnes hbase (a, d) Les
2 colonnes de Hive (valeur1 et valeur2) correspondent à 1 famille de colonnes hbase (a, le nom de la colonne dans hbase b, c), le l'autre colonne (valeur3) de hive correspond à la colonne (e) dans la famille de colonnes (d)
3. Connectez-vous à hbase pour afficher la structure
hbase(main):003:0> describe "hbase_table_2"
DESCRIPTION ENABLED
{NAME => 'hbase_table_2', FAMILIES => [{NAME => 'a', COMPRESSION => 'N true
ONE', VERSIONS => '3', TTL => '2147483647', BLOCKSIZE => '65536', IN_M
EMORY => 'false', BLOCKCACHE => 'true'}, {NAME => 'd', COMPRESSION =>
'NONE', VERSIONS => '3', TTL => '2147483647', BLOCKSIZE => '65536', IN
_MEMORY => 'false', BLOCKCACHE => 'true'}]}
1 row(s) in 1.0630 seconds
4. Afficher les données hbase
hbase(main):004:0> scan 'hbase_table_2'
ROW COLUMN+CELL
100 column=a:b, timestamp=1297695262015, value=val_100
100 column=a:c, timestamp=1297695262015, value=101
100 column=d:e, timestamp=1297695262015, value=102
98 column=a:b, timestamp=1297695242675, value=val_98
98 column=a:c, timestamp=1297695242675, value=99
98 column=d:e, timestamp=1297695242675, value=100
2 row(s) in 0.0380 seconds
5. Afficher dans la ruche
hive> select * from hbase_table_2;
OK
100 val_100 101 102
98 val_98 99 100
Time taken: 3.238 seconds
Référence
http://wiki.apache.org/hadoop/Hive/HBaseIntegration