hive集群配置 hive on spark

hive集群配置 hive on spark

标签(空格分隔): hive


##HiveServer2的高可用-HA配置

HiveServer2的高可用-HA配置

##hive on spark

基于Spark 2.0.0搭建Hive on Spark环境
官方文档

###编译spark

hive on spark要求spark编译时不集成hive,编辑命令如下,需要安装maven,命令中hadoop版本根据实际情况调整

#Spark 2.0.0以后
./dev/make-distribution.sh --name "hadoop2-without-hive" --tgz "-Pyarn,hadoop-provided,hadoop-2.6,parquet-provided"

###环境变量

在/etc/profile中加入以下环境变量

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop  
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop  

###hive配置

在hive-site.xml中加入以下配置,同时将spark的jars目录中的jar文件传到hdfs对应目录下

#创建hdfs目录
hadoop fs -mkdir /spark
#上传/application/spark/jars文件夹到hdfs的/spark目录
hadoop fs -put /application/spark/jars/ /spark/
<!-- hive 2.2.0以后,这项配置必须放在hive-site.xml中 -->
<property>  
  <name>spark.yarn.jars</name>  
  <value>hdfs://xxxx:9000/spark/jars/*.jar</value>  
</property>

###spark配置yarn模式

在spark-env.sh中加入以下配置,注意不要有spark集群的配置,会导致hive on spark出现异常

#注意$(hadoop classpath)需要支持hadoop命令可执行,可以修改成根目录形式$(/application/hadoop-2.6.4/bin/hadoop classpath)
export SPARK_DIST_CLASSPATH=$(hadoop classpath)
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop

在spark-defaults.conf中加入以下配置,需要将该文件放入$HIVE_HOME/conf目录下

spark.master yarn
spark.submit.deployMode client
spark.eventLog.enabled true
spark.eventLog.dir hdfs://dashuju174:9000/spark/logs

spark.driver.memory 512m
spark.driver.cores 1
spark.executor.memory 512m
spark.executor.cores 1
spark.executor.instances 2
spark.serializer org.apache.spark.serializer.KryoSerializer
spark.yarn.jars hdfs://dashuju174:9000/spark/jars/*.jar

yarn调度模式配置

官方建议修改yarn的调度模式为FAIR,其他调度模式其实也可以使用
修改yarn-site.xml

  <property>
    <name>yarn.resourcemanager.scheduler.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
  </property>

当启动spark任务时,会根据spark-defaule.conf中的配置向yarn请求内存和CPU,计算公式参考Spark 2.2 内存占用计算公式
以上面的配置为例:
yarn.scheduler.minimum-allocation-mb=512M,spark.yarn.driver.memoryOverhead=384m(最小值),spark.yarn.executor.memoryOverhead=384m(最小值)
实际driver占用内存为spark.driver.memory+(max(spark.yarn.driver.memoryOverhead, 0.1spark.driver.memory))=512m+(max(384m: 0.1512m))=规整化后1G,然后再乘以spark.driver.cores*spark.executor.instances
实际executor占用内存计算方法也一样
实际的内存占用可以通过ApplicationMaster查看,开启ApplicationMaster命令:yarn-daemon.sh start proxyserver

####yarn.scheduler.minimum-allocation-mb设置较小时解决办法

spark ERROR YarnClientSchedulerBackend: Yarn application has already exited

###异常

官方文档常见异常

####1、java.lang.NoClassDefFoundError: scala/collection/Iterable

hive未加载spark的jar造成的问题
按一下方式修改$HIVE_HOME/bin/hive文件

#原文件内容
for f in ${HIVE_LIB}/*.jar; do
    CLASSPATH=${CLASSPATH}:$f;
done

#新增以下代码
for f in ${SPARK_HOME}/jars/*.jar; do
     CLASSPATH=${CLASSPATH}:$f;
done

done


####2、unread block data
> 在hive-site.xml中加入hbase的jar配置,spark.driver.extraClassPath和spark.executor.extraClassPath中内容相同
```xml
  <property>
    <name>spark.driver.extraClassPath</name>
    <value>$SPARK_HOME/lib/mysql-connector-java-5.1.34.jar:$SPARK_HOME/lib/hbase-annotations-1.1.4.jar:$SPARK_HOME/lib/hbase-client-1.1.4.jar:$SPARK_HOME/lib/hbase-common-1.1.4.jar:$SPARK_HOME/lib/hbase-hadoop2-compat-1.1.4.jar:$SPARK_HOME/lib/hbase-hadoop-compat-1.1.4.jar:$SPARK_HOME/lib/hbase-protocol-1.1.4.jar:$SPARK_HOME/lib/hbase-server-1.1.4.jar:$SPARK_HOME/lib/hive-hbase-handler-2.3.2.jar:$SPARK_HOME/lib/htrace-core-3.1.0-incubating.jar</value>
  </property>

  <property>
    <name>spark.executor.extraClassPath</name>
    <value>$SPARK_HOME/lib/mysql-connector-java-5.1.34.jar:$SPARK_HOME/lib/hbase-annotations-1.1.4.jar:$SPARK_HOME/lib/hbase-client-1.1.4.jar:$SPARK_HOME/lib/hbase-common-1.1.4.jar:$SPARK_HOME/lib/hbase-hadoop2-compat-1.1.4.jar:$SPARK_HOME/lib/hbase-hadoop-compat-1.1.4.jar:$SPARK_HOME/lib/hbase-protocol-1.1.4.jar:$SPARK_HOME/lib/hbase-server-1.1.4.jar:$SPARK_HOME/lib/hive-hbase-handler-2.3.2.jar:$SPARK_HOME/lib/htrace-core-3.1.0-incubating.jar</value>
  </property>

####ClassNotFoundException: org.apache.hadoop.hive.hbase.HiveHBaseTableInputFormat

实际上在集成之前在集成hbase时,hive是不缺少jar包的,在spark.executor.extraClassPath和spark.driver.extraClassPath加入了hive-hbase-handler-2.3.2.jar之后,就出现了这个异常可以在hive.aux.jars.path中加入

  <property>
    <name>hive.aux.jars.path</name>
    <value>/home/hadoop/application/hive/lib/hive-hbase-handler-2.3.2.jar</value>
  </property>

或在hive命令行中执行以下命令解决

add jar /home/hadoop/application/hive/lib/hive-hbase-handler-2.3.2.jar

##namenode HA问题

当namedode存在HA时,hdfs的访问地址需要改为hadoop/etc/hadoop/hdfs-site.xml 中dfs.nameservices配置的值,不需要指定端口例如hdfs://hadoop-cluster/xxx

####hive on spark各种ClassNotFoundException

检查hive-site.xml,spark-default.xml中spark.yarn.jars是否配置正确
检查hdfs://xxx/spark/jars中jar包是否是 S P A R K H O M E / j a r s j a r s p a r k 2.0.2 93 e x p o r t H A D O O P C L A S S P A T H = SPARK_HOME/jars中jar包,不要多或者少,spark2.0.2为93个,版本不要弄错 检查环境变量export HADOOP_CLASSPATH= HBASE_HOME/lib/*:classpath
修改配置或修改hdfs中jar之后都重启hive服务再测试

###hive select count(*)可以执行,select显示hbase连接超时

权限问题造成,修改hive-site.xml

  <property>
    <name>hive.server2.enable.doAs</name>
    <value>false</value>
  </property>

猜你喜欢

转载自blog.csdn.net/zh350229319/article/details/80168711
今日推荐