如何在集群上运行Shark
本文介绍在计算机集群上如何启动和运行Shark。如果对Amazon EC2上运行Shark感兴趣,请点击这里查看如何使用EC2脚本快速启动预先配置好的集群。
依赖:
注意:Shark是一个即插即用的工具,所以可以在现有的Hive数据仓库之上运行,不需要您对现有的部署做出任何修改。
在集群上运行Shark需要一下几个外部组件:
- Scala 2.9.3
- Spark 0.7.2
- 兼容的JAVA运行时环境:OpenJDK 7, Oracle HotSpot JDK 7,或者 Oracle HotSpot JDK 6u23+
- Shark专用的 Hive JAR (基于Hive 0.9),包括在Shark发布包里。
- HDFS 集群:在这里不介绍如何安装,可以查看我的博文.
如果系统里没有安装Scala 2.9.3,可以按提示下载:
$ wget http://www.scala-lang.org/downloads/distrib/files/scala-2.9.3.tgz
$ tar xvfz scala-2.9.3.tgz
采用Spark的单独部署模式运行Shark。
部署细节:|http://spark-project.org/docs/latest/spark-standalone.html).也可以查看我翻译的博文。
下载Spark:
$ wget http://spark-project.org/files/spark-0.7.2-prebuilt-hadoop1.tgz # Hadoop 1/CDH3
或者
$ wget http://spark-project.org/files/spark-0.7.2-prebuilt-cdh4.tgz # Hadoop 2/CDH4
解压缩:
$ tar xvfz spark-0.7.2-prebuilt*.tgz
编辑 spark-0.7.2/conf/slaves添加集群中Slaves的主机名称,每一行对应一个Salve。
编辑spark-0.7.2/conf/spark-env.sh设置SCALA_HOME和SPARK_WORKER_MEMORY
export SCALA_HOME=/path/to/scala-2.9.3
export SPARK_WORKER_MEMORY=16g
SPARK_WORKER_MEMORY 是Spark在每一个节点上可用内存的最大,增加这个数值可以在内存中缓存更多的数据,但是一定要记住给Slave的操作系统和其他服务预留足够的内存。
下载Shark 0.2.1发布包,里边包括 shark-0.2.1和hive-0.9.0-bin.
$ wget http://spark-project.org/download/shark-0.7.0-hadoop1-bin.tgz # Hadoop 1/CDH3
或者
$ wget http://spark-project.org/download/shark-0.7.0-hadoop2-bin.tgz # Hadoop 2/CDH4
解压缩:
$ tar xvfz shark-0.7.0-*-bin.tgz
编辑shark-0.7.0/conf/shark-env.sh设置HIVE_HOME, SCALA_HOME和MASTER环境变量(参考如下):
export HADOOP_HOME=/path/to/hadoop
export HIVE_HOME=/path/to/hive-0.9.0-bin
export MASTER=spark://<MASTER_IP>:7077
export SPARK_HOME=/path/to/spark
export SPARK_MEM=16g
source $SPARK_HOME/conf/spark-env.sh
(source命令通常用于重新执行刚修改的初始化文件,使之立即生效)
最后一行是为了避免重复设置SCALA_HOME。一定要确保SPARK_MEM的数值不能超过前面设置的SPARK_WORKER_MEMORY的数值.
如果是在现有的Hive上运行Shark,确定设置 HIVE_CONF_DIR (在shark-env.sh文件中)指向你的配置文件夹.也可以,复制 Hive XML配置文件到Shark的hive-0.9.0-bin/conf配置文件夹内,比如:
cp /etc/hive/conf/*.xml /path/to/hive-0.9.0-bin/conf/
复制 Spark和 Shark目录到所有的slaves.前提是master的用户可以实现无密码SSH登录到所有的slaves.例如:
$ while read slave_host; do
$ rsync -Pav spark-0.7.2 shark-0.7.0 $slave_host
$ done < /path/to/spark/conf/slaves
运行 Spark的集群启动脚本,启动集群:
$ cd spark-0.7.2
$ ./bin/start_all.sh
The newest versions of require additional configuration options.
新版本的Hadoop需要额外的配置选项。在Hive的配置文件(hive-site.xml)中进行配置:
- fs.default.name: 指向HDFS 的namenode.例如:hdfs://myNameNode:8020/
- fs.defaultFS: 和fs.default.name设置为同样值。
- mapred.job.tracker:设置为JobTracker,格式为host:port。如果仅仅运行Spark可以设置为"NONE"。注意:一定要明确设置这个选项,即使不使用JobTracker.
使用如下命令,启动Shark
$ ./bin/shark-withinfo
关于Spark单独模式的更多脚本细节参考这里。
To verify that Shark is running, you can try the following example, which creates a table with sample data:
使用下面的命令,创建一个简单的表格就可以确认一下Shark是否可以运行。
CREATE TABLE src(key INT, value STRING);
LOAD DATA LOCAL INPATH '${env:HIVE_HOME}/examples/files/kv1.txt' INTO TABLE src;
SELECT COUNT(1) FROM src;
CREATE TABLE src_cached AS SELECT * FROM SRC;
SELECT COUNT(1) FROM src_cached;
更详细的学习Shark,可以查看官方网站的用户指南。