目录
1 java.lang.NoClassDefFoundError: org/apache/tez/dag/api/TezConfiguration
2 Failed to create Spark client for Spark session Error code 30041
背景
Hive on Spark 是一种配置,其中 Apache Hive 使用 Apache Spark 作为其执行引擎,而不是传统的 MapReduce。这种配置结合了 Hive 提供的易用 SQL 接口和 Spark 强大的内存计算能力。
为什么搭建 Hive on Spark 架构:
- 性能提升:Spark 基于内存计算,相比于基于磁盘的 MapReduce,它能提供更快的数据处理速度。特别是在迭代算法和交互式数据探索方面,Spark 显著减少了延迟。
- 资源利用优化:Spark 提供了更高效的资源管理和调度能力。它允许动态地分配资源,而不是 MapReduce 的静态资源分配方式。
- 易用性:Hive 提供了一个熟悉的 SQL 接口,使得数据分析师和开发人员能够轻松编写查询。将 Hive 与 Spark 集成,用户可以利用 Spark 的性能优势,同时继续使用熟悉的 Hive 工具和语言。
- 复杂数据处理:Spark 支持更复杂的数据处理任务,如机器学习和图形处理,这些在传统的 MapReduce 上难以实现或效率较低。
- 兼容性和生态系统:Spark 是一个活跃的项目,与大数据生态系统中的许多其他项目(如 Hadoop、Hive、HBase 等)有很好的兼容性。这意味着可以在不放弃现有工具和流程的情况下,引入 Spark 的能力。
Hive on Spark 的优势:
- 速度:由于 Spark 的内存计算能力,查询执行速度比传统的基于 Hive 的 MapReduce 快得多。
- 效率:Spark 更有效地利用集群资源,减少了数据的读写次数。
- 多样的数据处理:能够处理多种数据处理任务(批处理、实时处理、机器学习等)。
- 更好的容错性:Spark 提供了先进的容错机制,如 RDD 的内存计算。
- 易于维护和扩展:与 Hive 结合使用时,保持了 Hive 的易用性,同时使得系统易于维护和扩展。
下载
1、下载hive包
Index of /dist/hive/hive-3.1.2http://archive.apache.org/dist/hive/hive-3.1.2/
官网下载 apache-hive-3.1.2-bin.tar.gz 安装包
2、下载spark包
Index of /dist/spark/spark-3.0.0https://archive.apache.org/dist/spark/spark-3.0.0/
下载 spark-3.0.0-bin-hadoop3.2.tgz 包和 spark-3.0.0-bin-without-hadoop.tgz 包。
说明:
- spark-3.0.0-bin-hadoop3.2.tgz:
这个包是 Spark 的一个发行版,其中包含了为 Hadoop 3.2 预构建的 Spark 组件。它适用于那些要与 Hadoop 3.2 版本一起使用 Spark 的环境。这个包包括了 Spark 需要的所有库和 Hadoop 相关的依赖,适合在已经安装了 Hadoop 3.2 的环境中使用。
- spark-3.0.0-bin-without-hadoop.tgz:
这个包包含了 Spark 的核心组件,但不包含与 Hadoop 相关的任何依赖。这意味着你可以在不同版本的 Hadoop 上运行 Spark,或者在不依赖于 Hadoop 的环境中运行。这种情况下,你需要单独提供 Hadoop 的依赖库。
传包
传包到hadoop的master节点,案例中是231服务器上。注意路径中不要有点。
# 传hive包到 /data/hive 目录后解压
$ mkdir -p /data/hive
$ tar -zxvf apache-hive-3.1.2-bin.tar.gz
$ mv /data/hive/apache-hive-3.1.2-bin/* /data/hive/ && rm -rf /data/hive/apache-hive-3.1.2-bin
# 传spark包到 /data/spark 目录后解压
$ mkdir -p /data/spark
$ tar -zxf spark-3.0.0-bin-hadoop3.2.tgz
$ tar -zxf spark-3.0.0-bin-without-hadoop.tgz
$ mv /data/spark/spark-3.0.0-bin-hadoop3.2/* /data/spark/ && rm -rf /data/spark/spark-3.0.0-bin-hadoop3.2
部署
1 配置HIVE环境变量
$ vim /etc/profile
******************需要修改/增加的配置***************
export HIVE_HOME=/data/hive
export PATH=$PATH:$HIVE_HOME/bin
export SPARK_HOME=/data/spark
export PATH=$PATH:$HIVE_HOME/bin
*************************************************
$ source /etc/profile
2 hive-site.xml
hive的默认配置文件,通常位于 $HIVE_HOME/conf下,如果没有则使用hive-default.xml.template 文件转化,然后修改其中配置。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 连接 Hive 元数据存储数据库的 JDBC 驱动类 -->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.cj.jdbc.Driver</value>
</property>
<!-- JDBC 连接 URL,用于连接 Hive 元数据存储的数据库 -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://172.16.10.235:13306/hive?useSSL=false</value>
</property>
<!-- 连接 Hive 元数据存储数据库的用户名 -->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<!-- 连接 Hive 元数据存储数据库的密码 -->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>Whdsj@!db0521</value>
</property>
<!-- HiveServer2 绑定的主机名 -->
<property>
<name>hive.server2.thrift.bind.host</name>
<value>dsj-node231</value>
</property>
<!-- Hive 元数据仓库的 HDFS 路径 -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>hdfs://dsj-node231:8020/user/hive/warehouse</value>
</property>
<!-- 远程模式下 Metastore 服务的地址 -->
<property>
<name>hive.metastore.uris</name>
<value>thrift://dsj-node231:9083</value>
<description>指向运行 Hive Metastore 服务的节点和端口</description>
</property>
<!-- Spark 在 YARN 上运行时所需的 JAR 文件的 HDFS 路径 -->
<property>
<name>spark.yarn.jars</name>
<value>hdfs://dsj-node231:8020/Spark/spark-jars/*</value>
</property>
<!-- Hive 执行引擎,使用 Spark -->
<property>
<name>hive.execution.engine</name>
<value>spark</value>
</property>
<!-- Hive 与 Spark 客户端连接的超时时间 -->
<property>
<name>hive.spark.client.connect.timeout</name>
<value>10000ms</value>
</property>
</configuration>
3 spark-env.sh
修改spark-env.sh配置。
spark-env.sh 是 Apache Spark 的一个重要配置文件,用于设置 Spark 运行时的环境变量。这个文件通常不是 Spark 安装包中的一部分,但可以从 spark-env.sh.template 模板文件创建。spark-env.sh 的配置是Spark 集群正常运行的关键。
参考下述配置:
# 从默认配置文件生成
$ cd $SPARK_HOME/conf
$ mv spark-env.sh.template spark-env.sh
# 修改脚本
$ vim spark-env.sh
#!/usr/bin/env bash
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export YARN_CONF_DIR=/data/hadoop/etc/hadoop
export SPARK_HOME=/data/spark
export PATH=$PATH:$SPARK_HOME/bin
# 配置 spark.history.fs.logDirectory 为 hdfs://dsj-node231:8020/Spark/spark-eventLog
# 意味着 Spark 事件日志将存储在 Hadoop 分布式文件系统(HDFS)上,而不是在本地文件系统中。
export SPARK_HISTORY_OPTS="
-Dspark.history.ui.port=18080
-Dspark.history.fs.logDirectory=hdfs://dsj-node231:8020/Spark/spark-eventLog
-Dspark.history.retainedApplications=30"
# This file is sourced when running various Spark programs.
# Copy it as spark-env.sh and edit that to configure Spark for your site.
# Options read when launching programs locally with
# ./bin/run-example or ./bin/spark-submit
# - HADOOP_CONF_DIR, to point Spark towards Hadoop configuration files
# - SPARK_LOCAL_IP, to set the IP address Spark binds to on this node
# - SPARK_PUBLIC_DNS, to set the public dns name of the driver program
# Options read by executors and drivers running inside the cluster
# - SPARK_LOCAL_IP, to set the IP address Spark binds to on this node
# - SPARK_PUBLIC_DNS, to set the public DNS name of the driver program
# - SPARK_LOCAL_DIRS, storage directories to use on this node for shuffle and RDD data
# - MESOS_NATIVE_JAVA_LIBRARY, to point to your libmesos.so if you use Mesos
# Options read in YARN client/cluster mode
# - SPARK_CONF_DIR, Alternate conf dir. (Default: ${SPARK_HOME}/conf)
# - HADOOP_CONF_DIR, to point Spark towards Hadoop configuration files
# - YARN_CONF_DIR, to point Spark towards YARN configuration files when you use YARN
# - SPARK_EXECUTOR_CORES, Number of cores for the executors (Default: 1).
# - SPARK_EXECUTOR_MEMORY, Memory per Executor (e.g. 1000M, 2G) (Default: 1G)
# - SPARK_DRIVER_MEMORY, Memory for Driver (e.g. 1000M, 2G) (Default: 1G)
# Options for the daemons used in the standalone deploy mode
# - SPARK_MASTER_HOST, to bind the master to a different IP address or hostname
# - SPARK_MASTER_PORT / SPARK_MASTER_WEBUI_PORT, to use non-default ports for the master
# - SPARK_MASTER_OPTS, to set config properties only for the master (e.g. "-Dx=y")
# - SPARK_WORKER_CORES, to set the number of cores to use on this machine
# - SPARK_WORKER_MEMORY, to set how much total memory workers have to give executors (e.g. 1000m, 2g)
# - SPARK_WORKER_PORT / SPARK_WORKER_WEBUI_PORT, to use non-default ports for the worker
# - SPARK_WORKER_DIR, to set the working directory of worker processes
# - SPARK_WORKER_OPTS, to set config properties only for the worker (e.g. "-Dx=y")
# - SPARK_DAEMON_MEMORY, to allocate to the master, worker and history server themselves (default: 1g).
# - SPARK_HISTORY_OPTS, to set config properties only for the history server (e.g. "-Dx=y")
# - SPARK_SHUFFLE_OPTS, to set config properties only for the external shuffle service (e.g. "-Dx=y")
# - SPARK_DAEMON_JAVA_OPTS, to set config properties for all daemons (e.g. "-Dx=y")
# - SPARK_DAEMON_CLASSPATH, to set the classpath for all daemons
# - SPARK_PUBLIC_DNS, to set the public dns name of the master or workers
# Options for launcher
# - SPARK_LAUNCHER_OPTS, to set config properties and Java options for the launcher (e.g. "-Dx=y")
# Generic options for the daemons used in the standalone deploy mode
# - SPARK_CONF_DIR Alternate conf dir. (Default: ${SPARK_HOME}/conf)
# - SPARK_LOG_DIR Where log files are stored. (Default: ${SPARK_HOME}/logs)
# - SPARK_PID_DIR Where the pid file is stored. (Default: /tmp)
# - SPARK_IDENT_STRING A string representing this instance of spark. (Default: $USER)
# - SPARK_NICENESS The scheduling priority for daemons. (Default: 0)
# - SPARK_NO_DAEMONIZE Run the proposed command in the foreground. It will not output a PID file.
# Options for native BLAS, like Intel MKL, OpenBLAS, and so on.
# You might get better performance to enable these options if using native BLAS (see SPARK-21305).
# - MKL_NUM_THREADS=1 Disable multi-threading of Intel MKL
# - OPENBLAS_NUM_THREADS=1 Disable multi-threading of OpenBLAS
4 spark-defaults.conf
修改spark-defaults.conf。
配置 spark-defaults.conf 是 Spark 安装和配置过程中的重要一步。这个文件用于设置 Spark 应用程序的默认属性。
一些常见的配置项说明:
常见配置项
以下是一些常见的配置项,您可能需要在 spark-defaults.conf 文件中设置:
- spark.master:
- 设置 Spark 的主节点地址。在 YARN 模式下,通常设置为 yarn。
- 例:spark.master yarn
- spark.eventLog.enabled:
- 启用或禁用事件日志记录。
- 例:spark.eventLog.enabled true
- spark.eventLog.dir:
- 指定事件日志的存储位置(在 HDFS 上)。
- 例:spark.eventLog.dir hdfs://dsj-node231:8020/Spark/spark-eventLog
- spark.yarn.historyServer.address:
- 指定 Spark 历史服务器的地址和端口。
- 例:spark.yarn.historyServer.address dsj-node231:18080
- spark.executor.memory 和 spark.driver.memory:
- 分别设置 Spark 执行器和驱动程序的内存大小。
- 例:spark.executor.memory 4g 和 spark.driver.memory 4g
- spark.history.ui.port:
- 设置 Spark 历史服务器 UI 的端口。
- 例:spark.history.ui.port 18080
参考下述配置:
# 从默认配置文件生成
$ cd $SPARK_HOME/conf
$ mv spark-defaults.conf.template spark-defaults.conf
# 修改脚本
$ vim spark-defaults.conf
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Default system properties included when running spark-submit.
# This is useful for setting default environmental settings.
spark.master yarn
spark.eventLog.enabled true
spark.eventLog.dir hdfs://dsj-node231:8020/Spark/spark-eventLog
spark.yarn.historyServer.address=dsj-node231:18080
spark.history.ui.port 18080
spark.executor.memory 4g
spark.driver.memory 4g
# Example:
# spark.master spark://master:7077
# spark.eventLog.enabled true
# spark.eventLog.dir hdfs://namenode:8021/directory
# spark.serializer org.apache.spark.serializer.KryoSerializer
# spark.driver.memory 5g
# spark.executor.extraJavaOptions -XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three"
5 在HDFS上创建目录
由于前面配置了 sprak 的事件日志目录[/Spark/spark-eventLog],通常情况下,Spark 不会自动在 HDFS 上创建这个目录。因此,最好在开始运行任何 Spark 作业之前手动创建一下。
1 创建目录并上传jar
# 先看看hdfs环境是否正常
$ hdfs version
# 输出版本号则正常,如果提示命令不存在则检查环境变量,以及 $HADOOP_HOME/bin/ 目录下面的hdfs命令是否存在。
***************************************************************************
root@dsj-node231:~# hdfs version
Hadoop 3.1.4
Source code repository https://github.com/apache/hadoop.git -r 1e877761e8dadd71effef30e592368f7fe66a61b
Compiled by gabota on 2020-07-21T08:05Z
Compiled with protoc 2.5.0
From source with checksum 38405c63945c88fdf7a6fe391494799b
This command was run using /data/hadoop/hadoop-3.1.4/share/hadoop/common/hadoop-common-3.1.4.jar
***************************************************************************
# 递归创建 事件日志 目录
$ hdfs dfs -mkdir -p /Spark/spark-eventLog
# 递归创建 sparkjar 目录
$ hdfs dfs -mkdir -p /Spark/spark-jars
# 递归创建 metastore 目录
$ hdfs dfs -mkdir -p /user/hive/warehouse
# 上传jar到hdfs
$ hdfs dfs -put $SPARK_HOME/spark-3.0.0-bin-without-hadoop/jars/* /Spark/spark-jars/
# 额外增加一些命令
# 删除上传的所有jar
$ hdfs dfs -rm -r /Spark/spark-jars/*
# 删除某个文件夹
$ hdfs dfs -rm -r /test
![](https://i-blog.csdnimg.cn/blog_migrate/67941c47a8e901a0c8b2b0ab0f072a93.png)
![](https://i-blog.csdnimg.cn/blog_migrate/17de9fb855a8b1b81b02107e5eec847a.png)
2 验证是否成功
通过一下命令查看目录下的jar是否存在。
$ hdfs dfs -ls /Spark/spark-jars
$ hdfs dfs -ls hdfs://dsj-node231:8020/Spark/spark-eventLog
![](https://i-blog.csdnimg.cn/blog_migrate/c887c3dfec8b4e1763a2ba09f7a47d9b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b7385179426cccf5e52fa49875aac973.png)
6 准备Hive的一些外部依赖
由于前面用的 mysql8 所以使用到的驱动包为:mysql-connector-j-8.2.0.jar
6.1 建立hive数据库
前面的 hive-site.xml配置中配置的数据源连上去,然后创建hive库。
# 初始化 hive 数据库表
# 直连到hive中建库
$ hive
$ create database hive;
$ cd $HIVE_HOME/bin && ./schematool -dbType mysql -initSchema -verbose
6.2 添加 DB 驱动包到hive
前往官网下载: 选择 Platform Independent 下载.zip后缀的文件。
MySQL :: Download Connector/Jhttps://dev.mysql.com/downloads/connector/j/
6.3 上传至 $HIVE_HOME/lib 目录下
6.4 添加Spark Jars到 Hive 依赖库
# 把纯净版spark jar拷贝到hive的 lib 目录下
$ cp $SPARK_HOME/spark-3.0.0-bin-without-hadoop/jars/* $HIVE_HOME/lib/
看到这一步了,有人会问:
前面已经在hdfs上配置了那些 spark jars,为什么这里又要在本地引入一次jars到hive中呢?能不能不引入到hive本地?
这里做一下解答,hdfs配置是为了yarn服务整个集群,hive本地引入是为了hive直接调用spark。二者的存在均是有价值的。
- 将 Spark JARs 放在 HDFS 上
目的:当您将 Spark JARs 上传到 HDFS 时,主要是为了支持 Spark 运行在 YARN 上。YARN 需要从一个集中的、对所有节点可访问的位置加载这些 JARs,以便在集群中的不同节点上运行 Spark 作业。
用途:这使得无论是在哪个节点启动 Spark 作业,YARN 都可以从 HDFS 获取所需的 JARs,确保作业在集群中任何节点上都能顺利执行。
场景:这种设置主要用于在分布式模式下运行 Spark 作业,特别是当使用 YARN 作为集群管理器时。
- 将 Spark JARs 放在 Hive lib 目录
目的:把 Spark JARs 放入 Hive lib 目录的目的是为了让 Hive 能够直接使用 Spark 作为执行引擎。这对于在 Hive 中执行 Spark SQL 或使 Hive 能够通过 Spark 执行查询非常重要。
用途:当 Hive 服务(如 HiveServer2 或 Metastore)启动时,它会加载 lib 目录下的所有 JARs。这样,Hive 就可以利用 Spark 的功能,例如运行基于 Spark 的查询。
场景:这种设置用于当 Hive 需要与 Spark 集成时,例如在 Hive 中使用 Spark 作为查询执行引擎。
总结
虽然 Spark JARs 已经上传到 HDFS,但 Hive 本身也需要直接访问这些 JARs 文件,以便在本地使用 Spark 功能。因此,这两种操作各有用处,都是为了确保在不同的上下文和应用场景中,Spark 和 Hive 能够正常协作工作。
6.5 开启hive远程连接
修改 $HADOOP_HOME 目录下 core-site.xml 配置,增加如下配置。
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
至此,hive on spark 配置完成。接下来准备启动
启动
前面准备完成后,需要启动 hive 和 metastore 、还有sparkhistoryserver
1 启动Hadoop集群和Zookeeper集群
hadoop集群在前面文章中已经说明,按照文末启动一步步操作即可。
2 启动 Hive Metastore
Hive Metastore 是 Hive 的一个组件,用于存储元数据。
$ cd $HIVE_HOME
$ nohup hive --service metastore > $HIVE_HOME/metastore.log 2>&1 &
# 查看日志. 注意 这个hive.log日志文件将同时写入metastore和hiveserver2的日志,
# 所以直接看这个日志就行。
$ tail -f $HIVE_HOME/logs/hive.log -n 199
![](https://i-blog.csdnimg.cn/blog_migrate/27a34f53a1874853819a8593c2af44d4.png)
3 启动 HiveServer2
HiveServer2 允许客户端通过 JDBC/ODBC 连接到 Hive。
# 启动hiverserver2
$ cd $HIVE_HOME && nohup hive --service hiveserver2 \
> $HIVE_HOME/hiveserver2.log 2>&1 &
# 查看日志
$ tail -f $HIVE_HOME/logs/hive.log -n 199
# 下面提供了一个脚本,快速杀死某些服务,需要的可以码一下
# 即可找出所有 hiveserver2 名字的 pid,并kill掉
$ sh $HIVE_HOME/bin/fast_kill.sh hiveserver2
$ sh $HIVE_HOME/bin/fast_kill.sh metastore
#!/bin/bash
# 获取第一个参数作为服务名称
SERVICE_NAME=$1
if [ -z "$SERVICE_NAME" ]; then
echo "需要指定服务名称,例如: hive-server2"
exit 1
fi
# 搜索进程
PIDS=$(ps aux | grep $SERVICE_NAME | grep -v grep | awk '{print $2}')
# 如果没有搜索到则退出
if [ -z "$PIDS" ]; then
echo "没有找到 $SERVICE_NAME 进程"
exit 0
fi
# 遍历 PIDS 并发送 SIGKILL 信号
for PID in $PIDS; do
echo "killing $PID"
kill -9 $PID
done
# 打印日志
echo "成功 kill 掉 $SERVICE_NAME 的所有进程"
![](https://i-blog.csdnimg.cn/blog_migrate/3a5b0ec360fde1fae29da56f686d98b3.png)
3.2 创建默认hive库
因为前面的默认mysql库名为hive,在启动hiveserver2时会默认以这个库去hive中找对应库。所以需要连接hive后,创建一个默认的hive库。避免每次启动提示找不到库。
-- 建库
CREATE DATABASE hive;
3.3 验证hive
执行以下测试用例sql,均成功则测试通过。
wordCount.txt 待统计的文件:
Spark Hive Hadoop
Kubernetes Elasticsearch Spark
Doris Zookeeper Hadoop
Spark Hive Hudi Iceberg
Kafka Pulsar RocketMQ Hadoop Spark
-- 创建一个示例表
CREATE TABLE example_table (id INT, name STRING);
-- 插入一些示例数据
INSERT INTO TABLE example_table VALUES (1, 'John'), (2, 'Jane'), (3, 'Doe');
-- 查询表中的数据
SELECT * FROM example_table;
2.WordCount 示例
-- 创建一个外部表
CREATE EXTERNAL TABLE wordcount_table (word STRING, count INT)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE
LOCATION '/path/to/input/data';
-- 执行 WordCount 查询
INSERT OVERWRITE TABLE output_table
SELECT word, COUNT(1) AS count FROM wordcount_table GROUP BY word;
3.分区表查询
-- 创建一个分区表
CREATE TABLE partitioned_table (id INT, name STRING) PARTITIONED BY (country STRING);
-- 插入数据到分区
INSERT INTO TABLE partitioned_table PARTITION (country='USA') VALUES (1, 'John');
INSERT INTO TABLE partitioned_table PARTITION (country='Canada') VALUES (2, 'Jane');
-- 查询分区表
SELECT * FROM partitioned_table;
4 启动 Spark
因为后续计划直接使用 Spark shell 或提交 Spark 作业,需要启动 Spark 相关的服务,如 Spark History Server。
$ cd $SPARK_HOME/sbin && ./start-history-server.sh
![](https://i-blog.csdnimg.cn/blog_migrate/330330bdfb9fc8d48d2a4c90a9b37d63.png)
常见问题
1 java.lang.NoClassDefFoundError: org/apache/tez/dag/api/TezConfiguration
参考文章:
java - 使用配置单元出现异常 java.lang.NoClassDefFoundError : org/apache/tez/dag/api/SessionNotRunning - IT工具网
2 Failed to create Spark client for Spark session Error code 30041
参考文章:
注意两处,
1、hive lib下面是否执行了 6.2中所述操作
2、hdfs的jar是否按照 6.3中所述操作