Pivotal Knowledge Base

Follow

The User GPADMIN is Not Allowed to Call getBlockLocalPathInfo

Environment

 Product  Version
 HAWQ  1.x

Symptom

We can observe the following error message in HAWQ segment logs.

Error Message:

2017-01-26 00:00:04.280301, p590743, th140412451821600, ERROR cannot setup block reader for Block: [block pool ID: BP-575414680-172.28.9.250-1424211725913 block ID 1155800046_87905102] file /hawq_data/gpseg68/16385/62692/3867609 on Datanode: shbdhdwp019.gphd.local(172.28.10.19).
InputStreamImpl.cpp: 340: HdfsIOException: InputStreamImpl: Failed to get block local path information.
        @       Hdfs::Internal::InputStreamImpl::getBlockLocalPathInfo(Hdfs::Internal::LruMap<std::pair<long, std::string>, Hdfs::Internal::BlockLocalPathInfo>&, Hdfs::Internal::LocatedBlock const&)
        @       Hdfs::Internal::InputStreamImpl::setupBlockReader(bool)
        @       Hdfs::Internal::InputStreamImpl::readOneBlock(char*, int, bool)
        @       Hdfs::Internal::InputStreamImpl::readInternal(char*, int)
        @       Hdfs::Internal::InputStreamImpl::read(char*, int)
        @       hdfsRead
        @       gpfs_hdfs_read
        @       HdfsRead
[...]
        @       PostmasterMain
        @       main
        @       __libc_start_main
        @       Unknown
Caused by
RpcChannel.cpp: 732: Can't continue with getBlockLocalPathInfo() authorization. The user gpadmin is not allowed to call getBlockLocalPathInfo
        at org.apache.hadoop.hdfs.server.datanode.DataNode.checkBlockLocalPathAccess(DataNode.java:1002)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.getBlockLocalPathInfo(DataNode.java:1012)
        at org.apache.hadoop.hdfs.protocolPB.ClientDatanodeProtocolServerSideTranslatorPB.getBlockLocalPathInfo(ClientDatanodeProtocolServerSideTranslatorPB.java:112)
[...]

Cause

When using HAWQ, short-circuit reads are enabled by default and the following users are included in the default config. If a customer is running any HDFS operation with a user that is not a member of the dfs.block.local-path-access.user, then the job may fail.

<property>
    <name>dfs.client.read.shortcircuit</name>
    <value>true</value>
</property>
 
<property>
    <name>dfs.block.local-path-access.user</name>
    <value>hdfs,mapred,yarn,hbase,hive</value>
</property>

Resolution

Follow one of these two steps:

  • Add user to dfs.block.local-path-access.user.
  • Disable short-circuit reads (Not recommended if HAWQ is enabled in the cluster).  

Comments

Powered by Zendesk