CentOSでSparkを試してみる(2015年秋)


CentOSでHadoopとHiveを試してみるの続き。
よく、SparkがHadoopの機能の1つみたいに紹介されているが、全く違うもの。どちらかというとscalaの拡張機能と考えた方が近いか。もちろん、Hadoopの処理結果をHDFS経由で利用はできます。

インストール

scala

まずはScalaのインストールから。

wget http://downloads.typesafe.com/scala/2.11.7/scala-2.11.7.tgz
tar zxfv scala-2.11.7.tgz
mv scala-2.11.7 /usr/

spark

wget http://ftp.riken.jp/net/apache/spark/spark-1.5.2/spark-1.5.2-bin-hadoop2.6.tgz
tar zxfv spark-1.5.2
mv spark-1.5.2 /usr/

SCALA_HOME,SPARK_HOME,PATHの設定

.bashrcに下記を書く。

export SCALA_HOME=/usr/scala-2.11.7
export SPARK_HOME=/usr/spark-1.5.2
export PATH=$SCALA_HOME/bin:$PATH

spark(コンソール)の起動

cd $SPARK_HOME
bin/spark-shell
.
.
.
scala>

となれば、一応動いている。
インタラクティブシェルを抜けるには、

scala> :q

とする。

sacla> :quiteでもよい。

Hadoopとの連携?

何もHadoopと連携しなければいけないものでも無いが、HDFS上のファイルを処理してみる。
ファイルとしては、前にHiveで生成したファイル(/outpu/000000_0)を利用してみる。

scala> val hdfs_file = sc.textFile("hdfs://127.0.0.1:9000/output/000000_0")

scala> hdfs_file.count()
res4: Long = 5

scala> hdfs_file.filter(line => line.contains("新")).foreach(println)
新橋店100
新宿店340

Spark SQL

Sparkでは標準?でSQLインターフェースを利用することもできる。
以下の例では、

新橋店,100
新宿店,340
池袋店,874
渋谷店,400

という内容の/root/data.csvファイルがあることを前提とした操作。

cd $SPARK_HOME
bin/spark-sql

spark-sql>
spark-sql> show databases;
spark-sql> create database testdb;

create table sales(shop string,sales int)
row format delimited fields terminated by ','
stored as textfile;

load data local inpath "/root/data.csv" into table sales;

select * from sales where shop like '新%';

なぜか、上記data.csvファイルをHDFSコピーして、

load data inpath “/input/data.csv" into table sales;

とすると、

15/11/17 04:01:37 INFO ParseDriver: Parsing command: load data inpath “/input/data.csv" into table sales
MismatchedTokenException(15!=313)
    at org.antlr.runtime.BaseRecognizer.recoverFromMismatchedToken(BaseRecognizer.java:617)
.
.

といったエラーになる。これについては、引き続き調査します。たぶん初歩的な何か。