默认情况下hive访问不到子目录下面数据的问题
我们通过把hdp的数据迁移到了cdh,然后发现一些hive表存储的地方在用day进行分区之后,在day分区的目录之下,还有存在1/或者2/这样的子目录,我们发现通过分区条件来进行sql查询,查不到任何数据,可以通过设置配置
set hive.mapred.supports.subdirectories=true;
set mapred.input.dir.recursive=true;
来保证hive命令查询的时候可以读到分区目录下面的子目录的数据
sentry相关的权限
安装sentry的相关文章
http://blog.xiaoxiaomo.com/2016/10/19/Sentry-%E9%80%9A%E8%BF%87Cloudera-Manager%E9%85%8D%E7%BD%AESentry/
我们也通过hadoop sentry 来管理权限, 需要把hdfs、hive、hue相关的sentry关联配置打开,然后通过hue里面的配置来设置 hive table 和 hdfs 的相关权限,但是如果不设置linux文件系统的权限,在使用load linux文件的时候,会出现错误
The required privileges: Server=server1->URI=file:///opt/logfiles/userlogsup/muserbehaviorlog/1020210137/20171124/201711241200.txt->action=*;
可以在hue里面选择url,然后手动填写 file:///opt/logfiles/
并给予ALL权限,可以解决上述的错误,所以除开 hive table 和 hdfs的文件,还可以通过sentry来管理 linux 机器上的文件目录
spark2找不到对应的包
在CDH安装了spark2之后,执行hive会出现错误提示
ls: 无法访问/opt/cloudera/parcels/SPARK2/lib/spark2/lib/spark-assembly-*.jar: 没有那个文件或目录
是因为spark2修改了lib包的位置,改成了jars,修改hive的启动脚本,把lib/spark-assembly-*.jar
改成 jars/*
,这样启动就不会出现这个错误了。
hiveserver2死锁的问题
今天在导入数据的时候,由于导入错误,直接对于正在导入的进程执行了中断,然后再去删除或者查询相应的表的时候, 直接卡住不动了,查看日志,发现出现了死锁,可以通过修改hive-site.xml文件
<property>
<name>hive.support.concurrency</name>
<value>true</value>
</property>
把value改成false,关闭死锁,来解决这个问题
查询hive出现数组越界的问题
在用hive查询的时候,出现
http://cdh-master-244:8088/taskdetails.jsp?jobid=job_1511834313005_0092&tipid=task_1511834313005_0092_m_000000
-----
Diagnostic Messages for this Task:
Error: java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException: Hive Runtime Error while processing row
at org.apache.hadoop.hive.ql.exec.mr.ExecMapper.map(ExecMapper.java:179)
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:54)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:459)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1917)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: Hive Runtime Error while processing row
at org.apache.hadoop.hive.ql.exec.vector.VectorMapOperator.process(VectorMapOperator.java:52)
at org.apache.hadoop.hive.ql.exec.mr.ExecMapper.map(ExecMapper.java:170)
... 8 more
Caused by: java.lang.ArrayIndexOutOfBoundsException: 9
at org.apache.hadoop.hive.ql.exec.vector.expressions.ConstantVectorExpression.evaluateLong(ConstantVectorExpression.java:99)
at org.apache.hadoop.hive.ql.exec.vector.expressions.ConstantVectorExpression.evaluate(ConstantVectorExpression.java:147)
at org.apache.hadoop.hive.ql.exec.vector.expressions.aggregates.VectorUDAFCount.aggregateInputSelection(VectorUDAFCount.java:96)
at org.apache.hadoop.hive.ql.exec.vector.VectorGroupByOperator$ProcessingModeBase.processAggregators(VectorGroupByOperator.java:148)
at org.apache.hadoop.hive.ql.exec.vector.VectorGroupByOperator$ProcessingModeHashAggregate.processBatch(VectorGroupByOperator.java:322)
at org.apache.hadoop.hive.ql.exec.vector.VectorGroupByOperator.processOp(VectorGroupByOperator.java:866)
at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:815)
at org.apache.hadoop.hive.ql.exec.vector.VectorFilterOperator.processOp(VectorFilterOperator.java:111)
at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:815)
at org.apache.hadoop.hive.ql.exec.TableScanOperator.processOp(TableScanOperator.java:98)
at org.apache.hadoop.hive.ql.exec.MapOperator$MapOpCtx.forward(MapOperator.java:157)
at org.apache.hadoop.hive.ql.exec.vector.VectorMapOperator.process(VectorMapOperator.java:45)
... 9 more
可以通过增加配置
set hive.vectorized.execution.enabled=false;
来进行解决,相关的issue地址
https://issues.apache.org/jira/browse/HIVE-11933