spark2.0.1安装部署及使用jdbc连接基于hive的sparksql
时间:2022-06-07
本文章向大家介绍spark2.0.1安装部署及使用jdbc连接基于hive的sparksql
,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1、安装
如下配置,除了配置spark还配置了spark history服务
#先到http://spark.apache.org/根据自己的环境选择编译好的包,然后获取下载连接
cd /opt
mkdir spark
wget http://d3kbcqa49mib13.cloudfront.net/spark-2.0.1-bin-hadoop2.6.tgz
tar -xvzf spark-2.0.1-bin-hadoop2.6.tgz
cd spark-2.0.1-bin-hadoop2.6/conf
复制一份spark-env.sh.template,改名为spark-env.sh。然后编辑spark-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_111
export SPARK_MASTER_HOST=hadoop-n
复制一份spark-defaults.conf.template,改成为spark-defaults.conf,然后编辑spark-defaults.conf
#指定master地址,以便在启动的时候不用再添加--master参数来启动集群
spark.master spark://hadoop-n:7077
#对sql查询进行字节码编译,小数据量查询建议关闭
spark.sql.codegen true
#开启任务预测执行机制,当出现比较慢的任务时,尝试在其他节点执行该任务的一个副本,帮助减少大规模集群中个别慢任务的影响
spark.speculation true
#默认序列化比较慢,这个是官方推荐的
spark.serializer org.apache.spark.serializer.KryoSerializer
#自动对内存中的列式存储进行压缩
spark.sql.inMemoryColumnarStorage.compressed true
#是否开启event日志
spark.eventLog.enabled true
#event日志记录目录,必须是全局可见的目录,如果在hdfs需要先建立文件夹
spark.eventLog.dir hdfs://hadoop-n:9000/spark_history_log/spark-events
#是否启动压缩
spark.eventLog.compress true
复制一份slaves.template,改成为slaves,然后编辑slaves
hadoop-d1
hadoop-d2
从$HIVE_HOME/conf下拷贝一份hive-site.xml到当前目录下。
编辑/etc/下的profile,在末尾处添加
export SPARK_HOME=/opt/spark/spark-2.0.1-bin-hadoop2.6
export PATH=$PATH:$SPARK_HOME/bin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=3 -Dspark.history.fs.logDirectory=hdfs://hadoop-n:9000/spark_history_log/spark-events"
为了保证绝对生效,/etc/bashrc也做同样设置,然后刷新设置
source /etc/profile
source /etc/bashrc
2、启动
a)首先启动hadoop;
cd $HADOOP_HOME/sbin
./start-dfs.sh
访问http://ip:port:50070查看是否启动成功
b)然后启动hive
cd $HIVE_HOME/bin
./hive --service metastore
执行beeline或者hive命令查看是否启动成功,默认hive日志在/tmp/${username}/hive.log
c)最后启动spark
cd $SPARK_HOME/sbin
./start-all.sh
sprark ui :http://hadoop-n:8080
spark客户端
cd $SPARK_HOME/bin
./spark-shell
sparksql客户端
cd $SPARK_HOME/bin
./spark-sql
注意执行命令后提示的webui的端口号,通过webui可以查询对应监控信息。
启动thriftserver
cd $SPARK_HOME/sbin
./start-thriftserver.sh
spark thriftserver ui:http://hadoop-n:4040
启动historyserver
cd $SPARK_HOME/sbin
./start-history-server.sh
spark histroy ui:http://hadoop-n:18080
3、使用jdbc连接基于hive的sparksql
a)如果hive启动了hiveserver2,关闭
b)执行如下命令启动服务
cd $SPARK_HOME/sbin
./start-thriftserver.sh
执行如下命令测试是否启动成功
cd $SPARK_HOME/bin
./beeline -u jdbc:hive2://ip:10000
#如下是实际输出
[root@hadoop-n bin]# ./beeline -u jdbc:hive2://hadoop-n:10000
Connecting to jdbc:hive2://hadoop-n:10000
16/11/08 21:03:05 INFO jdbc.Utils: Supplied authorities: hadoop-n:10000
16/11/08 21:03:05 INFO jdbc.Utils: Resolved authority: hadoop-n:10000
16/11/08 21:03:05 INFO jdbc.HiveConnection: Will try to open client transport with JDBC Uri: jdbc:hive2://hadoop-n:10000
Connected to: Spark SQL (version 2.0.1)
Driver: Hive JDBC (version 1.2.1.spark2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
Beeline version 1.2.1.spark2 by Apache Hive
0: jdbc:hive2://hadoop-n:10000> show databases;
+---------------+--+
| databaseName |
+---------------+--+
| default |
| test |
+---------------+--+
2 rows selected (0.829 seconds)
0: jdbc:hive2://hadoop-n:10000>
编写代码连接sparksql
按照自己的环境添加依赖
<dependencies>
<dependency>
<groupId>jdk.tools</groupId>
<artifactId>jdk.tools</artifactId>
<version>1.6</version>
<scope>system</scope>
<systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.6.0</version>
</dependency>
</dependencies>
然后编写类
/**
*
* @Title: HiveJdbcTest.java
* @Package com.scc.hive
* @Description: TODO(用一句话描述该文件做什么)
* @author scc
* @date 2016年11月9日 上午10:16:32
*/
package com.scc.hive;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
*
* @ClassName: HiveJdbcTest
* @Description: TODO(这里用一句话描述这个类的作用)
* @author scc
* @date 2016年11月9日 上午10:16:32
*
*/
public class HiveJdbcTest {
private static String driverName = "org.apache.hive.jdbc.HiveDriver";
public static void main(String[] args) throws SQLException {
try {
Class.forName(driverName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
System.exit(1);
}
Connection con = DriverManager.getConnection("jdbc:hive2://10.5.3.100:10000", "", "");
Statement stmt = con.createStatement();
String tableName = "l_access";
String sql = "";
ResultSet res = null;
sql = "describe " + tableName;
res = stmt.executeQuery(sql);
while (res.next()) {
System.out.println(res.getString(1) + "t" + res.getString(2));
}
sql = "select * from " + tableName + " limit 10;";
res = stmt.executeQuery(sql);
while (res.next()) {
System.out.println(res.getObject("id"));
}
sql = "select count(1) from " + tableName;
res = stmt.executeQuery(sql);
while (res.next()) {
System.out.println("count:" + res.getString(1));
}
}
}
下面是控制台输出
log4j:WARN No appenders could be found for logger (org.apache.hive.jdbc.Utils).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
id int
req_name string
req_version string
req_param string
req_no string
req_status string
req_desc string
ret string
excute_time int
req_time date
create_time date
212
213
214
215
216
217
218
219
220
221
count:932
4、注意事项
- 集群要配置ssh免密码登录
- 不要忘记拷贝hive的配置文件,不然spark会在本地创建物理数据库文件
- hive启动时提示ls: cannot access /opt/spark/spark-2.0.1-bin-hadoop2.6/lib/spark-assembly-*.jar: No such file or directory,不影响程序运行,可忽略
- 10x Python开发者必读:本月Python文章TOP 10
- Linux下更换默认yum源为网易yum源的操作记录
- yum源使用的几个报错小总结
- JQuery笔记(一)
- Haproxy和Nginx负载均衡测试效果对比记录
- JQuery笔记(三) jquery的用途
- Heartbeat使用梳理
- JQuery笔记(二) animate支持的属性
- 腾讯叮当首次系统性展示AI能力 开放日展示实战型解决方案
- Execute 方法(Find 对象)
- 在容器中部署mysql与数据持久化
- silverlight如何在运行时用代码动态控制(或创建)动画
- 小程序深夜连发4大功能!你们要的直播来了!
- 机器学习在现实生活中到底有哪些应用?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 如何将 Hexo 博客部署到云开发静态网站托管
- WordPress 静态化部署到云开发网站托管
- 如何用云应用快速部署一个nodebb的开源论坛
- 【一起学系列】之装饰器模式:不改代码增强功能?
- Hello!GitHub 好用好玩值得收藏的开源项目集合~
- 【一起学系列】之工厂模式:产品?产品族?
- 再见,Navicat!同事安利的这个IDEA的兄弟,真香!
- 【一起学系列】之单例模式:只推荐三种~
- 【一起学系列】之命令模式:封装一个简单Jedis?
- 轻松学Pytorch-实现自定义对象检测器
- Elasticsearch 升级 7.x 版本后,我感觉掉坑里了!
- 【一起学系列】之适配器模式:还有外观模式呢
- 【翻译】200行代码讲透RUST FUTURES (5)
- Unable to preventDefault inside passive event listener
- js 停止事件冒泡 阻止浏览器的默认行为(阻止a标签跳转 )