L'intégration d'Apache Tez avec Apache Hive permet d'optimiser considérablement les performances des requêtes en remplaçant le moteur MapReduce par défaut. Ce guide détaille les étapes techniques nécessaires pour déployer, configurer et valider Tez au sein d'un cluster Hadoop existant.
- Déploiement local de l'archive Tez
Commencez par extraire l'archive binaire de Tez dans le répertoire d'installation de vos modules logiciels.
tar -xzf apache-tez-0.9.1-bin.tar.gz -C /usr/local/bigdata/
mv /usr/local/bigdata/apache-tez-0.9.1-bin /usr/local/bigdata/tez-engine
- Configuraton des variables d'environnement Hive
Accédez au répertoire de configuration de Hive et éditez le script d'environnement pour inclure les chemins vers les bibliothèques Tez.
vim /usr/local/bigdata/hive/conf/hive-env.sh
Ajoutez les déclarations suivantes en adaptant les chemins à votre infrastructure :
# Répertoire racine de Hadoop
export HADOOP_INSTALL_DIR=/usr/local/bigdata/hadoop
# Répertoire des configurations Hive
export HIVE_CONF_PATH=/usr/local/bigdata/hive/conf
# Chemin d'installation de Tez
export TEZ_INSTALL_PATH=/usr/local/bigdata/tez-engine
export TEZ_CLASSPATH=""
# Construction dynamique du classpath Tez
for lib_file in $(find ${TEZ_INSTALL_PATH} -maxdepth 1 -name "*.jar"); do
export TEZ_CLASSPATH="${TEZ_CLASSPATH}:${lib_file}"
done
for lib_dep in $(find ${TEZ_INSTALL_PATH}/lib -name "*.jar"); do
export TEZ_CLASSPATH="${TEZ_CLASSPATH}:${lib_dep}"
done
# Injection des dépendances auxiliaires
export HIVE_AUX_JARS_PATH=${HADOOP_INSTALL_DIR}/share/hadoop/common/hadoop-lzo-0.4.20.jar${TEZ_CLASSPATH}
- Basculement du moteur d'exécution
Modifiez le fichier de configuration principal de Hive pour définir Tez comme moteur d'exécution par défaut.
<property>
<name>hive.execution.engine</name>
<value>tez</value>
</property>
- Définition des propriétés spécifiques à Tez
Créez un fichier de configuration dédié à Tez dans le répertoire de configuration de Hive.
vim /usr/local/bigdata/hive/conf/tez-site.xml
Insérez les paramètres XML suivants pour configurer les chemins HDFS et le service d'historique :
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property>
<name>tez.lib.uris</name>
<value>${fs.defaultFS}/apps/tez/tez-engine,${fs.defaultFS}/apps/tez/tez-engine/lib</value>
</property>
<property>
<name>tez.lib.uris.classpath</name>
<value>${fs.defaultFS}/apps/tez/tez-engine,${fs.defaultFS}/apps/tez/tez-engine/lib</value>
</property>
<property>
<name>tez.use.cluster.hadoop-libs</name>
<value>true</value>
</property>
<property>
<name>tez.history.logging.service.class</name>
<value>org.apache.tez.dag.history.logging.ats.ATSHistoryLoggingService</value>
</property>
</configuration>
- Distribution des bibliothèques sur HDFS
Les nœuds du cluster doivent pouvoir accéder aux jars de Tez via le système de fichiers distribué. Uploadez le répertoire Tez dans HDFS.
# Création de l'arborescence cible dans HDFS
hdfs dfs -mkdir -p /apps/tez
# Transfert des fichiers locaux vers HDFS
hdfs dfs -put /usr/local/bigdata/tez-engine /apps/tez/
# Vérification du transfert
hdfs dfs -ls /apps/tez/
- Validation du déploiement et tests fonctionnels
Assurez-vous que les services de base de Hadoop (HDFS et YARN) sont opérationnels, puis démarrez le service metastore de Hive en arrière-plan.
start-dfs.sh
start-yarn.sh
hive --service metastore &
Lancez l'interface en ligne de commande Hive et exécutez une série de requêtes de validation :
hive
-- Création d'une base de données de test
CREATE DATABASE IF NOT EXISTS analytics_db;
USE analytics_db;
-- Création d'une table et insertion de données
CREATE TABLE employees (emp_id INT, emp_name STRING);
INSERT INTO employees VALUES (101, 'Alice'), (102, 'Bob');
-- Requêtes de vérification
SELECT * FROM employees;
Si les requêtes s'exécutent sans erreur, connectez-vous à l'interface web de YARN (généralement accessible sur le port 8088). Dans l'onglet des applications, vérifiez que le type d'application pour les tâches Hive est bien indiqué comme TEZ, confirmant ainsi que le moteur d'exécution a été correctement substitué.