当前位置: 首页 > article >正文

如何使用SparkSQL在hive中使用Spark的引擎计算

        在hive中,由于hive自带的计算引擎计算比较慢,这个时候可以使用spark替换hive的计算引擎,可以增加hive的计算速度。

在替换之前,首先虚拟机上要有spark的集群模式,spark 的yarn集群模式,需要hdfs,yran,hive

# 启动HDFS服务:NameNode和DataNodes

# 启动HiveMetaStore 服务

hive-server-manager.sh start 

我这里hive的服务全部启动了,也可以单独启动iveMetaStore

# 设置Spark日志级别
cd /opt/installs/spark/conf/(这里的路径是你集群spark的配置文件设置)
mv log4j.properties.template log4j.properties
vi log4j.properties 
#修改19行INFO为WARN
log4j.rootCategory=WARN, console

 然后启动客户端(测试,是否可以通过spark进入hive的数据库)

spark-sql --master yarn --conf spark.sql.shuffle.partitions=2

 进入之后测试一下能否打开看到数据库和打开数据库

然后启动spark在hive的引擎

/opt/installs/spark/sbin/start-thriftserver.sh \  (这个是我的spark配置的位置,按自己的位置配置)
--hiveconf hive.server2.thrift.port=10001 \
--hiveconf hive.server2.thrift.bind.host=bigdata01 \
--master yarn \
--conf spark.sql.shuffle.partitions=2

 启动服务,该服务不会停止,一直在后台启动,假如启动不了,记得查看日志。

然后用dataGrip远程链接

然后下载驱动,之前设置的端口是10001,默认的10000和hive的冲突,所以改成10001

 然后进入spark中测试一下

这时候,在spark中的操作,hive中也会同步,速度很快,到这里就算结束了

关闭thiftServer:

/opt/installs/spark/sbin/stop-thriftserver.sh 

但是在这之中可能会遇到问题:

hive中的数据库和sparksql 操作的数据库不是同一个

 解决方案:在hive 下修改hive-site.xml

<property>
        <name>hive.metastore.schema.verification</name>
        <value>false</value>
    </property>

 将hive-site.xml 复制到 spark的conf 下

 cp /opt/installs/hive/conf/hive-site.xml /opt/installs/spark/conf

 修改spark下的hive-site.xml

 <property>
        <name>hive.server2.thrift.port</name>
        <value>10001</value>
        <description>Port number of HiveServer2 Thrift interface when hive.server2.transport.mode is 'binary'.</description>
      </property>

 接着分发一下:

 xsync.sh /opt/installs/spark/conf/hive-site.xml

 重启thrift服务:

 

/opt/installs/spark/sbin/stop-thriftserver.sh

/opt/installs/spark/sbin/start-thriftserver.sh --hiveconf hive.server2.thrift.port=10001 --hiveconf hive.server2.thrift.bind.host=bigdata01 --master yarn --conf spark.sql.shuffle.partitions=2

 配置spark集群的yarn模式

配置第一台虚拟机‘

cd /opt/modules/
tar -zxf spark-3.1.2-bin-hadoop3.2.tgz -C /opt/installs
cd /opt/installs
mv spark-3.1.2-bin-hadoop3.2 spark-yarn
rm -rf /opt/installs/spark
ln -s /opt/installs/spark-yarn /opt/installs/spark

 修改spark-env.sh配置文件

 cd /opt/installs/spark/conf
mv spark-env.sh.template spark-env.sh
vim /opt/installs/spark/conf/spark-env.sh
## 22行左右设置JAVA安装目录、HADOOP和YARN配置文件
目录
export JAVA_HOME=/opt/installs/jdk
export HADOOP_CONF_DIR=/opt/installs/hadoop/etc/hadoop
export YARN_CONF_DIR=/opt/installs/hadoop/etc/hadoop
## 历史日志服务器
export SPARK_DAEMON_MEMORY=1g
export SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://bigdata01:9820/spark/eventLogs/ -Dspark.history.fs.cleaner.enabled=true"

修改spark-defaults.conf 文件: 

 

cd /opt/installs/spark/conf
mv spark-defaults.conf.template spark-defaults.conf

vim spark-defaults.conf
## 添加内容:
spark.eventLog.enabled           true
spark.eventLog.dir           hdfs://bigdata01:9820/spark/eventLogs
spark.eventLog.compress           true
spark.yarn.historyServer.address bigdata01:18080
spark.yarn.jars           hdfs://bigdata01:9820/spark/jars/*

 修改log4j.properties

 

mv log4j.properties.template log4j.properties

修改级别为WARN,打印日志少一点。

 上传spark jar包:

 #因为YARN中运行Spark,需要用到Spark的一些类和方法
#如果不上传到HDFS,每次运行YARN都要上传一次,比较慢
#所以自己手动上传一次,以后每次YARN直接读取即可
hdfs dfs -mkdir -p /spark/jars/
hdfs dfs -put /opt/installs/spark/jars/* /spark/jars/

 修改yarn-site.xml

 cd /opt/installs/hadoop/etc/hadoop

 

检查以下内置少什么,就配什么。
<property>
  <name>yarn.log-aggregation-enable</name>
  <value>true</value>
</property>

<!-- 历史日志在HDFS保存的时间,单位是秒 -->
<!-- 默认的是-1,表示永久保存 -->
<property>
  <name>yarn.log-aggregation.retain-seconds</name>
  <value>604800</value>
</property>

<property>
  <name>yarn.log.server.url</name>
  <value>http://bigdata01:19888/jobhistory/logs</value>
</property>

<!-- 关闭yarn内存检查 -->
<property>
  <name>yarn.nodemanager.pmem-check-enabled</name>
  <value>false</value>
</property>
<property>
  <name>yarn.nodemanager.vmem-check-enabled</name>
  <value>false</value>
</property>

 分发一下yarn-site.xml(分发给其他虚拟机)

 xsync.sh yarn-site.xml

 将第一台机器的spark-yarn分发到第二台和第三台

xsync.sh /opt/installs/spark-yarn

超链接也分发一下:
xsync.sh /opt/installs/spark

 

 启动

 # 启动yarn
start-yarn.sh
# 启动MR的JobHistoryServer:19888
mapred --daemon start historyserver
# 启动Spark的HistoryServer:18080
/opt/installs/spark/sbin/start-history-server.sh

 测试

 测试官方给的PI值的计算:

/opt/installs/spark/bin/spark-submit --master yarn /opt/installs/spark/examples/src/main/python/pi.py 10

假如你遇到这个输出,说明资源有限,可以等一等 

 

 测试自己编写的wordcount案例

 

/opt/installs/spark/bin/spark-submit \
--master yarn \
--deploy-mode client \
--driver-memory 512M \
--driver-cores 1 \
--supervise \
--executor-memory 1G \
--executor-cores 1 \
--total-executor-cores 2 \
 /home/pyspark_core_word_args.py \
/spark/wordcount/input \
/spark/wordcount/output001

你也可以测试一下cluster模式,看是否支持?
经过测试,yarn集群下,cluster模式是支持的。在standalone模式下,不支持cluster

 

假如你没有配置 SPARK_HOME 那么,你每次提交 spark_submit 的时候,记得写全路径,否则呢?你的那些配置都没有生效。或者你直接写 spark_submit 的全路径。

假如你运行任务的时候,或者启动yarn的时候,报 /bin/java 没有这个文件。

这个问题的本质是缺少java 。

ln -s /opt/installs/jdk/bin/java /bin/java (软连接到你虚拟机的Java的地址)


http://www.kler.cn/a/389455.html

相关文章:

  • Elastic Observability 8.16:增强的 OpenTelemetry 支持、高级日志分析和简化的入门流程
  • 矢量拟合(1)Sanathanan–Koerner算法
  • STM32单片机WIFI语音识别智能衣柜除湿消毒照明
  • Mit6.S081-实验环境搭建
  • 如何为电子课程创造创意
  • 计算机网络易混淆知识点串记
  • 全网最详细的自动化测试(Jenkins 篇)
  • 企业知识库管理系统的创新模式及其智能化转型
  • 45期代码随想录算法营总结
  • 股票短线的建议(学习)- 20241111
  • .net core开发windows程序在国产麒麟操作系统中运行
  • catchadmin-webman 宝塔 部署
  • web——[SUCTF 2019]EasySQL1——堆叠注入
  • Oracle OCP认证考试考点详解082系列18
  • HTTP协议基础
  • 【报错记录】Steam迁移(移动)游戏报:移动以下应用的内容失败:XXX: 磁盘写入错误
  • 时序预测 | gamma伽马模型锂电池寿命预测 EM算法粒子滤波算法结合参数估计
  • 健身房业务流程优化:SpringBoot解决方案
  • Python面试题一
  • FBX福币交易所创指半日涨1.95%,中兴通讯直线涨停
  • Flume学习
  • 模块与包的应用
  • UE5遇到问题记录
  • 如何利用静态住宅IP优化Facebook商城的网络稳定性与运营效率
  • Fortinet 发布 2024 年第三季度财报,非 GAAP 营业利润增长36%
  • linux笔记(DNS)