guide d'étude rapide de la ruche


Préface

L'entrepôt de données Hive occupe une place extrêmement importante dans la famille écologique Hadoop, et il est beaucoup utilisé dans les affaires réelles.On peut dire que la raison pour laquelle Hadoop est si populaire est en grande partie à cause de l'existence de Hive. Surtout pour les entreprises d'entrepôt de données hors ligne, il est fondamentalement basé sur une conception hiérarchique en ruche, complétée par un système de planification, afin de compléter l'exécution du calendrier de l'ensemble de l'entreprise d'entrepôt de données. Cet article de blog est écrit en faisant référence aux excellents articles d'autres blogueurs et en combinant ma propre compréhension et mon fonctionnement pratique


1. Concepts de base de Hive

1.1 Qu'est-ce que Hive

Hive: Il est open source par Facebook pour résoudre les statistiques de données de journaux structurés massifs. Il s'agit d'un outil d'entrepôt de données basé sur l'écosystème de big data hadoop, qui peut mapper des fichiers de données structurés dans une table et fournir des fonctions de requête de type SQL. Son essence est de transformer HQL en programme MapReduce.
Insérez la description de l'image ici
Comme le montre le diagramme, Hive est dans une certaine mesure un package de nombreux frameworks "SQL-MapReduce". Il peut analyser le langage Sql écrit par l'utilisateur dans le programme MapReduce correspondant, et enfin Le résultat du calcul est formé à travers le cadre de calcul MapReduce et soumis au Client.

1.2 Avantages et inconvénients de Hive

Avantages :
① L'interface d'exploitation adopte une syntaxe de type SQL pour fournir des capacités de développement rapide.
② Cela évite d'écrire MapReduce et réduit le coût d'apprentissage des développeurs.
③ Le délai d'exécution de Hive est relativement élevé, c'est pourquoi Hive est souvent utilisé pour l'analyse des données et les occasions où les exigences en temps réel ne sont pas élevées.
④ L'avantage de Hive réside dans le traitement du big data, mais n'a aucun avantage dans le traitement de petites données, car Hive a un délai d'exécution relativement élevé.
⑤ Hive prend en charge les fonctions définies par l'utilisateur et les utilisateurs peuvent implémenter leurs propres fonctions en fonction de leurs besoins.
Inconvénients:
① La capacité d'expression HQL de Hive est limitée.
② Les algorithmes itératifs ne peuvent pas être exprimés.
③ L'efficacité de Hive est relativement faible.
④ Le travail MapReduce généré automatiquement par Hive n'est généralement pas assez intelligent.
⑤ Le réglage de la ruche est difficile et la granularité est relativement grossière.

1.3 Principe de l'architecture de la ruche

Insérez la description de l'image ici
1. Interface utilisateur:
CLI client (shell de la ruche), JDBC / ODBC (ruche d'accès java), WEBUI (ruche d'accès du navigateur).
2. Métadonnées: les
métadonnées du Metastore comprennent: le nom de la table, la base de données à laquelle appartient la table (par défaut), le propriétaire de la table, le champ de colonne / partition, le type de table (s'il s'agit d'une table externe), le répertoire où se trouvent les données de la table , etc. Hive stocke les informations de métadonnées dans la table de la base de données, telles que derby (intégré), Mysql (configuré dans le travail réel). Les informations de métadonnées dans Hive incluent le nom de la table, les colonnes et les partitions de la table, et les attributs de la table (qu'il s'agisse d'une table externe, etc.), le répertoire où se trouvent les données de la table, etc. L'analyseur de Hive lit les informations pertinentes dans le MetaStore lorsqu'il est en cours d'exécution. Laissez-moi vous dire pourquoi vous n'utilisez pas le derby de base de données de Hive dans les affaires réelles, et vous devez reconfigurer une nouvelle base de données Mysql pour cela, car la base de données derby a de grandes limitations: la base de données derby ne permet pas aux utilisateurs de l'ouvrir. Il peut être partagé par plusieurs clients, un seul client peut l'ouvrir pour le faire fonctionner, c'est-à-dire qu'un seul utilisateur peut l'utiliser à la fois. Naturellement, c'est très gênant au travail, nous devons donc le rouvrir. Configurer une base de données .
3. Hadoop
utilise HDFS pour le stockage et MapReduce pour les calculs.
4. Driver: Driver
① Parser (SQL Parser): convertit les chaînes SQL en arbre de syntaxe abstraite AST, cette étape est généralement complétée avec une bibliothèque d'outils tiers, telle que antlr; effectuez une analyse grammaticale sur l'AST, par exemple si la table existe, le champ S'il existe et si la sémantique SQL est incorrecte.
② Compilateur (plan physique): compilez AST pour générer un plan d'exécution logique.
③ Optimizer (Query Optimizer): optimise le plan d'exécution logique.
④ Exécution: convertissez le plan d'exécution logique en un plan physique qui peut être exécuté. Pour Hive, c'est MR / Spark.
Comme on peut le voir dans l'architecture ci-dessus, avec l'aide du HDFS de Hadoop, de MapReduce et de MySql, Hive utilise en fait l'analyseur Hive pour analyser l'instruction SQl de l'utilisateur dans le programme MapReduce correspondant, c'est-à-dire que Hive n'est qu'un outil client, ce qui est pourquoi nous n'avons pas eu de distribution et de pseudo-distribution lors de la construction de Hive. (Hive est comme Liu Bang, utilisant raisonnablement l'aide de Zhang Liang, Han Xin et Xiao He, réalisant ainsi beaucoup!).

1.4 Mécanisme de fonctionnement de la ruche

Insérez la description de l'image ici
Le mécanisme de fonctionnement de Hive est comme indiqué dans la figure: une fois la table créée, les utilisateurs doivent uniquement écrire des instructions Sql en fonction des besoins de l'entreprise, puis le framework Hive analysera les instructions Sql dans le programme MapReduce correspondant et exécutera le travail. à travers le cadre de calcul MapReduce pour obtenir nos résultats finaux de l'analyse. Pendant le fonctionnement de Hive, les utilisateurs doivent uniquement créer des tables, importer des données et écrire des instructions d'analyse SQL. Le reste du processus sera automatiquement complété par le framework Hive. La création de tables, l'importation de données et l'écriture d'instructions d'analyse SQL sont en fait les connaissance de la base de données., le processus d'exploitation de Hive explique également pourquoi l'existence de Hive abaisse le seuil d'apprentissage de Hadoop et pourquoi Hive occupe une place si importante dans la famille Hadoop.

Deuxièmement, le fonctionnement de Hive

Après une compréhension préliminaire des concepts de base de Hive, nous pratiquerons Hive. Le soi-disant "C'est toujours superficiel sur le papier, et je sais absolument que cette matière doit être pratiquée ." Créez d'abord un texte au format txt, les données sont les suivantes:

id      city    name    sex           
1       beijing zhangli man 
2       guizhou lifang  woman 
3       tianjin wangwei man 
4       chengde wanghe  woman 
5       beijing lidong  man 
6       lanzhou wuting  woman 
7       beijing guona   woman 
8       chengde houkuo  man

Les opérations Hive sont en fait des opérations de table et des opérations de base de données pour les utilisateurs. Ce qui suit se concentrera sur deux aspects.

2.1 Tables Hive - Création de tables internes, de tables externes et de tables de partition

La table dite interne est une table normale et le format de la syntaxe de création est:

create table tablename #内部表名
(
   id int,             #字段名称,字段类型
   city string,
   name string,
   sex string
)
row format delimited      #一行文本对应表中的一条记录
fields terminated by ‘\t’#指定输入文件字段的间隔符,即输入文件的字段是用什么分割开的。

Fonctionnement réel (en utilisant le mode client beeline):

beeline -u jdbc:hive2://node1:10000 -n "用户名" -p "密码"

Insérez la description de l'image ici
Insérez la description de l'image ici
Résultat: le
Insérez la description de l'image ici
format de syntaxe pour créer une table externe est:

create external table teblename #外部表名
(
   id int,
   city string,
   name string,
   sex string
)
row format delimited  #一行文本对应一条记录
fields terminated by ‘\t’ #输入文件的字段是用什么分割开的。
location ‘hdfs://mycluster/testDir’#与hdfs中的文件建立链接。

注意:最后一行写到的是目录testDir,文件就不用写了,Hive表会自动testDir目录下读取所有的文件file。实际的操作过程当中发现,location关联到的目录下面必须都是文件,不能含有其余的文件夹,不然读取数据的时候会报错。

Fonctionnement réel:
Insérez la description de l'image ici
la différence entre les tables internes et les tables externes:
lors du chargement des données des tables internes, les données réelles seront déplacées vers le répertoire de l'entrepôt de données (hive.metastore.warehouse.dir), puis l'accès de l'utilisateur au les données seront directement dans le répertoire de l'entrepôt de données (hive.metastore.warehouse.dir). Complété dans le catalogue de l'entrepôt de données; lorsque la table interne est supprimée, les données et les informations de métadonnées de la table interne seront supprimées en même temps.
Lorsque la table externe charge des données, les données réelles ne seront pas déplacées vers le répertoire de l'entrepôt de données, mais un lien est établi avec la table externe (équivalent à un raccourci fichier); lorsque la table externe est supprimée, seul le lien est supprimé . Supplément: Dans mon travail, j'ai trouvé que pour les tables externes, même si la table dans la ruche est supprimée, l'emplacement de la table dans HDFS existe toujours.

Table de partition
Le concept de table de partition: fait référence au fait que nos données peuvent être partitionnées, c'est-à-dire que le fichier est divisé en différentes normes selon un certain champ. La création de la table de partition est réalisée en activant le partitionnement par lors de la création du table.
Le format de syntaxe de la création de la table de partition est:

create table tablename #分区表名
(
   id int,      #字段名称 字段类型
   city string,
   name string,
   sex string
)
partitioned by(day int)  #分区表字段
row format delimited   #一行文本对应一条记录
fields terminated by ‘\t’ #输入文件的字段是用什么分割开的。

注意:分区表在加载数据的过程中要指定分区字段,否则会报错,正确的加载方式如下:
load data local inpath ‘/usr/local/consumer.txt’ into table t1 partition (day=2);
其余的操作和内部表、外部表是一样的。

Fonctionnement réel:
Insérez la description de l'image ici

2.2 Charger (importer) le fichier de données dans la table Hive

Une fois la table créée dans Hive, il est naturel d'importer des données dans la table plus tard, mais lors de l'importation de données, elles sont différentes des bases de données traditionnelles: Hive ne prend pas en charge les instructions d'insertion une par une, ni les opérations de mise à jour. Les données de la table Hive sont chargées dans la table créée en guise de chargement. Une fois les données importées, elles ne peuvent pas être modifiées. Supprimez la table entière ou créez une nouvelle table et importez de nouvelles données. Le format grammatical des
Insérez la description de l'image ici
données importées est le suivant: Faites attention aux points suivants lors de l'importation de données:

  1. local inpath signifie importer des données du Linux local vers la table Hive, et inpath signifie importer des données du HDFS vers la table Hive.
  2. La valeur par défaut consiste à ajouter des données à la table Hive d'origine et à écraser signifie remplacer les données d'origine dans la table pour l'importation.
  3. La partition est unique à la table de partition et doit être ajoutée lors de l'importation de données, sinon une erreur sera signalée.
  4. L'opération de chargement est juste une simple opération de copie / déplacement, copiez / déplacez le fichier de données vers la position correspondante de la table Hive, c'est-à-dire que Hive n'apportera aucune modification aux données elles-mêmes pendant le processus de chargement des données, mais copiera seulement ou déplacez le contenu des données vers l'emplacement correspondant. Dans le tableau.

Trois, fonction de ruche

3.1 Fonctions intégrées du système:

  1. Afficher les fonctions fournies avec le système
hive> show functions;
  1. Afficher l'utilisation des fonctions intégrées
desc function upper;
  1. Afficher en détail l'utilisation des fonctions intégrées
desc function extended upper;

3.2 Fonctions couramment utilisées intégrées dans le système:

  1. Fonction mathématique
    ① Round Fonction d'arrondi.
    ② fonction d'arrondi de ceil.
    ③ sqrt Trouvez la fonction racine carrée.
    ④ abs Trouvez la fonction de valeur absolue.
    ⑤ plus grand Trouvez la valeur maximale dans un groupe de données.
    ⑥ le moins Trouvez la valeur minimale d'un ensemble de données.
    ⑦ cast convertit le type de données et renvoie le résultat avec succès, sinon il renvoie Null.
  2. Fonction de chaîne
    fonction de découpage pour supprimer les espaces.
    ② ltrim à gauche de la fonction d'espace
    ③ rtrim à droite de la fonction d'espace.
    ④ concat_ws (separator, str1, str2, ...) Le premier paramètre de concat_ws est le séparateur des autres paramètres. La position du séparateur est placée entre les deux chaînes à connecter. Le séparateur peut être une chaîne ou d'autres paramètres.

3.3 fonction personnalisée

  1. Hive est livré avec certaines fonctions, telles que max / min, etc., mais le nombre est limité et vous pouvez facilement l'étendre via UDF personnalisé.
  2. Lorsque les fonctions intégrées fournies par Hive ne peuvent pas répondre à vos besoins de traitement d'entreprise, vous pouvez envisager d'utiliser des fonctions définies par l'utilisateur (UDF: fonctions définies par l'utilisateur) à ce stade.
  3. Selon la catégorie de fonction définie par l'utilisateur, elle est divisée en trois types suivants:
    ① UDF (User-Defined-Function) une entrée et une sortie.
    ② Fonction d'agrégation UDAF (User-Defined Aggregation Function), plus d'entrée et de sortie,
    similaire à: count / max / min.
    ③ UDTF (User-Defined Table-Generating Functions) a une entrée et plusieurs sorties, telles que la vue latérale explore ().
  4. Adresse du document officiel
    https://cwiki.apache.org/confluence/display/Hive/HivePlugins
  5. Étapes de programmation:
    ① Hériter de org.apache.hadoop.hive.ql.UDF
    ② La fonction d'évaluation doit être implémentée; la fonction d'évaluation prend en charge la surcharge;
    ③ Créer une fonction dans la fenêtre de ligne de commande de la ruche
       a) Ajouter un jar
add jar linux_jar_path

           b) Créer une fonction

create [temporary] function [dbname.]function_name AS class_name;

         ④ Supprimez la fonction dans la fenêtre de ligne de commande de la ruche

drop [temporary] function [if exists] [dbname.]function_name;
  1. Remarque:
    UDF doit avoir un type de retour, qui peut renvoyer null, mais le type de retour ne peut pas être void;

3.4 Fonction UDF personnalisée

  1. Créer un projet Maven Hive
  2. Importer les dépendances
<dependencies>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>1.2.1</version>
</dependency>
</dependencies>
  1. Créer une classe
package com.atguigu.hive;
import org.apache.hadoop.hive.ql.exec.UDF;

public class Lower extends UDF {

public String evaluate (final String s) {

if (s == null) {
return null;
}

return s.toLowerCase();
}
}  

  1. Écrivez le package jar et téléchargez-le sur le serveur /usr/local/testJar/udf.jar.
  2. Ajoutez le package jar au classpath de la ruche.
 hive(default)> add jar /usr/local/testJar/udf.jar;
  1. Créer une fonction temporaire à associer à la classe Java développée
hive(default)>create temporary function mylower as "com.atguigu.hive.Lower";
  1. Vous pouvez utiliser la fonction personnalisée mylower dans hql
hive(default)> select ename, mylower(ename) lowername from emp;   

3.5 Fonction d'analyse

Fonction d'analyse: row_number () over () —— Group TOPN
requirements: Besoin d'interroger les deux données les plus anciennes de chaque sexe, les données sont les suivantes

1,18,a,male
2,19,b,male
3,22,c,female
4,16,d,female
5,30,e,male
6,26,f,female

Opération réelle: utilisez la fonction row_number pour regrouper les données du tableau en fonction du sexe, trier et marquer dans l'ordre inverse de l'âge

select id,age,name,sex,
row_number() over(partition by sex order by age desc) as rank
from t_rownumber;

Résultat:
Insérez la description de l'image ici
Ensuite, en utilisant les résultats ci-dessus, la dernière exigence est la requête de rang <= 2:

select id,age,name,sex
from 
(select id,age,name,sex,
row_number() over(partition by sex order by age desc) as rank
from t_rownumber) tmp
where rank<=2;

résultat:
Insérez la description de l'image ici

3.6 Fonction de conversion

Fonction: exploser (). Les données sont les suivantes

1,zhangsan,化学:物理:数学:语文
2,lisi,化学:数学:生物:生理:卫生
3,wangwu,化学:语文:英语:体育:生物

1. Mappage dans un tableau

create table t_stu_subject(id int,name string,subjects array<string>)
row format delimited fields terminated by ','
collection items terminated by ':';

2. Importez des données

load data local inpath '/usr/local/testJar/subject.txt' overwrite into table t_stu_subject;

Insérez la description de l'image ici
3
Insérez la description de l'image ici
Après avoir " explosé " le champ du tableau avec explode () , utilisez le résultat de cette explosion pour trouver une leçon pour la déduplication:

select distinct tmp.sub
from 
(select explode(subjects) as sub from t_stu_subject) tmp;

résultat:
Insérez la description de l'image ici

Quatre cas complet

4.1 Utiliser HQL pour faire des statistiques

Besoin d'utiliser la ruche comme wordcount, il existe le fichier texte suivant word.txt,

hello tom hello jim
hello rose hello tom
tom love rose rose love jim
jim love tom love is what
what is love

1. Créez un tableau

create table t_wc(sentence string);

2. Importez des données

load data local inpath '/usr/local/testJar/word.txt' overwrite into table t_wc;

3. Requête de déclaration

SELECT word
    ,count(1) as cnts
FROM (
    SELECT explode(split(sentence, ' ')) AS word
    FROM t_wc
    ) tmp
GROUP BY word
order by cnts desc;

Affichage des résultats
Insérez la description de l'image ici

Pour résumer

J'ai écrit ce blog parce que je travaillais récemment sur un projet d'entrepôt de données et j'ai expliqué clairement Hive. J'espère qu'il sera utile à tout le monde.

Je suppose que tu aimes

Origine blog.csdn.net/shujuelin/article/details/114652663
conseillé
Classement