Shark-0.9.0安装配置运行实践

Shark(Hive on Spark)是UC Lab为Spark设计并开源的一款数据仓库系统,提供了分布式SQL查询引擎,它能够完全兼容Hive。首先,我们通过下面的图,看一下Shark与Hive的关系(http://shark.cs.berkeley.edu/img/shark-hive-integration.png):
shark-hive-integration
以前我们使用Hive分析HDFS中数据时,通过将HQL翻译成MapReduce作业(Job)在Hadoop集群上运行;而使用Shark可以像使用Hive一样容易,如HQL、Metastore、序列化格式、UDF等Shark都支持,不同的是Shark运行在Spark集群上执行计算,基于Spark系统所使用的RDD模型。官方文档给出的性能方面的数据是,使用Shark查询分析HDFS数据,能比Hive快30多倍,如图所示(http://shark.cs.berkeley.edu/img/perf.png):
perf
下面,我们通过安装配置Shark来简单地体验一下。

准备软件包

  • jdk-7u25-linux-x64.tar.gz
  • scala-2.10.3.tgz
  • apache-maven-3.2.1-bin.tar.gz
  • hadoop-1.2.1.tar.gz
  • spark-0.9.0-incubating-bin-hadoop1.tgz
  • hive-0.11-shark-0.9.0.tar.gz

环境变量配置

针对上述准备软件包,我们需要安装配置好JDK、Scala环境,保证Hadoop集群能够正常启动运行,同时Hive也能够执行正确地查询分析工作

export JAVA_HOME=/usr/java/jdk1.7.0_25/
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=$JAVA_HOME/lib/*.jar:$JAVA_HOME/jre/lib/*.jar

export SCALA_HOME=/usr/scala/scala-2.10.3
export PATH=$PATH:$SCALA_HOME/bin

export MAVEN_HOME=/home/shirdrn/cloud/programs/apache-maven-3.2.1
export PATH=$PATH:$MAVEN_HOME/bin

export HADOOP_HOME=/home/shirdrn/cloud/programs/hadoop-1.2.1
export PATH=$PATH:$HADOOP_HOME/bin
export HADOOP_LOG_DIR=/home/shirdrn/cloud/storage/hadoop-1.2.1/logs

export HIVE_HOME=/home/shirdrn/cloud/programs/hive-0.11-shark-0.9.0
export PATH=$PATH:$HIVE_HOME/bin

export SPARK_HOME=/home/shirdrn/cloud/programs/spark-0.9.0-incubating-bin-hadoop1
export PATH=$PATH:$SPARK_HOME/bin

export SHARK_HOME=/home/shirdrn/cloud/programs/shark-0.9.0
export PATH=$PATH:$SHARK_HOME/bin

Hive安装配置

这里,我们使用一个用来与Shark进行整合而开发的版本的Hive软件包,可以在这里https://github.com/amplab/hive/releases选择对应的版本。
例如,在主节点m1上准备Hive的软件包:

wget https://github.com/amplab/hive/archive/v0.11-shark-0.9.0.tar.gz
mv v0.11-shark-0.9.0 hive-0.11-shark-0.9.0.tar.gz
tar xvzf hive-0.11-shark-0.9.0.tar.gz

然后修改Hive的配置文件,指定在HDFS上的目录即可,如下所示:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
<property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/hive</value>
    <description>location of default database for the warehouse</description>
</property>
</configuration>

简单使用这样配置即可。

安装配置Shark

由于我之前先安装配置了Spark-0.9.0,没有找到对应版本的Shark(只找到了Shark-0.8.1的编译包),所以直接从github下载Shark-0.9.0分支的源码,使用sbt进行构建,执行如下命令行:

git clone https://github.com/amplab/shark.git -b branch-0.9.0 shark-0.9.0
cd shark-0.9.0
sbt/sbt package

上面最后一步使用sbt构建的过程可能需要下载很多依赖包,等待的时间比较长。构建成功之后,可以修改Shark的配置文件:

cd shark-0.9.0/conf
mv shark-env.sh.template shark-env.sh
mv log4j.properties.template log4j.properties

然后修改shark-env.sh,修改内容如下所示:

export SHARK_MASTER_MEM=512m
export SPARK_MEM=512m
export SCALA_HOME=/usr/scala/scala-2.10.3
export HIVE_CONF_DIR=/home/shirdrn/cloud/programs/hive-0.11-shark-0.9.0/conf

编译构建并配置Shark,就可以启动Shark Shell,类似Hive Shell一样,执行HQL。

验证Shark

首先,需要启动Hadoop和Spark集群。
启动Shark可以执行如下明命令:

bin/shark

这样就进入了Shark的Shell环境,类似于Hive。现在,我们可以通过如下一个简单的例子来验证Shark,如下所示:

CREATE DATABASE user_db;
CREATE TABLE users (login STRING, password STRING, id INT, group INT, user STRING, home STRING, cmd STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ':' LINES TERMINATED BY '\n';
LOAD DATA LOCAL INPATH '/etc/passwd' INTO TABLE users;

对应于本地Unix系统的/etc/passwd文件,我们创建了一个数据库user_db,然后在该数据库中创建了一个users表,最后将本地/etc/passwd文件上传到HDFS,作为Hive表数据。
执行查询:

SELECT * FROM users;

验证结果示例如下:

shark> SELECT * FROM users;
223.128: [Full GC 99467K->25184K(506816K), 0.1482850 secs]
OK
root     x     0     0     root     /root     /bin/bash
bin     x     1     1     bin     /bin     /sbin/nologin
daemon     x     2     2     daemon     /sbin     /sbin/nologin
adm     x     3     4     adm     /var/adm     /sbin/nologin
lp     x     4     7     lp     /var/spool/lpd     /sbin/nologin
sync     x     5     0     sync     /sbin     /bin/sync
shutdown     x     6     0     shutdown     /sbin     /sbin/shutdown
halt     x     7     0     halt     /sbin     /sbin/halt
mail     x     8     12     mail     /var/spool/mail     /sbin/nologin
uucp     x     10     14     uucp     /var/spool/uucp     /sbin/nologin
operator     x     11     0     operator     /root     /sbin/nologin
games     x     12     100     games     /usr/games     /sbin/nologin
gopher     x     13     30     gopher     /var/gopher     /sbin/nologin
ftp     x     14     50     FTP User     /var/ftp     /sbin/nologin
nobody     x     99     99     Nobody     /     /sbin/nologin
dbus     x     81     81     System message bus     /     /sbin/nologin
usbmuxd     x     113     113     usbmuxd user     /     /sbin/nologin
avahi-autoipd     x     170     170     Avahi IPv4LL Stack     /var/lib/avahi-autoipd     /sbin/nologin
vcsa     x     69     69     virtual console memory owner     /dev     /sbin/nologin
rtkit     x     499     497     RealtimeKit     /proc     /sbin/nologin
abrt     x     173     173          /etc/abrt     /sbin/nologin
haldaemon     x     68     68     HAL daemon     /     /sbin/nologin
saslauth     x     498     76     "Saslauthd user"     /var/empty/saslauth     /sbin/nologin
postfix     x     89     89          /var/spool/postfix     /sbin/nologin
ntp     x     38     38          /etc/ntp     /sbin/nologin
apache     x     48     48     Apache     /var/www     /sbin/nologin
avahi     x     70     70     Avahi mDNS/DNS-SD Stack     /var/run/avahi-daemon     /sbin/nologin
pulse     x     497     496     PulseAudio System Daemon     /var/run/pulse     /sbin/nologin
gdm     x     42     42          /var/lib/gdm     /sbin/nologin
sshd     x     74     74     Privilege-separated SSH     /var/empty/sshd     /sbin/nologin
tcpdump     x     72     72          /     /sbin/nologin
shirdrn     x     500     500     Jeff Stone     /home/shirdrn     /bin/bash
mysql     x     27     27     MySQL Server     /var/lib/mysql     /bin/bash
Time taken: 2.742 seconds

可以在HDFS上查询Hive对应的数据存储位置信息:

hadoop fs -lsr /hive

示例如下所示:

[shirdrn@m1 hive-0.11-shark-0.9.0]$ hadoop fs -lsr /hive
drwxr-xr-x   - shirdrn supergroup          0 2014-03-16 06:06 /hive/user_db.db
drwxr-xr-x   - shirdrn supergroup          0 2014-03-16 06:07 /hive/user_db.db/users
-rw-r--r--   3 shirdrn supergroup       1567 2014-03-16 06:07 /hive/user_db.db/users/passwd

参考链接

Creative Commons License

本文基于署名-非商业性使用-相同方式共享 4.0许可协议发布,欢迎转载、使用、重新发布,但务必保留文章署名时延军(包含链接:http://shiyanjun.cn),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系

评论(2): “Shark-0.9.0安装配置运行实践

  1. 请问下楼主:你这样好像没装mysql 那hive的metastore存储在哪呢? 你这能集群上运行吗?

    • 你可以配置外部存储(如MySQL)来存储元数据,看来,你不是很熟悉Hive吧。这里,我只是为了演示Shark的功能,直接使用了Hive默认存储metastore的配置(derby)。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>