我在Ubuntu Precise 12.04 x64盒子上使用Cloudera CDH 4.1。我已经使用了Cloudera Manager免费版进行了顺利安装(在我自己完成之后出现了一些粗糙的颠簸)。但是,我仍然无法让Hive工作。现在我可以向它发出Hive QL命令来创建表,并加载本地数据(示例中的原始表)。但是当我尝试将数据插入另一个表(一个具有适当的serde和存储)时,由于本地文件夹权限而失败。
org.apache.hadoop.hive.ql.metadata.HiveException: java.io.IOException: Mkdirs failed to create file:/home/yaboulnaga/tmp/hive-scratch/hive_2012-11-25_19-22-21_486_4469575874587213091/_task_tmp.-ext-10002
at org.apache.hadoop.hive.ql.io.HiveFileFormatUtils.getHiveRecordWriter(HiveFileFormatUtils.java:237)
at org.apache.hadoop.hive.ql.exec.FileSinkOperator.createBucketFiles(FileSinkOperator.java:477)
at org.apache.hadoop.hive.ql.exec.FileSinkOperator.closeOp(FileSinkOperator.java:709)
at org.apache.hadoop.hive.ql.exec.Operator.close(Operator.java:557)
at org.apache.hadoop.hive.ql.exec.Operator.close(Operator.java:566)
at org.apache.hadoop.hive.ql.exec.Operator.close(Operator.java:566)
at org.apache.hadoop.hive.ql.exec.Operator.close(Operator.java:566)
at org.apache.hadoop.hive.ql.exec.Operator.close(Operator.java:566)
at org.apache.hadoop.hive.ql.exec.ExecMapper.close(ExecMapper.java:193)
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:57)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:393)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:327)
at org.apache.hadoop.mapred.Child$4.run(Child.java:268)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1332)
at org.apache.hadoop.mapred.Child.main(Child.java:262)
我已将scratch文件夹移动到我的主目录中的文件夹(如异常中所示),以便我可以将其chmod到777.但是,子目录仍归hive所有:hive和mapred:hadoop无法写入他们。我没有找到任何解决方法,我希望有人会告诉我如何正确地做到这一点。过去几天我一直在找工作让Hive工作,那就是我的本地机器......当我按照计划开始在EC2上运行时,我甚至想不起我的生活会怎样。
谢谢大家!
答案 0 :(得分:0)
我遇到了同样的问题,我正在使用cloudera udacity VM。 我可以创建一个表,从外部文件中将加载数据加载到该表中,然后从表名中选择一个*,其他东西都失败了,甚至从tablename中选择count(1),从中选择col1 tablename等...... 使用获得相同的异常,mkdirs无法在------------------
创建文件我退出了,然后作为sudo hive登录回来,所有突然之间的一切都像魅力一样。
希望这有帮助!