- Hive と Hadoop
- ダウンロード時のエラー群
- Caused by: java.net.ConnectException: Connection refused
- FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
- org.apache.hadoop.hive.metastore.HiveMetaException: Schema initialization FAILED! Metastore state would be inconsistent
- java.lang.RuntimeException: com.ctc.wstx.exc.WstxParsingException: Illegal character entity: expansion character
- Exception in thread “main” java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
- まとめ
Hive と Hadoop
Hadoop ファミリーの主要なメンバー
Hadoop
HadoopはMapReduceというGoogleの論文を基にしたビッグデータの分散処理を目的に作られたOSSです。
HDFSという分散ファイルシステムで処理能力をあげようとしています。
ビッグデータ用なのでスループットは大きいですが、リアルタイムに処理するのは苦手なため主にバッチ処理などで使われると思います。
最近よく話題になるSparkやNoSQLのHbaseなどもだいたいHadoopと協力して動いているのでHadoopエコシステムとか言われています。
Hive
SQLとほぼ同じようにかけます。SQLと同じように書くことでMapReduceの処理が行えます。
SQLと同じといってもTableのDropだったり、微妙な書き方の違いがあるので注意したほうがいいです。
環境構築が今までの中で一番大変だった
これは相当苦労してしまったので、自分のための備忘録として残しておきたいです。
CentOSをvirtualBoxで設定する方法は前回の記事で書きました。
なぜMacのローカル環境で構築しなかったかというと、失敗してカオスになったからです。
もはや失敗してもすぐに最初からやり直せる環境があったほうが便利ということに気づきVirtualBoxを使用しています。
Hadoop 3.1.0とHive3.1.0をダウンロード
wget のインストール
yum update
yum groupinstall 'Development tools'
yum install wget
これでwgetが使えるようになりました。
yum updateあたりでもかなりのエラーが出たのでエラー群のところに書いておきます。
だいたいがPermission Errorだったりでした。
Javaのインストール
Oracleからwgetでダウンロードできますが、自分の場合はできなかったので別の方法でやりました。
yum install java-1.8.0-openjdk
vi ~/.bashrcでbashrcファイルを開き編集
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-opemjdk-.../jre
編集後に
source .bashrc
これをすることでHadoopとHiveのダウンロードが可能になります。
Hadoopのインストール
wget http://ftp.riken.jp/net/apache/hadoop/common/hadoop-3.1.0/hadoop-3.1.0.tar.gz tar -xzvf hadoop-3.1.0.tar.gz mv hadoop-3.1.0.tar.gz /usr/
vi ~/.bashrcでbashrcファイルを開き編集
export HADOOP_HOME=/usr/hadoop-3.1.0 export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$JAVA_HOME/bin:$PATH
編集後に
source .bashrc
これでだいたいの設定は終了です。Hadoopはうまくいきやすいです。
derbyのインストール
Hiveのデータをセーブするデータベースがわりに使用します。
wget http://ftp.riken.jp/net/apache/db/derby/db-derby-10.14.2.0/db-derby-10.14.2.0-bin.tar.gz tar -xzvf db-derby-10.14.2.0-bin.tar.gz mv db-derby-10.14.2.0-bin.tar.gz /usr/
vi ~/.bashrcでbashrcファイルを開き編集
export DERBY_HOME=/usr/derby
export PATH=$PATH:$DERBY_HOME/bin
export CLASSPATH=$CLASSPATH:$DERBY_HOME/lib/derby.jar:$DERBY_HOME/lib/derbytools.jar
これでダウンロードと設定が終了です。
Hiveのインストール
wget http://ftp.riken.jp/net/apache/hive/hive-3.1.0/apache-hive-3.1.0-bin.tar.gz tar -xzvf apache-hive-3.1.0-bin.tar.gz apache-hive-3.1.0-bin /usr/hive-3.1.0 cd /usr/hive-3.1.0/conf cp hive-default.xml.template hive-site.xml
vi usr/hive-3.1.0/conf/hive-site.xml ファイルを開き編集
<property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:derby:;databaseName=/usr/hive-3.1.0/conf/metastore_db;create=true </value> <description>JDBC connect string for a JDBC metastore </description> </property> <property> <name>hive.querylog.location</name> <value>/usr/hive-3.1.0/iotmp</value> <description>Location of Hive run time structured log file</description> </property> <property> <name>hive.exec.local.scratchdir</name> <value>/usr/hive-3.1.0/iotmp</value> <description>Local scratch space for Hive jobs</description> </property> <property> <name>hive.downloaded.resources.dir</name> <value>/usr/hive-3.1.0/iotmp</value> <description>Temporary local directory for added resources in the remote file system.</description> </property> <property> <name>system:java.io.tmpdir</name> <value>/usr/hive-3.1.0/tmp</value> </property> <property> <name>system:user.name</name> <value>USERNAME</value> </property> </configuration>
このコードを 追加する形で貼り付けます。色々な設定です。
最後にHiveをインストールして実行する前にこのコマンドを打ちます。
データベースを初期化するコマンドですが、先にHiveコマンドを打っていた場合、metastore_dbが不完全なまま自動的に作られてエラーになるので気をつけたほうがいいです。
その場合は一度create_dbを削除したのちにこのコマンドを実行します。
$HIVE_HOME/bin/schematool -dbType derby -initSchema
hive > show tables;
このコマンドでエラーが出なければ大丈夫です。
ここのHiveでかなりのエラーが出たので治し方をまとめて下の方に書いておきます。
最終的なbashrcの様子
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-3.b13.el7_5.x86_64/jre export HADOOP_HOME=/usr/hadoop-3.1.0 export PATH=/usr/hadoop-3.1.0/bin:/usr/hadoop-3.1.0/sbin:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-3.b13.el7_5.x86_64//bin:/usr/hadoop-3.1.0/bin:/usr/hadoop-3.1.0/sbin:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-3.b13.el7_5.x86_64//bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/{username}/.local/bin:/home/{username}/bin export HIVE_HOME=/usr/hive-3.1.0 export PATH=$PATH:$HIVE_HOME/bin export DERBY_HOME=/usr/derby export PATH=$PATH:$DERBY_HOME/bin export CLASSPATH=$CLASSPATH:$DERBY_HOME/lib/derby.jar:$DERBY_HOME/lib/derbytools.jar
ダウンロード時のエラー群
Caused by: java.net.ConnectException: Connection refused
おそらくderbyあたりの設定がうまくいっていないときにでるエラー。
create_dbの初期化ができていないか、パスがおかしいのでもうインストールし治したほうがいいかも。
create_dbを消して再度初期化し、パスを入れなおすと直りました。
FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
create_dbを消して再度初期化し、パスを入れなおすと直りました。
org.apache.hadoop.hive.metastore.HiveMetaException: Schema initialization FAILED! Metastore state would be inconsistent
create_dbを消して再度初期化し、パスを入れなおすと直りました。
java.lang.RuntimeException: com.ctc.wstx.exc.WstxParsingException: Illegal character entity: expansion character
cp hive-default.xml.template hive-site.xml
このデフォルトのテンプレートが文字化けしています。3200行目くらいにエンコードミスでおかしくなった箇所があるので削除します。これでうまくいきます。
Exception in thread “main” java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
完全にこれを参考にしました。
なぜうまくいくのかはこれから調べます、、
まとめ
- SandBoxとかあらかじめ準備されているものを使えばよかった