4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

hive, Hadoopの環境構築でつまづいた話

Posted at

Hadoopの勉強をするためにインストールをしようとしたのですが、つまづいて一日潰した話。
HadoopのチュートリアルやHiveの説明は一切行わないので、似たようなエラーでここにたどり着いた人の役に立てば、と思います。

インストール環境

macOS Mojave

インストールしたかったもの

Hadoop==3.2.1
hive==3.1.2

結論

Java8のインストールとHadoop, Hiveのguava-XX.X-jre.jarのバージョンを統一することで解決可能。

Java8のインストールはHomebrewで行います。
OracleのJavaは有償化されてしまったため、オープンソースのjdkをインストールします。以下のコマンドを実行すればOK。

brew cask install adoptopenjdk/openjdk/adoptopenjdk8

Hadoop, Hiveのインストールについては以下のコマンドでOK。

brew install hadoop
brew install hive

詰まっていた原因その1

Hadoopを使ってSQLライクにクエリを行いたかったため、Hadoop・Hiveをインストールすることに決めました。
HadoopはJavaのインストールが必須なため
以下のコマンドを実行して、javaをインストールしました。(これが原因だと気づかずに…)

brew cask install adoptopenjdk

上記コマンドでインストールされたjavaのバージョンは13。
しかし、現行の最新版であるHadoop(3.2.1)はJava8対応となっておりバージョンのズレが生じてしまっていました。

詰まっていた原因その2

その1に記したjavaのバージョン問題に気づいた後にjava8をインストールし直し、事態は解決にむかうかと思われました。
実際、Hadoopのチュートリアルとも言われるwordcountのプログラムは動きました。
しかし、Hiveのコマンドは一切動かず以下のエラーが出るばかり。

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/Cellar/hive/3.1.2/libexec/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/Cellar/hadoop/3.2.1/libexec/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
	at org.apache.hadoop.conf.Configuration.set(Configuration.java:1357)
	at org.apache.hadoop.conf.Configuration.set(Configuration.java:1338)
	at org.apache.hadoop.mapred.JobConf.setJar(JobConf.java:536)
	at org.apache.hadoop.mapred.JobConf.setJarByClass(JobConf.java:554)
	at org.apache.hadoop.mapred.JobConf.<init>(JobConf.java:448)
	at org.apache.hadoop.hive.conf.HiveConf.initialize(HiveConf.java:5141)
	at org.apache.hadoop.hive.conf.HiveConf.<init>(HiveConf.java:5099)
	at org.apache.hadoop.hive.common.LogUtils.initHiveLog4jCommon(LogUtils.java:97)
	at org.apache.hadoop.hive.common.LogUtils.initHiveLog4j(LogUtils.java:81)
	at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:699)
	at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:683)
	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:498)
	at org.apache.hadoop.util.RunJar.run(RunJar.java:323)
	at org.apache.hadoop.util.RunJar.main(RunJar.java:236)

原因となっていたのは、HadoopとHiveの実行ファイルのバージョンが異なっていたことでした。
Hadoop側のguavaはguava-27.0-jre.jarだったのに対して、
Hive側のguavaはguava-19.0-jre.jar。
この相違が原因でコマンドの実行が妨げられていたのです。

参考になったURL

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?