hadoop のビルドについては、こちらを参考に!

■各バージョン

  • CentOS 7 x86_64 (2014_09_29) EBS HVM
  • hadoop-2.6.0
  • maven-3.2.5
  • hive-1.1.0

Hive

基本は、公式サイトを参考に、進めていきます。

途中で、エラー出たりしたので、そこら辺もメモしておきます。

1. SVN repository から、コンパイル

1
2
3
$ svn co http://svn.apache.org/repos/asf/hive/trunk hive
$ cd hive
$ mvn clean install -Phadoop-2,dist

と公式通りにやると、ここでエラー発生。。

mvn実行時に、オプションを付けてやることで、無事成功した。

1
2
3
4
# Before
# mvn clean install -Phadoop-2,dist
# After
$ mvn clean install -DskipTests -Phadoop-2,dist

以降の{version}は、インストールされたもの(lsとかで確認して)に置き換えてください。

1
$ cd packaging/target/apache-hive-{version}-SNAPSHOT-bin/apache-hive-{version}-SNAPSHOT-bin

2. パスを通す

bashrc に HIVE_HOME を指定して置きます。

{version} や homeディレクトリから hive までのパスは、適宜置き換えてください。

1
export HIVE_HOME=/home/hadoop/hive/packaging/target/apache-hive-{version}-SNAPSHOT-bin/apache-hive-{version}-SNAPSHOT-bin

3. ディレクトリ作成

以下を実行して、ファイルを保存するディレクトリを作成しておきます。

1
2
3
4
$ $HADOOP_HOME/bin/hadoop fs -mkdir       /tmp
$ $HADOOP_HOME/bin/hadoop fs -mkdir       /user/hive/warehouse
$ $HADOOP_HOME/bin/hadoop fs -chmod g+w   /tmp
$ $HADOOP_HOME/bin/hadoop fs -chmod g+w   /user/hive/warehouse

4. Hive 起動

以下のコマンドで、hadoop, YARN を起動させます。

1
2
$ start-dfs.sh
$ start-yarn.sh

いよいよ Hive を起動させます。

がいきなりこんなエラーが出て、出鼻を挫かれます。。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
$ $HIVE_HOME/bin/hive
Logging initialized using configuration in jar:file:/home/hadoop/hive/packaging/target/apache-hive-1.2.0-SNAPSHOT-bin/apache-hive-1.2.0-SNAPSHOT-bin/lib/hive-common-1.2.0-SNAPSHOT.jar!/hive-log4j.properties
[ERROR] Terminal initialization failed; falling back to unsupported
java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
	at jline.TerminalFactory.create(TerminalFactory.java:101)
	at jline.TerminalFactory.get(TerminalFactory.java:158)
	at jline.console.ConsoleReader.<init>(ConsoleReader.java:229)
	at jline.console.ConsoleReader.<init>(ConsoleReader.java:221)
	at jline.console.ConsoleReader.<init>(ConsoleReader.java:209)
	at org.apache.hadoop.hive.cli.CliDriver.getConsoleReader(CliDriver.java:773)
	at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:715)
	at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:675)
	at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:615)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
	at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
Exception in thread "main" java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
	at jline.console.ConsoleReader.<init>(ConsoleReader.java:230)
	at jline.console.ConsoleReader.<init>(ConsoleReader.java:221)
	at jline.console.ConsoleReader.<init>(ConsoleReader.java:209)
	at org.apache.hadoop.hive.cli.CliDriver.getConsoleReader(CliDriver.java:773)
	at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:715)
	at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:675)
	at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:615)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
	at org.apache.hadoop.util.RunJar.main(RunJar.java:136)

調べてみると、Spark の部分にIssueと対処法が上がってました。

hadoop があるディレクトリにあるjarファイルを消すか、バックアップ取って動かすかします。

1
$ mv ~/home/hadoop/share/hadoop/yarn/lib/jline-0.9.94.jar ~/home/hadoop/share/hadoop/yarn/lib/jline-0.9.94.jar.bk

もう一度実行すると、無事起動しました。

1
$ $HIVE_HOME/bin/hive

これで、SQLライクに書きながら、ガンガンビッグなデータを扱えます!!