一、Shark简单介绍

Shark是基于Spark与Hive之上的一种SQL查询引擎,官网的架构图及性能測试图例如以下:(Ps:本人也做了一个性能測试见Shark性能測试报告)

我们涉及到了2个依赖组件,1是Apache Spark, 另外一个是AMPLAB的Hive0.11.

这里注意版本号的选择。一定要选择官方的推荐版本号:

Spark0.91 + AMPLAB Hive0.11 + Shark0.91

一定要自己编译好它们,适用于自己的集群。

二、Shark集群搭建

1. 搭建Spark集群。这个能够參照:Spark集群搭建

2. 编译AMPLAB的Hive0.11, 进入到根文件夹下直接 ant package.

3.编译Shark,这个步骤和编译Spark是一样的。和HDFS的版本号记得兼容即可,改动project以下的SharkBuild.scala里面的Hadoop版本号号。然后sbt/sbt assembly.

三、启动Spark + Shark

首先。启动Spark,这里要改动spark的配置文件,在Spark-env.sh里面配置:

HADOOP_CONF_DIR=/home/hadoop/src/hadoop/conf
SPARK_CLASSPATH=/home/hadoop/src/hadoop/lib/:/app/hadoop/shengli/sharklib/*
SPARK_LOCAL_DIRS=/app/hadoop/shengli/spark/data
SPARK_MASTER_IP=10.1.8.210
SPARK_MASTER_WEBUI_PORT=7078

接着,配置Spark的spark-defaults.conf

spark.master            spark://10.1.8.210:7077
spark.executor.memory   32g
spark.shuffle.spill  true
java.library.path    /usr/local/lib
spark.shuffle.consolidateFiles true # spark.eventLog.enabled  true
# spark.eventLog.dir      hdfs://namenode:8021/directory
# spark.serializer        org.apache.spark.serializer.KryoSerializer

接着配置slaves:

10.1.8.210  #这里master节点不会做cache
10.1.8.211
10.1.8.212
10.1.8.213

最后启动集群,sbin/start-all.sh,至此Spark集群配置完成。

Shark有依赖的Jar包。我们集中将其复制到一个目录内:

#!/bin/bash
for jar in `find /home/hadoop/shengli/shark/lib -name '*jar'`; do
cp $jar /home/hadoop/shengli/sharklib/
done
for jar in `find /home/hadoop/shengli/shark/lib_managed/jars -name '*jar'`; do
cp $jar /home/hadoop/shengli/sharklib/
done
for jar in `find /home/hadoop/shengli/shark/lib_managed/bundles -name '*jar'`; do
cp $jar /home/hadoop/shengli/sharklib/
done

配置Shark,在shark/conf/shark-env.sh中配置

# format as the JVM's -Xmx option, e.g. 300m or 1g.
export JAVA_HOME=/usr/java/jdk1.7.0_25
# (Required) Set the master program's memory
#export SHARK_MASTER_MEM=1g # (Optional) Specify the location of Hive's configuration directory. By default,
# Shark run scripts will point it to $SHARK_HOME/conf
#export HIVE_CONF_DIR=""
export HADOOP_HOME=/home/hadoop/src/hadoop
# For running Shark in distributed mode, set the following:
export SHARK_MASTER_MEM=1g
export HADOOP_HOME=$HADOOP_HOME
export SPARK_HOME=/app/hadoop/shengli/spark
export SPARK_MASTER_IP=10.1.8.210
export MASTER=spark://10.1.8.210:7077 # Only required if using Mesos:
#export MESOS_NATIVE_LIBRARY=/usr/local/lib/libmesos.so # Only required if run shark with spark on yarn
#export SHARK_EXEC_MODE=yarn
#export SPARK_ASSEMBLY_JAR=
#export SHARK_ASSEMBLY_JAR= # (Optional) Extra classpath
#export SPARK_LIBRARY_PATH="" # Java options
# On EC2, change the local.dir to /mnt/tmp # (Optional) Tachyon Related Configuration
#export TACHYON_MASTER="" # e.g. "localhost:19998"
#export TACHYON_WAREHOUSE_PATH=/sharktables # Could be any valid path name
#export HIVE_HOME=/home/hadoop/shengli/hive/build/dest
export HIVE_CONF_DIR=/app/hadoop/shengli/hive/conf
export CLASSPATH=$CLASSPATH:/home/hadoop/src/hadoop/lib:home/hadoop/src/hadoop/lib/native:/app/hadoop/shengli/sharklib/* export SCALA_HOME=/app/hadoop/shengli/scala-2.10.3 #export SPARK_LIBRARY_PATH=/home/hadoop/src/hadoop/lib/native/Linux-amd64-64 #export LD_LIBRARY_PATH=/home/hadoop/src/hadoop/lib/native/Linux-amd64-64 #spark conf copy here SPARK_JAVA_OPTS=" -Dspark.cores.max=8 -Dspark.local.dir=/app/hadoop/shengli/spark/data -Dspark.deploy.defaultCores=2 -Dspark.executor.memory=24g -Dspark.shuffle.spill=true -Djava.library.path=/usr/local/lib "
SPARK_JAVA_OPTS+="-Xmx4g -Xms4g -verbose:gc -XX:-PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseCompressedOops "
export SPARK_JAVA_OPTS

接下来配置Shark的集群了,我们要将编译好的Spark,Shark。Hive所有都分发到各个节点。保持同步更新rsync。

rsync --update -pav --progress /app/hadoop/shengli/spark/ root@10.1.8.211:/app/hadoop/shengli/spark/
......
rsync --update -pav --progress /app/hadoop/shengli/shark/ root@10.1.8.211:/app/hadoop/shengli/shark/
......
rsync --update -pav --progress /app/hadoop/shengli/hive/ root@10.1.8.211:/app/hadoop/shengli/hive/
......
rsync --update -pav --progress /app/hadoop/shengli/sharklib/ root@10.1.8.211:/app/hadoop/shengli/sharklib/
......
rsync --update -pav --progress /usr/java/jdk1.7.0_25/ root@10.1.8.211:/usr/java/jdk1.7.0_25/
......

启动Shark,能够在WEBUI上查看集群状态(上面配置的是WEB UI PORT 7078)

进入到SHARK_HOME/bin

drwxr-xr-x  4 hadoop games 4.0K Jun 12 10:01 .
drwxr-xr-x 13 hadoop games 4.0K Jun 16 16:59 ..
-rwxr-xr-x 1 hadoop games 882 Apr 10 19:18 beeline
drwxr-xr-x 2 hadoop games 4.0K Jun 12 10:01 dev
drwxr-xr-x 2 hadoop games 4.0K Jun 12 10:01 ext
-rwxr-xr-x 1 hadoop games 1.4K Apr 10 19:18 shark
-rwxr-xr-x 1 hadoop games 730 Apr 10 19:18 shark-shell
-rwxr-xr-x 1 hadoop games 840 Apr 10 19:18 shark-withdebug
-rwxr-xr-x 1 hadoop games 838 Apr 10 19:18 shark-withinfo

这里shark是直接执行shark

shark-shell类似spark-shell

shark-withdebug是在执行中以DEBUG的log4J模式进入,适合排查错误和理解执行。

shark-withinfo同上。

shark还提供了一种shark-server共享Application中Cacahed RDD概念。

bin/shark -h 10.1.8.210 -p 7100
-h 10.1.8.210 -p 7100
Starting the Shark Command Line Client Logging initialized using configuration in jar:file:/app/hadoop/shengli/sharklib/hive-common-0.11.0-shark-0.9.1.jar!/hive-log4j.properties
Hive history file=/tmp/root/hive_job_log_root_25876@wh-8-210_201406171640_1172020906.txt
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/app/hadoop/shengli/sharklib/slf4j-log4j12-1.7.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/app/hadoop/shengli/sharklib/shark-assembly-0.9.1-hadoop0.20.2-cdh3u5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/app/hadoop/shengli/shark/lib_managed/jars/org.slf4j/slf4j-log4j12/slf4j-log4j12-1.7.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
2.870: [GC 262208K->21869K(1004928K), 0.0274310 secs]
[10.1.8.210:7100] shark>

这样就能够用多个client连接这个port了。

bin/shark -h 10.1.8.210 -p 7100
-h 10.1.8.210 -p 7100
Starting the Shark Command Line Client Logging initialized using configuration in jar:file:/app/hadoop/shengli/sharklib/hive-common-0.11.0-shark-0.9.1.jar!/hive-log4j.properties
Hive history file=/tmp/hadoop/hive_job_log_hadoop_28486@wh-8-210_201406171719_457245737.txt
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/app/hadoop/shengli/sharklib/slf4j-log4j12-1.7.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/app/hadoop/shengli/sharklib/shark-assembly-0.9.1-hadoop0.20.2-cdh3u5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/app/hadoop/shengli/shark/lib_managed/jars/org.slf4j/slf4j-log4j12/slf4j-log4j12-1.7.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
show ta3.050: [GC 262208K->22324K(1004928K), 0.0240010 secs]
ble[10.1.8.210:7100] shark> show tables;
Time taken (including network latency): 0.072 seconds

至此,shark启动完成。

3、測试

来做一个简单的測试,看是否可用,处理一个21g的文件。

[hadoop@wh-8-210 shark]$ hadoop dfs -ls /user/hive/warehouse/log/
Found 1 items
-rw-r--r-- 3 hadoop supergroup 22499035249 2014-06-16 18:32 /user/hive/warehouse/log/21gfile
create table log
(
c1 string,
c2 string,
c3 string,
c4 string,
c5 string,
c6 string,
c7 string,
c8 string,
c9 string,
c10 string,
c11 string,
c12 string,
c13 string
) row format delimited fields terminated by '\t' stored as textfile;
load data inpath '/user/hive/warehouse/log/21gfile' into table log;

count一下log表:

[10.1.8.210:7100] shark> select count(1) from log > ;
171802086
Time taken (including network latency): 33.753 seconds

用时33秒。

将log表所有装在至内存,count一下log_cached:

CREATE TABLE log_cached TBLPROPERTIES ("shark.cache" = "true") AS SELECT * from log;
Time taken (including network latency): 481.96 seconds
shark> select count(1) from log_cached;
171802086
Time taken (including network latency): 6.051 seconds

用时6秒,速度提升了至少5倍。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvb29wc29vbQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

查看Executor以及Task存储状况:

查看存储状况Storage:

至此,Shark集群搭建和简单的測试已完毕。

兴许我会写篇环境搭建中常见的问题,以及更具体的Shark測试结论。

注: 原创文章。转载请注明出处。出自:http://blog.csdn.net/oopsoom/article/details/30513929

-EOF-

Shark集群搭建配置的更多相关文章

  1. Hadoop 2.2 YARN分布式集群搭建配置流程

    搭建环境准备:JDK1.6,SSH免密码通信 系统:CentOS 6.3 集群配置:NameNode和ResourceManager在一台服务器上,三个数据节点 搭建用户:YARN Hadoop2.2 ...

  2. Redis 3.0集群搭建/配置/FAQ

    ·声明 1,已官网中文教程为基础,边看边学,结合环境现状搭建. 2,哥对Ruby不热爱.不熟悉.不感冒,所述内容如有疑义请谅解. 3,3.0官说集群还在测试中,其实用用也还算马马虎虎,对外集群API真 ...

  3. mongodb生产环境(副本集模式)集群搭建配置

    mongodb副本集模式由如下几部分组成: 1.路由实例mongos 2.配置实例configsvr 3.副本集集群replset(一主多从) tips: 1.以上实例都是mongod守护进程 2.以 ...

  4. hadoop 集群搭建 配置 spark yarn 对效率的提升永无止境

    [手动验证:任意2个节点间是否实现 双向 ssh免密登录] 弄懂通信原理和集群的容错性 任意2个节点间实现双向 ssh免密登录,默认在~目录下 [实现上步后,在其中任一节点安装\配置hadoop后,可 ...

  5. hadoop 集群搭建 配置 spark yarn 对效率的提升永无止境 Hadoop Volume 配置

    [手动验证:任意2个节点间是否实现 双向 ssh免密登录] 弄懂通信原理和集群的容错性 任意2个节点间实现双向 ssh免密登录,默认在~目录下 [实现上步后,在其中任一节点安装\配置hadoop后,可 ...

  6. Redis 集群搭建详细指南

    先有鸡还是先有蛋? 最近有朋友问了一个问题,说毕业后去大城市还是小城市?去大公司还是小公司?我的回答都是大城市!大公司! 为什么这么说呢,你想一下,无论女孩男孩找朋友都喜欢找个子高胸大的.同样的道理嘛 ...

  7. Kafka 0.9+Zookeeper3.4.6集群搭建、配置,新Client API的使用要点,高可用性测试,以及各种坑 (转载)

    Kafka 0.9版本对java client的api做出了较大调整,本文主要总结了Kafka 0.9在集群搭建.高可用性.新API方面的相关过程和细节,以及本人在安装调试过程中踩出的各种坑. 关于K ...

  8. hbase单机环境的搭建和完全分布式Hbase集群安装配置

    HBase 是一个开源的非关系(NoSQL)的可伸缩性分布式数据库.它是面向列的,并适合于存储超大型松散数据.HBase适合于实时,随机对Big数据进行读写操作的业务环境. @hbase单机环境的搭建 ...

  9. redis单点、redis主从、redis哨兵sentinel,redis集群cluster配置搭建与使用

    目录 redis单点.redis主从.redis哨兵 sentinel,redis集群cluster配置搭建与使用 1 .redis 安装及配置 1.1 redis 单点 1.1.2 在命令窗口操作r ...

随机推荐

  1. 简单的刷票系统(突破IP限制进行投票) (转)

    前言 相信大家平时肯定会收到朋友发来的链接,打开一看,哦,需要投票.投完票后弹出一个页面(恭喜您,您已经投票成功),再次点击的时候发现,啊哈,您的IP(***.***.***.***)已经投过票了,不 ...

  2. ORACLE 中的 锁 介绍

    ORACLE 中的 锁 介绍 Oracle数据库支持多个用户同时与数据库进行交互,每个用户都可以同时运行自己的事务,从而也需要对并发访问进行控制.Oracle也是用“锁”的机制来防止各个事务之间的相互 ...

  3. hihocoder第42周 3*N骨牌覆盖(状态dp+矩阵快速幂)

    http://hihocoder.com/contest/hiho42/problem/1 给定一个n,问我们3*n的矩阵有多少种覆盖的方法 第41周做的骨牌覆盖是2*n的,状态转移方程是dp[i] ...

  4. 【oracle案件】ORA-19502,ORA-27072

    1.1.1. ORA-19502,ORA-27072 日期:2014-05-12 00:12 环境:试验机 [错误号] $ oerr ora 19502 19502, 00000, "wri ...

  5. JAVA程序生成XML标准化的文件格式,缩进,美化。

    //他开始Document映射到文件 TransformerFactory transFactory = TransformerFactory.newInstance(); Transformer t ...

  6. Swift语言教程中文文档

    Swift语言教程中文文档 Swift语言教程(一)基础数据类型 Swift语言教程(二)基础数据类型 Swift语言教程(三)集合类型 Swift语言教程(四) 集合类型 Swift语言教程(五)控 ...

  7. Android.mk参数解释

    -------------------- 下面对Android.mk 中经常出现的变量进行讲解 -------------------- 这些变量,你会经常在Android.mk文件中见到,下面以字表 ...

  8. Microsoft Fakes进行单元测试

    使用Microsoft Fakes进行单元测试(1)   一:什么是单元测试 单元测试是对软件进行准确性验证的步骤.单元测试并不进行整个软件功能的测试,仅仅是对于最小工作单元的测试.一般最小工作单元就 ...

  9. Xamarin.Android 入门实例(1)之获取与解析JSON

    1.Main.axml 视图界面 2.视图代码 <?xml version="1.0" encoding="utf-8"?> <LinearL ...

  10. 于win7使用虚拟磁盘隐藏文件

    于win7使用虚拟磁盘隐藏文件,我只是win7在验证.其他型号未知. 一.创建虚拟磁盘 1.右键点击"计算机"-----"管理" ------"磁盘管 ...