ラベル hadoop の投稿を表示しています。 すべての投稿を表示
ラベル hadoop の投稿を表示しています。 すべての投稿を表示

2012年8月30日木曜日

【hadoop】hiveのインストール方法と簡単な実行サンプル

■Hiveとは
Hadoop上のHDFSのデータにSQLを使ってアクセスできるクライアントツールです
「hadoop fs」等なかなかに扱いにくHDFSアクセス用のコマンドをSQLでできるようにしようというコンセプト
insert、selectなど作は全てhadoop上でMapReduceアルゴリズムに基づき動作する

■事前
https://cwiki.apache.org/confluence/display/Hive/GettingStarted
Javaの1.6以上とHadoopの0.2以上が必要です
インストールがまだの方は、以下の記事を参考にインストールしてください
Hadoopインストール方法:
http://kakakikikeke.blogspot.com/2012/08/centos56hadoop.html
http://kakakikikeke.blogspot.com/2012/08/hadoop.html
Javaインストール方法:
http://kakakikikeke.blogspot.com/2012/06/centosjenkinsjavatomcatantgit.html

■インストール
wget http://ftp.tsukuba.wide.ad.jp/software/apache/hive/hive-0.9.0/hive-0.9.0.tar.gz
tar xvf hive-0.9.0.tar.gz
mv hive-0.9.0 hive
mv hive /usr/local/
emacs .bashrc
HIVE_HOME=/usr/local/hiveを設定します
PATH=$HIVE_HOME/bin:$PATHを追加します
cd /usr/local/hive/
mkdir logs
cd /usr/local/hive/conf
mv hive-log4j.properties.template log4j.properties
ログの出力先をhive.log.dir=/usr/local/hive/logs/に変更しました
mv hive-env.sh.template hive-env.sh
chmod 755 hive-env.sh
mv hive-exec-log4j.properties hive-exec-log4j.properties
mv hive-default.xml.template hive-site.xml
ログは/usr/local/hive/logs配下に保存されますが、セッション情報などは/tmp/rootに保存されています(rootユーザで実行した場合)

■実行
start-all.sh(最低でも擬似分散で動作するhadoop環境が必要です)
hive
hive>show databases;
OK
default
Time taken: 6.06 seconds
hive> CREATE TABLE counter (count int, str string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
hive> LOAD DATA LOCAL INPATH '/var/tmp/test.txt' OVERWRITE INTO TABLE counter;
ここで指定しているファイルはローカルファイルです(HDFS上にあるファイルも指定できますが、うまくinsertできませんでした・・・)
あらかじめTSV形式のtest.txtを作成しておいてください
なぜTSVかというとテーブルの定義で「このテーブルはtsv形式ですよ」と宣言しているためです
hive> SELECT * FROM counter;
TSVファイルに書かれている値がインサートされていることがわかると思います
ここで実行してインサートされたデータはファイルとして~/metastore_db配下に保存されます
どうやらApache Derbyが内部的に動作しているようです

■考察
実際に使用するときの流れとしては
  1. hadoop上で解析(頑張ってMapReduceを実装)
  2. 結果の出力ファイルをHDFS上からローカルのある形式で持ってくる(今回はTSV形式)
  3. Hiveを使用してテーブルにインサート
  4. あとはSELECTをうまく使用して結果を取得解析
になるのかなーと勝手に思っています
あとはいきなりHiveでデータを突っ込んでSQLで頑張るかですかね・・・

■参考
https://cwiki.apache.org/Hive/hiveclient.html
JavaからHiveを利用できるクライアントもあるようです
http://wiki.pentaho.com/display/BAD/Loading+Data+into+Hive




2012年8月24日金曜日

hadoopで分散処理をやってみた

■概要
前回はhadoopをスタンドアローンモードで実行できるところまで紹介しました
今回は1台で擬似的に分散処理させることができるモード(Pseudo-Distributed Mode)を試してみます

■事前準備、インストール
前回の記事参照
http://kakakikikeke.blogspot.com/2012/08/centos56hadoop.html

■擬似分モードの設定
emacs /etc/hadoop/core-site.xml
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
emacs /etc/hadoop/hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
emacs /etc/hadoop/mapred-site.xml
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>

ローカルへのsshノンパス設定をします
http://kakakikikeke.blogspot.com/2012/03/10ssh.html

cd /usr/bin
chmod 755 update-hadoop-env.sh stop-mapred.sh stop-jobhistoryserver.sh stop-dfs.sh stop-balancer.sh stop-all.sh start-mapred.sh start-jobhistoryserver.sh start-dfs.sh start-balancer.sh start-all.sh slaves.sh
hadoop namenode -format
start-all.sh
jps
JobTracker,NameNode,DataNode,SecondaryNameNode
が動作していることを確認します

各プロセスのログは/var/log/hadoop/root/配下にあります

動作しているポートは以下になります
netstat -an | grep 50070(NameNode)
netstat -an | grep 50030(JobTracker)
telnet yoshi3 50070
ではどうやらJettyが動作しているようです
ブラウザでアクセスすると現在の分散クラスタの状況が確認できます

■実行
cp -ip /usr/share/hadoop/hadoop-examples-1.0.3.jar .

例1
hadoop fs -put /etc/hadoop input
hadoop fs -ls input/hadoop
hadoop専用の特殊なパスに保存される様子・・・(DFS上に保存されている)

例2
hadoop jar hadoop-examples-1.0.3.jar grep input/hadoop output 'map*'
hadoop fs -ls output
hadoop fs -cat output/part-00000

■停止
stop-all.sh
jps
NameNode系のプロセスが停止していることを確認する


簡単ですが、以上でPseudo-Distributed Modeの紹介を終わります
次は実際に自分の作ったものをhadoopに処理させるところまでやってみたいなー

2012年8月23日木曜日

CentOS5.6にhadoopをインストールする方法

■概要
CentOS5.6にhadoopをインストールして「Local (Standalone) Mode」(スタンドアローンモード)でhadoopを実行してみます

■事前準備
Javaのインストール
http://kakakikikeke.blogspot.com/2012/06/centosjenkinsjavatomcatantgit.html

SSHのインストール
スタンドアローンモードではいらないかもしれません
というかまず入っていないってことはないと思うので気にしないで大丈夫ですw

■インストール
wget http://ftp.meisei-u.ac.jp/mirror/apache/dist/hadoop/common/hadoop-1.0.3/hadoop-1.0.3-1.x86_64.rpm
rpm -ivh hadoop-1.0.3-1.x86_64.rpm
vi /etc/hadoop/hadoop-env.sh
JAVA_HOMEが正しく設定されているか確認する

自分がrpmからインストールしたときは特に依存関係で怒られることはありませんでしたが、もし怒られた場合は必要に応じてインストールしてみてください

■スタンドアローンモードで実行
cp -ip /usr/share/hadoop/hadoop-examples-1.0.3.jar .
mkdir input
cp -ip /etc/hadoop/*.xml input/
emacs /etc/hadoop/hadoop-env.sh
#export HADOOP_CLIENT_OPTS="-Xmx128m $HADOOP_CLIENT_OPTS"
export HADOOP_CLIENT_OPTS="-Xmx1024m $HADOOP_CLIENT_OPTS"
※128MBだとOutOfMemoryErrorになりました
※実際にメモリの空き容量を見ながら実行したところ150MBほど利用していました
hadoop jar hadoop-examples-*.jar grep input output 'map[a-z.]+'
outputフォルダにgrepで出現した行のカウント結果が出力されます

簡単ですが、hadoop単体での動作は以上です
次は本格的な分散処理とJava以外の動作も試してみたいなーと思ってます