什么是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内部（内存）数据。 当然，也可以参考之前的博客【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，界面就出现了。 什么是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 如下所示 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 重启zeppelin即可 bin/zeppelin-daemon.sh restart 运行MySQL代码 加载mysql interpreter 登录管理界面，Interpreter -> Create, 类似下面的页面，完成点击 Save 创建 Notebook，完成你的可视化 点击右上角的setting，并且确保mysql被选中，保存Save 输入你要执行的SQL语句，相信你再熟悉不过了 %mysql SELECT datetime, count FROM Syslog.PerformanceLog WHERE datetime > DATE_SUB(CURDATE(), INTERVAL 7 DAY); 点击运行按钮，结果出现了，是不是很神奇？ 可以做成报表模式，更好看更爽了 可以在其他地方引用这张报表 将链接作为框架引入你的代码中吧 几张效果图