Spark Thrift Server起動手順メモ

Kazuki Koide

August 26, 2020

Sparkに組み込まれているThrift Serverを起動した時の手順のメモ。

環境

MySQLユーザー、データベース作成

MySQL側でhiveユーザーとmetastoreデータベースを作成する。Hiveにはデータベースを自動作成する機能があるが、それを使うとデータベースの文字コードがlatin1になってしまったので、マルチバイトユーザーは手で作成したほうが良いと思われる。

CREATE USER 'hive'@'%' IDENTIFIED BY 'hivepass';
CREATE DATABASE metastore DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANT ALL ON metastore.* TO 'hive'@'%';

MySQL テーブル作成

これもデータベースと同様、Hiveにはテーブルを自動作成する機能があるのだが、バグっているのかうまく動かないためこれも手で作成した。Spark組み込みのHiveのバージョンが2.3.7だったため、GitHubの以下からDDLをダウンロードしてMySQL上で実行した。

hive/hive-schema-2.3.0.mysql.sql at master · apache/hive

実行する前にlatin1utf8に、latin1_binutf8_general_ciにそれぞれ置換した。また、utf8の場合インデックスに指定できるカラムの最大長が256バイトであるため、varchar(767)varchar(256)に置換した。

MySQLドライバのインストール

Mavenのリポジトリからダウンロードして所定の場所に置く。

curl -o ${SPARK_HOME}/jars/mysql-connector-java-8.0.21.jar https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.21/mysql-connector-java-8.0.21.jar

hive-site.xmlを作成

${SPARK_HOME}/conf/hive-site.xml を作成して以下の設定を記述。

<configuration>
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://{hostname}/metastore</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>hive</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>hivepass</value>
    </property>
    <property>
        <name>hive.metastore.schema.verification</name>
        <value>false</value>
    </property>
</configuration>

Thrift serverを起動

下記スクリプトを実行してThrift serverを起動する。(オプション省略)

${SPARK_HOME}/sbin/start-thriftserver.sh \
  --name spark-thrift-server \
  --master <master-uri>  \
  ...

懸念点1

hive.metastore.schema.verification オプションをfalseにしないと現状起動しない。falseにしてもログファイルに以下のログが出力される。恐らくメタストアのバージョンが取得できていないことが原因と思われるが、なぜ取得できないのかが不明。(情報求む)

WARN ObjectStore: Version information not found in metastore. hive.metastore.schema.verification is not enabled so recording the schema version 2.3.0

懸念点2

Setting up hidden External Hive Metastore (MySQL),ADLS access configuration in Databricks Spark Cluster によると、lower_case_table_names 2に設定したほうが良いらしい。

参考サイト