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):1687bfe2469c0c8a57bfe491d43782a93b592eea 以前我们使用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):51a647e22870b5b98cfa5ee576292974d6790563

下面,我们通过安装配置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也能够执行正确地查询分析工作

01 export JAVA_HOME=/usr/java/jdk1.7.0_25/
02 export PATH=$PATH:$JAVA_HOME/bin
03 export CLASSPATH=$JAVA_HOME/lib/*.jar:$JAVA_HOME/jre/lib/*.jar
04
05 export SCALA_HOME=/usr/scala/scala-2.10.3
06 export PATH=$PATH:$SCALA_HOME/bin
07
08 export MAVEN_HOME=/home/shirdrn/cloud/programs/apache-maven-3.2.1
09 export PATH=$PATH:$MAVEN_HOME/bin
10
11 export HADOOP_HOME=/home/shirdrn/cloud/programs/hadoop-1.2.1
12 export PATH=$PATH:$HADOOP_HOME/bin
13 export HADOOP_LOG_DIR=/home/shirdrn/cloud/storage/hadoop-1.2.1/logs
14
15 export HIVE_HOME=/home/shirdrn/cloud/programs/hive-0.11-shark-0.9.0
16 export PATH=$PATH:$HIVE_HOME/bin
17
18 export SPARK_HOME=/home/shirdrn/cloud/programs/spark-0.9.0-incubating-bin-hadoop1
19 export PATH=$PATH:$SPARK_HOME/bin
20
21 export SHARK_HOME=/home/shirdrn/cloud/programs/shark-0.9.0
22 export PATH=$PATH:$SHARK_HOME/bin

Hive安装配置

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

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

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

01 <?xml version="1.0"?>
02 <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
03
04 <configuration>
05 <property>
06 <name>hive.metastore.warehouse.dir</name>
07 <value>/hive</value>
08 <description>location of default database for the warehouse</description>
09 </property>
10 </configuration>

简单使用这样配置即可。

安装配置Shark

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

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

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

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

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

1 export SHARK_MASTER_MEM=512m
2 export SPARK_MEM=512m
3 export SCALA_HOME=/usr/scala/scala-2.10.3
4 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可以执行如下明命令:

1bin/shark

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

1 CREATE DATABASE user_db;
2 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';
3 LOAD DATA LOCAL INPATH '/etc/passwd' INTO TABLE users;

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

1 SELECT * FROM users;

验证结果示例如下:

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

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

1hadoop fs -lsr /hive

示例如下所示:

1[shirdrn@m1 hive-0.11-shark-0.9.0]$ hadoop fs -lsr /hive
2drwxr-xr-x - shirdrn supergroup 0 2014-03-16 06:06 /hive/user_db.db
3 drwxr-xr-x - shirdrn supergroup 0 2014-03-16 06:07 /hive/user_db.db/users
4 -rw-r--r-- 3 shirdrn supergroup 1567 2014-03-16 06:07 /hive/user_db.db/users/passwd
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值