建立内部网站,购物网站单页模板,新乡seo公司,wordpress绝对路径背景
这个需求就是spark不通过spark-hive的方式访问hive数据#xff0c;而是通过spark读取hive jdbc的方式访问hive数据#xff0c;因为这个hive有kerberos认证#xff0c;在网上也不是很容易搜索到这样的操作案例。不多bb#xff0c;直接上教程。
准备工作
准备一个hiv…背景
这个需求就是spark不通过spark-hive的方式访问hive数据而是通过spark读取hive jdbc的方式访问hive数据因为这个hive有kerberos认证在网上也不是很容易搜索到这样的操作案例。不多bb直接上教程。
准备工作
准备一个hive-jaas.conf内容如下
com.sun.security.jgss.initiate {com.sun.security.auth.module.Krb5LoginModule requireduseKeyTabtruekeyTabxxx.keytabprincipalxxxXXX.XXX.COMdoNotPrompttrue;
};这里的头的xxx替换成你环境中对应的配置就行了
测试代码如下
public class App {public static void main(String[] args) {SparkSession spark SparkSession.builder().master(local).getOrCreate();JdbcDialects.registerDialect(new HiveDialect());Properties properties new Properties();properties.setProperty(driver, org.apache.hive.jdbc.HiveDriver);DatasetRow jdbcDF spark.read().jdbc(jdbc:hive2://your_hive_server2_address:10000/database;principalhive/_HOSTXXX.COM;authKerberos, database.table, properties);jdbcDF.show();spark.stop();}
}这个代码的作用就是使用spark jdbc API通过hive jdbc去连接hive读取hive中的一张表然后执行展示。 这里要注意下这个jdbc的连接地址和后面跟随的参数
jdbc:hive2://your_hive_server2_address:10000/database;principalhive/_HOSTXXX.COM;authKerberos 里头your_hive_server2_address写成你的环境里对应的地址。 后面的principal 也是配置成你的环境中对应的principal
这里头有一个HiveDialect是因为我测试的时候发现在spark jdbc生成查询语句的时候查询语句会是select database.column1,database.column2....这样的查询sql程序是会报错的。如果有这样的问题的话需要注册一个自定义的Spark jdbc的方言
HiveDialect 代码类如下
public class HiveDialect extends JdbcDialect {Overridepublic boolean canHandle(String url) {return url.startsWith(jdbc:hive2) || url.contains(hive);}Overridepublic String quoteIdentifier(String colName) {colNamecolName.split(\\.)[1];return colName ;}
}代码差不多写完了。最后使用maven打包上传到服务器上包括那个hive-jaas.conf文件还要额外上传 krb5.conf,xxx.keytab文件上去。 提交命令
spark-submit \
--master yarn \
--deploy-mode cluster \
--driver-memory 2G \
--driver-cores 2 \
--num-executors 2 \
--executor-memory 2G \
--executor-cores 2 \
--files file:///opt/xxx.keytab,file:///opt/krb5.conf,file:///opt/hive-jaas.conf \
--conf spark.driver.extraJavaOptions-Djava.security.auth.login.confighive-jaas.conf -Djavax.security.auth.useSubjectCredsOnlyfalse -Djava.security.krb5.confkrb5.conf \
--conf spark.executor.extraJavaOptions-Djava.security.auth.login.confighive-jaas.conf -Djavax.security.auth.useSubjectCredsOnlyfalse -Djava.security.krb5.confkrb5.conf \
--conf spark.dynamicAllocation.enabledfalse \
--conf spark.yarn.maxAppAttempts1 \
--name spark_read_jdbc_with_hive \
--class com.example.App \
example-spark-read-hive-jdbc-1.0-SNAPSHOT.jar注意里头的--files 参数和--conf的参数。 至此整个教程结束。 最后到服务器上跑一把就好了。
总结
如果各位阅读过的大佬有什么更好建议请在评论区中留言谢谢大哥们