当前位置:网站首页>Intégration de Clusters CDH Phoenix basée sur la gestion cm
Intégration de Clusters CDH Phoenix basée sur la gestion cm
2022-04-23 14:03:00 【Une centaine de nuits ont commencé】
Basé surCMGestionCDHIntégration des grappesPhoenix
Fiche d'information:OriginalCDHCluster,ParHive+Hbase+ImpalaEffectuer des requêtes de traitement de données,HbaseLa grammaire est difficile à comprendre,Contrairement à la normaleSQL,ImpalaLa requête Speed est trop lente pour effectuer des modifications enregistrées.C'est pourquoi j'ai pensé àPhoenixPour intégrerHbase、HivePour résoudre les problèmes ci - dessus.
Prémisse:Déjà basé surCMInstallation et constructionCDHCluster,Le présent document adopte:parcelsIntégration des paquetsPhoenixÀCDHCluster.
TéléchargerPhoenix ParcelSac etJarPackage and Upload toCM-ServerNoeud
Utilisé dans le présent documentphoenixLes paquets de versions sont les suivants:
# ParcelSac
manifest.json
PHOENIX-5.0.0-cdh6.2.0.p0.1308267-el7.parcel
PHOENIX-5.0.0-cdh6.2.0.p0.1308267-el7.parcel.sha1
# JarSac
PHOENIX-1.0.jar
(1)Modifier.sha1Le dossier est.sha,C'est - à - dire supprimer le suffixe1.Oui.phoenixDeparcelSac etjarPaquet téléchargé verscloudera manager serverNodehttpdSous services/var/www/html/phoenix,ModifierphoenixPermissions du dossier777.Et peut êtrehttpAccès àhttp://cdh001/pheonix.
chmod 777 -R /var/www/html/phoenix
# /var/www/html/phoenixLa structure du Répertoire est la suivante:
-rwxrwxrwx. 1 root root 2478 8Mois 1 2019 manifest.json
-rwxrwxrwx 1 root root 5306 3Mois 18 10:37 PHOENIX-1.0.jar
-rwxrwxrwx. 1 root root 402216960 8Mois 1 2019 PHOENIX-5.0.0-cdh6.2.0.p0.1308267-el7.parcel
-rwxrwxrwx. 1 root root 41 8Mois 1 2019 PHOENIX-5.0.0-cdh6.2.0.p0.1308267-el7.parcel.sha
![[Impossible de transférer l'image de la chaîne externe,Il peut y avoir un mécanisme antivol à la station source,Il est recommandé de sauvegarder l'image et de la télécharger directement(img-dt4oEoO9-1648092283868)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220324105131812.png)]](/img/28/2621040329f77f569578d850be1279.png)
(2)Oui.parclCopie du paquet vers/opt/cloudera/parcel-repoTable des matières(Attention!manifest.jsonSiphoenixDans le catalogue),Et modifier les permissions777.
chmod 777 -R /opt/cloudera/parcel-repo
#/opt/cloudera/parcel-repoLa structure du Répertoire est la suivante:
-rwxrwxrwx. 1 root root 2478 8Mois 1 2019 manifest.json
-rwxrwxrwx. 1 root root 402216960 8Mois 1 2019 PHOENIX-5.0.0-cdh6.2.0.p0.1308267-el7.parcel
-rwxrwxrwx. 1 root root 41 8Mois 1 2019 PHOENIX-5.0.0-cdh6.2.0.p0.1308267-el7.parcel.sha
(3)Oui.phoenixDejarMets le sac./opt/cloudera/csdSous la table des matières,Et copie àhttpdSous le répertoire des services,Modifier les permissions777.
chmod 777 *R /opt/cloudera/csd
#/opt/cloudera/csdLa structure du Répertoire est la suivante:
-rwxr-xr-x 1 root root 5306 3Mois 18 10:39 PHOENIX-1.0.jar
(4)InCMFonctionnement de l'interface: “Gestion”->“Paramètres”->Saisissez la requête"csd"-> Le chemin du dépôt de descripteurs locaux a été modifié en "/opt/cloudera/csd"


(5)InCMFonctionnement de l'interface: “Hôte”->“Parcel”->“Configuration”->Distant Parcel Dépôt URLNouveauphoenixChemin “http://cdh001/phoenix/”



(6)“Vérifier les mises à jourParcel”->TrouverPHOENIX “Télécharger”->“Répartition”->“Activation”


(7)InCM Fonctionnement de l'interface principale :Cluster Barre de menu"Ajouter un service"->Sélectionner"PHOENIX"->quary serverAttribution des noeuds(3 Tous les groupes )->Démarrage du Service,RetourCM L'interface peut voir Phoenix.




(8)ConfigurationHBASE, “HBASE”->“Configuration”->Recherche"hbase-site.xml"->“hbase-site.xmlDeHBaseFragment de code de configuration avancée du Service”,ParXMLVue du format,Coller ce qui suit,Et sauvegardez. Cette étape est phoenixIntégrationhbase.
<!-- Définir l'écriture du Journal de pré - écriture wal Codage -->
<property>
<name>hbase.regionserver.wal.codec</name>
<value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
</property>
<!-- Activer les fonctions personnalisées de l'utilisateur (UDF) -->
<property>
<name>phoenix.functions.allowUserDefinedFunctions</name>
<value>true</value>
<description>enable UDF functions</description>
</property>

(9) Enregistrer les modifications de configuration , Redémarrer le service expiré hbaseEtphoenix.
(10)Oui.Phoenix Configuration du chemin d'installation dans la variable d'environnement système (Toutes les installationsPhoenix Exécution du noeud pour ).
vim /etc/profile
#--------------------phoenix------------------------------------
export PHOENIX_HOME=/opt/cloudera/parcels/PHOENIX-5.0.0-cdh6.2.0.p0.1308267
export PATH=$PATH:$PHOENIX_HOME/bin
#Activation en vigueur
source /etc/profile
(11) Démarrage de n'importe quel noeud phoenix,Par ordrephoenix-sqlline zkNoeudhostname:2181/hbase Accès à l'interface interactive.
phoenix-sqlline cdh185
Saisissez les commandes !table Le tableau de sortie fonctionne normalement .

PhoenixIntégrationHive
Hive-phoenix Non consolidé avant hive Créer une erreur de cartographie dans
ParseException: Syntax error in line 7:undefined: STORED BY 'org.apache.phoenix.hive.PhoenixStorageHandler' ^ Encountered: BY Expected: AS CAUSED BY: Exception: Syntax error
Approche intégrée:Oui.phoenixSous le Répertoire d'installationlibMoyennephoenix-5.0.0-cdh6.2.0-hive.jar Copie àhiveRépertoire d'installation/libMoyenne.Toutes les installationspheonix Tous les noeuds doivent être copiés .
cp /opt/cloudera/parcels/PHOENIX/lib/phoenix/phoenix-5.0.0-cdh6.2.0-hive.jar /opt/cloudera/parcels/CDH/lib/hive/lib
Note::Inimpala End ne peut pas créer hive-phoeinxTableau de cartographie.
Hive-Hbase Mise en œuvre de la cartographie des tableaux
a、hiveCartographiehbaseTableau existant dans
#Entréehbase-shellLes ordres:
hbase shell
#CréationhbaseCommandes de table:
create 'hbase_test','user'
#Insérer une commande de données:
put 'hbase_test','111','user:name','jack'
put 'hbase_test','111','user:age','18'
#RequêtehbaseCommandes de table:scan 'hbase_test'
#EntréehiveCréationhbaseTableau des associations
create external table hbase_test1(
id int,
name string,
age int
)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,user:name,user:age")
TBLPROPERTIES("hbase.table.name" = "hbase_test");
#VoirhiveDonnées du tableau,Les ordres:
select * from hbase_test1
#Allez.hiveInsérer des données dans le tableau:
insert into hbase_test1(id,name,age) values(333,'mary',25);
#RequêtehiveDonnées du tableau ,Les ordres:
select * from hbase_test1
#Requête simultanéehbaseDonnées du tableau,Oui.hive Ajouter un enregistrement dans
Phoenix-Hbase Mise en œuvre de la cartographie des tableaux
a、phoenixCartographiehbase Tableau existant dans
#phoenix-shellCommande de démarrage
phoenix-sqlline.py cdh185:2181
#Inphoenix Créer la même implémentation de nom de table que HbaseCartographie des tableaux
create table if not exists "hbase_test"(
"id" varchar primary key,
"user"."name" varchar,
"user"."age" varchar
)
column_encoded_bytes=0;
create view if not exists "hbase_test2"(
"id" varchar primary key,
"user"."name" varchar,
"user"."age" varchar
)
column_encoded_bytes=0;
Attention!:
Phoneix Les tableaux créés dans HBase Le nom de la table mappée dans doit être le même
phoneix Le nom du champ dans lequel le tableau a été créé et HBase Le nom du champ de la table de cartographie doit être le même (Attention à la casse)
#Insérer une commande de données:
upsert into "hbase_test"(id,"name","age") values('444','haha','33');
#Inhbase De nouveaux enregistrements sont disponibles dans
Hive-Phoenix Mise en œuvre de la cartographie des tableaux
Hive Créer une table interne à la fin
Pour les tableaux internes,Hive Gérer le cycle de vie des tableaux et des données .CréationHiveTableau, Crée également un PhoenixTableau.Une foisHive Tableau supprimé ,Phoenix Le tableau a également été supprimé .
#hive Créer une table interne à la fin ,Et cartographierphoenix.
create table hive_phoenix_in_test (
s1 string,
i1 int,
f1 float,
d1 double
)
stored as parquetfile
STORED BY 'org.apache.phoenix.hive.PhoenixStorageHandler'
TBLPROPERTIES (
"phoenix.table.name" = "hive_phoenix_in_test",
"phoenix.zookeeper.quorum" = "cdh185,cdh186,cdh188",
"phoenix.zookeeper.znode.parent" = "/hbase",
"phoenix.zookeeper.client.port" = "2181",
"phoenix.rowkeys" = "s1, i1",
"phoenix.column.mapping" = "s1:s1, i1:i1, f1:f1, d1:d1",
"phoenix.table.options" = "SALT_BUCKETS=10, DATA_BLOCK_ENCODING='DIFF'"
);
#phoenix Requête de données de table finale
select * from hive_phoenix_in_test
#hive Ajout de données
insert into hive_phoenix_in_test values("a",1,1.0,1.0);
+-----+-----+------+------+
| s1 | i1 | f1 | d1 |
+-----+-----+------+------+
| a | 1 | 1.0 | 1.0 |
+-----+-----+------+------+
#phoenix Ajout de données
upsert into hive_phoenix_in_test values ('b',5,1.85,4.4894165);
upsert into hive_phoenix_in_test values ('b',9,1.85,4.4894165);
+-----+-----+-------+------------+
| s1 | i1 | f1 | d1 |
+-----+-----+-------+------------+
| b | 5 | 1.85 | 4.4894165 |
| a | 1 | 1.0 | 1.0 |
| b | 9 | 1.85 | 4.4894165 |
+-----+-----+-------+------------+
#phoenixDonnées de mise à jour latérale,rowkey Même modification
upsert into hive_phoenix_in_test values ('b',5,1.85,4.54);
+-----+-----+-------+------------+
| s1 | i1 | f1 | d1 |
+-----+-----+-------+------------+
| b | 5 | 1.85 | 4.54 |
| a | 1 | 1.0 | 1.0 |
| b | 9 | 1.85 | 4.4894165 |
+-----+-----+-------+------------+
#pheonix Fin supprimer les données
delete from hive_phoenix_in_test where "s1"='b' and "i1"=9;
+-----+-----+-------+-------+
| s1 | i1 | f1 | d1 |
+-----+-----+-------+-------+
| b | 5 | 1.85 | 4.54 |
| a | 1 | 1.0 | 1.0 |
+-----+-----+-------+-------+
Hive Créer une table externe
Pour les tableaux externes,HiveAvec**DéjàPhoenixTableau**À utiliser ensemble,Administration seulementHiveMétadonnées.DeHiveSupprimerEXTERNAL Le tableau ne sera supprimé que HiveMétadonnées,Mais ne supprimera pasPhoenixTableau.
create external table hive_phoenix_out_test (
i1 int,
s1 string,
f1 float,
d1 decimal
)
STORED BY 'org.apache.phoenix.hive.PhoenixStorageHandler'
TBLPROPERTIES (
"phoenix.table.name" = "hive_phoenix_out_test",
"phoenix.zookeeper.quorum" = "cdh185,cdh186,cdh188",
"phoenix.zookeeper.znode.parent" = "/hbase",
"phoenix.zookeeper.client.port" = "2181",
"phoenix.rowkeys" = "i1",
"phoenix.column.mapping" = "i1:i1, s1:s1, f1:f1, d1:d1"
);
Description des paramètres
phoenix.table.name # Spécifie la cartographie phoenixNom du tableau,Par défaut ethiveMême tableau
phoenix.zookeeper.quorum # hbaseDezkGroupe de gestion,Par défautlocalhost
phoenix.zookeeper.znode.parent # DésignationHBaseDeZookeeperNoeud parent,Par défaut/hbase
phoenix.zookeeper.client.port # AllezzookeeperPort,Par défaut2181
phoenix.rowkeys # phoenix Colonne principale de la liste ,Obligatoire
phoenix.column.mapping # hiveEtphoenix Cartographie entre les noms de colonnes
**Attention!:** Toutes les suppressions et mises à jour doivent être effectuées à phoenix Exécution de l'aspect .
Autres éléments de configuration,Je peux recommencer.Hive-CLIParamètres intermédiaires.
Performance TuningRéglage des performances
| Parameter | Default Value | Description |
|---|---|---|
| phoenix.upsert.batch.size | 100 | Nombre de données mises à jour par lots |
| [phoenix-table-name].disable.wal | false | Configuration temporaire des propriétés du tableau disable_walPourtrue, C'est - à - dire désactiver la fonction pré - écriture ,Les performances peuvent parfois être améliorées |
| [phoenix-table-name].auto.flush | false | Lorsque la fonction pré - écriture est désactivée et que le pinceau automatique est réglé à trueHeure,memstoreRafraîchir commehfile.hbaseArchitecture des composants |
Query DataRecherche de données
Peut être utiliséhivesqlRequêtephoenixDonnées du tableau, Sur un seul tableau hive La requête peut fonctionner comme phoenix Les requêtes sont aussi rapides , Avec les paramètres de propriété suivants :hive.fetch.task.conversion=moreEthive.exec.parallel=true.
| Parameter | Default Value | Description |
|---|---|---|
| hbase.scan.cache | 100 | Lire la taille de la ligne demandée par l'unit é |
| hbase.scan.cacheblock | false | Si le bloc de cache |
| split.by.stats | false | Set totrueHeure, Le mapper utilise des statistiques de table ,Chaquemapper Correspond à un guide |
| [hive-table-name].reducer.count | 1 | reducerNombre.InTezEn mode, Requêtes qui n'affectent qu'une seule table . |
| [phoenix-table-name].query.hint | Conseils de recherche |
Restrictions:hive Les opérations de mise à jour et de suppression nécessitent hiveEtphoenix Support du gestionnaire d'objets des deux côtés .
La cartographie des colonnes n'utilise pas correctement les colonnes clés de ligne de cartographie .
mapreduceEttez Il n'y a toujours qu'un seul devoir reducer.
Phoenix Syntaxe commune
phoenix Interface interactive activer la commande :./phoenix-sqlline hbaseListe des noeuds
phoenixDeDLL Il est recommandé d'inclure des guillemets doubles pour tous les noms de table et de colonne ,Sinonphoenix Tout sera mis en majuscules pour l'identification ,Même exécutionphoenix Une seule citation est utilisée pour la chaîne lors de la requête de la commande , Parce que les guillemets doubles sont reconnus comme des colonnes, des tableaux ou des familles de colonnes .
Parmi euxrowEst la clé primaire,Correspondant àhbaseDerowkey,Utilisation d'autres champs"Famille de colonnes".“Nom de la colonne"Comme nom de champ.Sihbase Les noms de colonnes dans le tableau contiennent des points décimaux , Si la famille de colonnes est ’cf’,Nom de la colonne:’root.a.b’,DansPhoenixDeDDL La correspondance doit être "cf”.“root.a.b” varchar.
| command | Fonction | Exemple |
|---|---|---|
| !tables | Voir tous les noms de table de données actuels (équivalent àshow tables) | !tables |
| select | Interrogation des données de la table | select…from… |
| upsert | Ajouter ou modifier des données | upsert into tname values(xx) |
| delete | Supprimer les enregistrements de table | delete from tname |
版权声明
本文为[Une centaine de nuits ont commencé]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/04/202204231401520772.html
边栏推荐
- FBS(fman build system)打包
- The art of automation
- redis如何解决缓存雪崩、缓存击穿和缓存穿透问题
- STM32 learning record 0007 - new project (based on register version)
- 分页SQL
- 1256: bouquet for algenon
- How does redis solve the problems of cache avalanche, cache breakdown and cache penetration
- 程序编译调试学习记录
- As a junior college student, I studied hard in closed doors for 56 days, won Ali offer with tears, five rounds of interviews and six hours of soul torture
- 【项目】小帽外卖(八)
猜你喜欢
随机推荐
Quartus Prime硬件实验开发(DE2-115板)实验二功能可调综合计时器设计
Port occupied 1
容差分析相关的计算公式
cnpm的诡异bug
Program compilation and debugging learning record
The art of automation
Atcoder beginer contest 248c dice sum (generating function)
Decimal 格式化小数位/DateTime 转换处理
switch使用(微信小程序)
微信小程序的订阅号开发(消息推送)
项目中遇到的问题(五)操作Excel接口Poi的理解
Basic knowledge learning record
Strange bug of cnpm
Yarn online dynamic resource tuning
nodejs通过require读取本地json文件出现Unexpected token / in JSON at position
FBS(fman build system)打包
淘宝发布宝贝提示“您的消保保证金额度不足,已启动到期保障”
对List集合进行分页
Express middleware ③ (custom Middleware)
Logging模块









