目录
五:四的问题也可以经过spark调优来解决,但是像我这种测试集群资源不够时,可设置大连接时常
版本
hive版本: 3.1.2
spark版本:2.3.0(一开始用spark3进行测试,一直报拒绝连接,接下来会测试是否可以用spark3)
hadoop版本:3.1.3
配置
- 配置好hadoop、spark、hive环境变量
cp ${SPARK_HOME}/jars/scala-library-2.11.12.jar ${HIVE}/lib/scala-library.jar
cp ${SPARK_HOME}/jars/spark-core_2.11-2.4.3.jar ${HIVE}/lib/spark-core.jar
cp ${SPARK_HOME}/jars/spark-network-common_2.11-2.4.3.jar ${HIVE}/lib/spark-network-common.jar
cp ${SPARK_HOME}/jars/spark-unsafe_2.11-2.4.3.jar ${HIVE}/lib/spark-unsafe.jar
- spark测试集群正常后,将jars上传到hdfs
hadoop fs -mkdir /spark-jars
hadoop fs -put jars/* /spark-jars
- 删除hdfs上spark-jars中guava、hadoop、hive的jar包,并替换guava
hadoop fs -rm /spark-jars/guava-14.0.1.jar
hadoop fs -rm /spark-jars/hadoop-*
hadoop fs -rm /spark-jars/hive-*
- 将hadoop中的guava-27版本上传到spark-jars
hadoop fs -put guava-27.0-jre.jar /spark-jars/
- 配置hive-site.xml
<property>
<name>spark.yarn.jars</name>
<value>hdfs://henghe-052:8020/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>30000ms</value>
</property>
<property>
<name>spark.master</name>
<value>yarn</value>
</property>
<property>
<name>spark.home</name>
<value>/opt/moudle/spark-2.3.0-bin-hadoop2.6</value>
</property>
- 跑有shuffle的任务
遇到的问题
一:guava版本
java.lang.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.sameThreadExecutor()Lcom/google/common/util/concurrent/ListeningExecutorService;
解决:spark本地的guava版本不能改,将hdfs上spark-jars中的guava版本换成hive的高版本
二:找不到hive-exec
解决:spark的cluster模式需要每台spark及其环境都有hive-exex.jar,将jar包拷贝到每台spark环境
三: 没有SPARK_RPC_SERBER_ADDRESS
解决:spark的jar中hive是1.2版本,当hive2.x版本增加了SPARK_RPC_SERVER_ADDRESS,所以将hdfs上spark-jars中的hive-*都删除掉
四: yarn 上跑成功但是hive的客户端报连接错误
解决: 将hive.spark.client.connect.timeout调大,我设置的30000ms。
五:四的问题也可以经过spark调优来解决,但是像我这种测试集群资源不够时,可设置大连接时常
六:可调优参数
set spark.executor.cores=1;
set spark.executor.memory=2g;
set spark.executor.instances=1;