标签 大数据 下的文章

什么是SPARK SQL?

官方有详细的说明,请参考:http://spark.apache.org/docs/latest/sql-programming-guide.html

什么是JDBC?

JDBC(Java Data Base Connectivity, java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。

为什么是ThriftServer?

SPARK 将数据表注册到HiveContext,再启动 ThriftServer 提供JDBC服务器,JDBC客户端连接ThriftServer,完美结合,外部可以访问spark内部(内存)数据。

thriftserver.png

当然,也可以参考之前的博客【SPARK】Spark写入Parquet,暴露JDBC引擎,实现准实时SQL查询 来了解数据处理相关内容。

上源码才是王道

1、Spark 1.6需要开启SingleSession,否则看不见TempTable。

    sparkConf.set("spark.sql.hive.thriftServer.singleSession", "true")

2、初始化 HiveContext,注意是HiveContext不是SqlConctext。

    val hiveContext = new HiveContext(sc)

3、创建DataFrame

    val df = hiveContext.createDataFrame(line) //创建DataFrame

4、注册临时表

    df.registerTempTable("logs")
    top10SrcIp24Hour.registerTempTable("top10")

5、启动ThriftServer

    hiveContext.setConf("hive.server2.thrift.port", "19898") //自定义端口
    HiveThriftServer2.startWithContext(hiveContext)

JDBC连接,看效果

启动spark自带的JDBC 客户端 beeline,连接ThriftServer,查询表。

    $SPARK_HOME/bin/beeline
    
    Beeline version 1.6.1 by Apache Hive
    beeline> !connect jdbc:hive2://localhost:19898
    Connecting to jdbc:hive2://localhost:19898
    Enter username for jdbc:hive2://localhost:19898: 
    Enter password for jdbc:hive2://localhost:19898: 
    Connected to: Spark SQL (version 1.6.1)
    Driver: Spark Project Core (version 1.6.1)
    Transaction isolation: TRANSACTION_REPEATABLE_READ
    0: jdbc:hive2://localhost:19898> show tables;
    +------------+--------------+--+
    | tableName  | isTemporary  |
    +------------+--------------+--+
    | top10      | true         |
    | logs       | true         |
    +------------+--------------+--+
    2 rows selected (0.184 seconds)
    0: jdbc:hive2://localhost:19898> select * from top10;
    +------------------+--------+--+
    |    ipAddress     | count  |
    +------------------+--------+--+
    | 223.166.68.96    | 87     |
    | 125.39.160.25    | 22     |
    | 199.101.117.71   | 17     |
    | 101.226.66.180   | 10     |
    | 116.53.227.116   | 4      |
    | 110.173.17.149   | 1      |
    | 36.231.22.250    | 1      |
    | 42.120.160.30    | 1      |
    | 180.153.185.118  | 1      |
    +------------------+--------+--+
    9 rows selected (2.233 seconds)
    0: jdbc:hive2://localhost:19898> select count(*) from logs;
    +------+--+
    | _c0  |
    +------+--+
    | 144  |
    +------+--+
    1 row selected (2.602 seconds)
    0: jdbc:hive2://localhost:19898> 

看,这些数据都来自Spark内存,是不是很神奇?

安装Zeppelin

到官网下载二进制包(http://zeppelin.apache.org/download.html),当然,你要是愿意,可以下载源码自己编译。

wget http://apache.fayea.com/incubator/zeppelin/0.5.0-incubating/zeppelin-0.5.0-incubating-bin-spark-1.4.0_hadoop-2.3.tgz
tar -zxvf zeppelin-0.5.0-incubating-bin-spark-1.4.0_hadoop-2.3.tgz

至此,安装完毕,是不是非常简单?

运行Zeppelin(启动/停止)

启动Zeppelin

bin/zeppelin-daemon.sh start

停止Zeppelin

bin/zeppelin-daemon.sh stop

是不是超级简单?打开浏览器: http://192.168.1.230:8080,界面就出现了。

1.png

什么是Interpreter?

Zeppelin Interpreter是一门后端语言。例如,要在Zeppelin使用Scala代码,你需要scala解释器(interpreter)。简单说,你要运行MySQL代码,你需要MySQL解释器,这个需要一些小小的开发。

开发MySQL Interpreter

编译代码

去我的github下载源码并且编译,这个很重要!!!

git clone https://github.com/jiekechoo/zeppelin-interpreter-mysql
mvn clean package

部署二进制包

假装你的zeppelin安装在 /opt/zeppelin目录

mkdir /opt/zeppelin/interpreter/mysql
cp target/zeppelin-mysql-0.5.0-incubating.jar /opt/zeppelin/interpreter/mysql
# copy dependencies to mysql directory
cp mysql-connector-java-5.1.6.jar log4j-1.2.17.jar slf4j-api-1.7.10.jar slf4j-log4j12-1.7.10.jar commons-exec-1.1.jar /opt/zeppelin/interpreter/mysql
cp conf/zeppelin-site.xml.template conf/zeppelin-site.xml
vi conf/zeppelin-site.xml

在zeppelin.interpreters 的value里增加一些内容 ,org.apache.zeppelin.mysql.MysqlInterpreter
如下所示

<value>org.apache.zeppelin.spark.SparkInterpreter,org.apache.zeppelin.spark.PySparkInterpreter,org.apache.zeppelin.spark.SparkSqlInterpreter,org.apache.zeppelin.spark.DepInterpreter,org.apache.zeppelin.markdown.Markdown,org.apache.zeppelin.angular.AngularInterpreter,org.apache.zeppelin.shell.ShellInterpreter,org.apache.zeppelin.hive.HiveInterpreter,org.apache.zeppelin.tajo.TajoInterpreter,org.apache.zeppelin.flink.FlinkInterpreter,org.apache.zeppelin.mysql.MysqlInterpreter</value>

重启zeppelin即可

bin/zeppelin-daemon.sh restart

运行MySQL代码

加载mysql interpreter

登录管理界面,Interpreter -> Create, 类似下面的页面,完成点击 Save

2.png

创建 Notebook,完成你的可视化

点击右上角的setting,并且确保mysql被选中,保存Save

3.png

输入你要执行的SQL语句,相信你再熟悉不过了

%mysql

SELECT datetime, count FROM Syslog.PerformanceLog WHERE datetime > DATE_SUB(CURDATE(), INTERVAL 7 DAY);

点击运行按钮,结果出现了,是不是很神奇?

4.png

可以做成报表模式,更好看更爽了

5.png

可以在其他地方引用这张报表

6.png

将链接作为框架引入你的代码中吧

7.png

几张效果图

8.png

9.png