hiveを使うためのhadoop(HDFS)コマンド【hiveの初期設定】

hiveを使うためのhadoop(HDFS)コマンドの解説です。 最低限使うものだけに絞って紹介します。


質問や間違い指摘は何でもご連絡ください(^^)

@ts_3156



hadoop、hiveのインストール方法は下記の記事に書いています。

hiveの一番シンプルなインストール方法



HDFSを簡単に言うと、単なるディレクトリとファイルです


HDFSは、Hadoop Distributed File Systemです。直訳すると、「hadoop(はどぅーぷ)分散ファイルステム」です。名前の通り単なるファイルシステムの1つなので、普通のコマンドと同じようなコマンドが使えます。HDFSで使えるコマンドは以下の通りです。


# 自分のホームディレクトリにls。以下の2つは全く同じです。
hadoop dfs -ls
hadoop dfs -ls /user/[user_name]

# 特定のディレクトリにls
hadoop dfs -ls /user

# 特定のファイルにcat
hadoop dfs -cat [ファイルへの絶対パス]

# 特定のファイルにchmod。この場合はuserディレクトリを777にしている。
hadoop dfs -chmod 777 /user

# sudo権限でchmod。この場合はuserディレクトリを777にしている。
sudo -u hdfs hadoop dfs -chmod /user

# ここからはHDFSのコマンドではなく、hive向けのhadoopコマンド。
# 一応書いたけど、解説は次回…。
hadoop job -list
hadoop job -status
hadoop job -kill
hadoop job -set-priority

他にも、普段見慣れたmv、rm等のコマンドもあります。このページではhiveで必要なものしか解説しません。その他の詳細は以下のページを見てください。


HDFS File System Shell Guide

HDFSシェルコマンド一覧



hiveを使うために必要なHDFSコマンド


hiveで作ったDB、テーブルは/user/hiveというHDFSディレクトリにHDFSのファイルとして保存されます。そのため、hiveを使う時はまず最初にhiveユーザーにHDFSディレクトリへのアクセス権限を与える必要があります。以下のコマンドを実行してください。


# /userのパーミッションを777に変更
sudo -u hdfs hadoop dfs -chmod 777 /user

# 権限の確認。
hadoop dfs -ls /

# この結果が表示されれば成功
Found 2 items
drwxrwxrwt   - hdfs hdfs                0 2012-10-06 16:16 /tmp
drwxrwxrwx   - hdfs supergroup          0 2012-10-07 00:20 /user

/userというHDFSディレクトリのパーミッションが777(rwxrwxrwx)になっていれば成功です。今後hiveでDBやテーブルを作ると、/user/hive以下に同名のファイルが作られていきます。



hiveでDBとテーブルを試しに作ってみる


DBとテーブルを試しに作ってみます。単純なクエリはMySQLやその他のDBのクエリとほとんど同じです。

上記の手順が成功していれば、DBとテーブルを普通に作れます。もし失敗していると、パーミッションがない等のエラーがでます。


$ hive

hive> show databases;

# 何もないか、管理用のDBしか表示されないはずです。

hive> create database [db_name];
hive> show databases;

# 作ったDBが表示されます。

hive> use [db_name];
hive> create table [table_name](id string);
hive> show tables;

# 作ったテーブルが表示されます。

次に、作ったDBやテーブルをHDFS上から確認していきます。


# hiveから抜けるにはこのコマンドを実行します。
hive> exit;

$ hadoop dfs -ls /user

# このディレクトリが増えているはずです
drwxrwxrwx   - root supergroup          0 2012-10-07 00:20 /user/hive

$ hadoop dfs -ls /user/hive

# さらにwarehoueディレクトリが作られているはずです。
drwxrwxrwx   - root supergroup          0 2012-10-07 00:20 /user/hive/warehouse

$ hadoop dfs -ls /user/hive/warehouse/[作ったDB名]/[作ったテーブル名]

# 上記のように、作ったDBとテーブルに対応するディレクトリが増えているはずです。

もしテーブルへのINSERTまでやっていると、さらに下の階層まで続きます。



hiveQLの簡単なクエリサンプルはまた今度


疲れたのでまた今度にします。


以下のような内容を近いうちに書こうかなぁとは思ってます。


  1. hiveでのシンプルなクエリサンプル
  2. Apacheのアクセスログを用いたPV/UUの集計
  3. 効率的なクエリの書き方

ちなみに、
mixiでは、hadoopやhive等の最新技術を使ってサービスをばしばし改善していけるエンジニアを募集しています!(採用ページにはあんまり書いてないですが大募集中です!)



質問、間違い連絡はお気軽にどうぞ


質問や間違い指摘は何でもご連絡ください(^^)

@ts_3156



著者プロフィール
Webサイトをいくつか作っています。
著者プロフィール