hadoop - 异常:org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException):权限被拒绝:user = hbase,access = EXECUTE

标签 hadoop mapreduce hbase bulk-load

我正在尝试将BulkLoad加载到Hbase中。映射减少的输入是hdfs文件(来自Hive)。
使用Tool(Job)类中的以下代码启动批量加载过程
HFileOutputFormat.configureIncrementalLoad(job,new HTable(config,TABLE_NAME));

在Mapper中,将以下内容用作Mapper的输出
context.write(new ImmutableBytesWritable(Bytes.toBytes(hbaseTable)),放);

映射器完成后。使用以下内容执行实际的批量加载:

LoadIncrementalHFiles loadFfiles = new LoadIncrementalHFiles(configuration);    
HTable hTable = new HTable(configuration, tableName);   
loadFfiles.doBulkLoad(new Path(pathToHFile), hTable);

作业运行良好,但是一旦Loadincrement启动,它就会永远挂起。经过多次尝试,我不得不停止运行该作业。但是,经过30分钟的漫长等待,我终于得到了上面的错误。经过大量搜索后,我发现Hbase将尝试访问放置在输出文件夹中的文件(HFiles),并且该文件夹没有写或执行权限。因此抛出上述错误。因此,替代解决方案是在执行批量加载之前,在Java代码中添加以下文件访问权限。
FileSystem fileSystem = FileSystem.get(config);
fileSystem.setPermission(new Path(outputPath),FsPermission.valueOf("drwxrwxrwx"));

从开发到生产,这是正确的方法吗?同样,一旦添加了上面的代码,在输出文件夹中创建的文件夹也会出现类似的错误。这次是列族文件夹。这是运行时的动态 Action 。

作为临时的解决方法,我做了以下工作,并且能够继续前进。
fileSystem.setPermission(new Path(outputPath +“/ col_fam_folder”),FsPermission.valueOf(“drwxrwxrwx”)));

这两个步骤似乎都是解决方法,我需要一个正确的解决方案才能投入生产。提前致谢

最佳答案

试试这个
System.setProperty(“HADOOP_USER_NAME”,“hadoop”);

关于hadoop - 异常:org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException):权限被拒绝:user = hbase,access = EXECUTE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30655420/

相关文章:

hadoop - 多节点群集只能识别1个事件节点

hadoop - hadoop中的NameNode未运行并且无法访问(http://localhost:50030)

java - 我需要学习哪些概念才能实现以下场景?

maven - spark 应用程序抛出 java.lang.NoSuchMethodError : javax. ws.rs.core.Response.readEntity(Ljava/lang/Class;)Ljava/lang/Object

hadoop - 我现在如何锁定 hbase?

hadoop - 来自 HTable 的 MapReduce 输入

java - Hadoop-伪分布式模式: Input path does not exist

python - 如何创建可作为python集合而不是文件使用的大数据的rdd

hadoop mapreduce 反之亦然

java - 在Hadoop的MapReduce程序中运行Jar文件时出错