D'où vient la Ruche de stocker des fichiers dans HDFS?
Je voudrais savoir comment trouver la correspondance entre la Ruche des tables et le nombre réel de fichiers HDFS (ou plutôt, de répertoires) qu'ils représentent. J'ai besoin d'accéder à la table des fichiers directement.
Où Ruche de stocker ses fichiers dans HDFS?
- Voir aussi stackoverflow.com/a/13186631/7154924.
Vous devez vous connecter pour publier un commentaire.
L'emplacement où elles sont stockées sur le HDFS est assez facile à comprendre une fois que vous savez où chercher. 🙂
Si vous allez à
http://NAMENODE_MACHINE_NAME:50070/
dans votre navigateur, cela devrait vous amener à une page avec unBrowse the filesystem
lien.Dans le
$HIVE_HOME/conf
répertoire, il y est lehive-default.xml
et/ouhive-site.xml
qui a lehive.metastore.warehouse.dir
de la propriété. Cette valeur est l'endroit où vous voulez naviguer après avoir cliqué sur leBrowse the filesystem
lien.Dans la mienne, c'est
/usr/hive/warehouse
. Une fois que je navigue à cet endroit, je vois le nom de mes tables. En cliquant sur un nom de table (qui est juste un dossier) exposera ensuite les partitions de la table. Dans mon cas, j'ai actuellement ne l'ai partitionné surdate
. Quand je clique sur le dossier à ce niveau, je vais donc voir les fichiers (plus de partitionnement aura plus de niveaux). Ces fichiers sont où les données sont enregistrées sur le HDFS.Je n'ai pas tenté d'accéder à ces fichiers directement, je suis en supposant qu'il peut être fait. Je prendrais le plus GRAND soin, si vous envisagez de les éditer. 🙂
Pour moi, j'en avais trouver un moyen de faire ce dont j'ai besoin sans accès direct à la Ruche des données sur le disque. Si vous avez besoin d'accéder à des données brutes, vous pouvez utiliser une requête de la Ruche et afficher le résultat dans un fichier. Elles ont exactement la même structure (séparateur entre les colonnes, ect) que les fichiers sur le
HDFS
. Je ne requêtes comme ça tout le temps et les convertir en CSVs.La section sur comment écrire des données à partir de requêtes sur le disque est https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML#LanguageManualDML-Writingdataintothefilesystemfromqueries
Mise à JOUR
Depuis Hadoop 3.0.0 - Alpha 1 il y a un changement dans les numéros de port par défaut. NAMENODE_MACHINE_NAME:50070 changements à NAMENODE_MACHINE_NAME:9870. Utiliser ce dernier, si vous êtes en cours d'exécution sur Hadoop 3.x. La liste complète des changements de ports sont décrites dans HDFS-9427
Ruche tableaux peuvent ne pas nécessairement être stockées dans un entrepôt (puisque vous pouvez créer des tables situé n'importe où sur le HDFS).
Vous devez utiliser
DESCRIBE FORMATTED <table_name>
commande.Veuillez noter que les partitions peuvent être stockés dans des endroits différents et d'obtenir l'emplacement de la
alpha=foo/beta=bar
partition que vous auriez à ajouterpartition(alpha='foo',beta='bar')
après<table_name>
.Dans la Ruche type de terminal:
(il affichera le chemin d'accès)
set
commande fait un "get".Il est aussi très possible que de taper
show create table <table_name>
dans la ruche de la cli va vous donner l'emplacement exact de votre table de la ruche.describe formatted <table_name>;
à l'intérieur de la ruche shell.Avis de la "Localisation" de la valeur qui indique l'emplacement de la table.
Résumer quelques points posté plus tôt,
dans hive-site.xml, propriété de la ruche.metastore.entrepôt.dir indique l'emplacement où les fichiers situés sous hadoop HDFS
Pour afficher les fichiers, utilisez cette commande:
ou
testé sous hadoop-2.7.3, la ruche-2.1.1
Si vous regardez la hive-site.xml fichier vous verrez quelque chose comme ceci
/usr/ruche/entrepôt est l'emplacement par défaut pour tous les tableaux.
Les tables externes peuvent être stockés à un emplacement différent.
describe formatted <table_name>
est la ruche commande shell qui peut être utilisé plus généralement pour trouver l'emplacement des données relatives à une table de la ruche.Dans la Ruche, les tables sont en fait stockées dans quelques endroits. Plus précisément, si vous utilisez des partitions (ce qui devrait, si vos tables sont très grandes ou de la culture), puis de chaque partition peut avoir son propre espace de stockage.
Pour montrer l'emplacement par défaut où les données de la table ou les partitions sont créées si vous créez via par défaut de la RUCHE de commandes: (
insert overwrite ... partition ...
et tel):Pour montrer l'emplacement réel d'une partition à l'intérieur d'un tableau de la RUCHE, au lieu de faire ceci:
Si vous regardez dans votre système de fichiers où une table "doit" vivre, et vous ne trouvez pas les fichiers, il est très probable que la création de la table (généralement de façon incrémentielle) par la création d'une nouvelle partition et en soulignant que la partition à un autre endroit. C'est une excellente façon de bâtir des tableaux de choses comme le quotidien des importations provenant de tiers, tels, ce qui évite d'avoir à copier les fichiers ou de les stocker plus d'une fois dans des endroits différents.
Un autre moyen de vérifier où une table est stockée serait exécuter cette requête sur le ruche interface interactive:
où table_name est le nom de l'objet table.
Un exemple pour la requête ci-dessus sur les "clients" de la table serait quelque chose comme ceci:
EMPLACEMENT dans l'exemple ci-dessus est l'endroit où vous devriez vous concentrer sur. C'est votre hdfs emplacement de la ruche de l'entrepôt.
N'oubliez pas d'aimer si vous aimez cette solution. Cheers!
Dans le bac à sable , vous devez aller pour /apps/ruche/entrepôt/et normal cluster /utilisateur/ruche/entrepôt
Ruche de la base de données n'est rien, mais répertoires dans HDFS avec .db extensions.
Donc, à partir d'un hôte Unix ou Linux, qui est connecté à HDFS, recherche par la suite en fonction du type de HDFS distribution:
hdfs dfs -ls -R /2>/dev/null|grep db
ou
hadoop fs -ls -R /2>/dev/null|grep db
Vous verrez le chemin d'accès complet .db répertoires de base de données. Tous les tableaux seront résidant sous respectifs .db répertoires de base de données.