Our Community is getting an upgrade! To get everything ready for the relaunch, we’ll be placing the site in read-only mode starting September 21st.
We really appreciate your understanding while we get things set up behind the scenes. Catch up on all the exciting details about the move here.
Need help or have questions? Drop us a line at [email protected]
Created on 05-30-2017 05:34 AM - edited 09-16-2022 04:40 AM
Hello,
I am trying to index a csv file after enabling kerberos.
Please note, MapReduceIndexer worked fine before using kerberos and I could index files.
My settings are as belows. Please help regarding this issue.
Command:
HADOOP_OPTS="-Djava.security.auth.login.config=/etc/solr/conf/jass.conf" \ hadoop jar /usr/lib/solr/contrib/mr/search-mr-*-job.jar org.apache.solr.hadoop.MapReduceIndexerTool \ -D 'mapred.child.java.opts=-Xmx2048m' \ --log4j /usr/share/doc/search-1.0.0+cdh5.10.0+0/examples/solr-nrt/log4j.properties \ --morphline-file /home/cloudera/workspace/solr_home/morphlines/csv_morphline.conf \ --output-dir hdfs://quickstart.cloudera:8020/user/hdfs/test_output \ --verbose \ --go-live \ --zk-host quickstart.cloudera:2181/solr \ --collection csv_collection \ hdfs://quickstart.cloudera:8020/user/hdfs/test_input/books.cs
Jass.conf:
Client {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab="/etc/hadoop/conf/hdfs.keytab"
storeKey=true
useTicketCache=false
debug=true
principal="hdfs/quickstart.cloudera@CLOUDERA";
};However, I am getting FileNotFoundException as below.
2017-05-30 05:14:36,949 WARN org.apache.hadoop.mapreduce.v2.hs.KilledHistoryService: Could not process job files java.io.FileNotFoundException: File does not exist: /user/hdfs/.staging/job_1495787732900_0011/job_1495787732900_0011.summary at org.apache.hadoop.hdfs.server.namenode.INodeFile.valueOf(INodeFile.java:66) at org.apache.hadoop.hdfs.server.namenode.INodeFile.valueOf(INodeFile.java:56) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocationsInt(FSNamesystem.java:2007) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocations(FSNamesystem.java:1977) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocations(FSNamesystem.java:1890) at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getBlockLocations(NameNodeRpcServer.java:572) at org.apache.hadoop.hdfs.server.namenode.AuthorizationProviderProxyClientProtocol.getBlockLocations(AuthorizationProviderProxyClientProtocol.java:89) at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.getBlockLocations(ClientNamenodeProtocolServerSideTranslatorPB.java:365) at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java) at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:617) at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1073) at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2216) at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2212) 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:1796) at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2210) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:526) at org.apache.hadoop.ipc.RemoteException.instantiateException(RemoteException.java:106) at org.apache.hadoop.ipc.RemoteException.unwrapRemoteException(RemoteException.java:73) at org.apache.hadoop.hdfs.DFSClient.callGetBlockLocations(DFSClient.java:1281) at org.apache.hadoop.hdfs.DFSClient.getLocatedBlocks(DFSClient.java:1266) at org.apache.hadoop.hdfs.DFSClient.getLocatedBlocks(DFSClient.java:1254) at org.apache.hadoop.hdfs.DFSInputStream.fetchLocatedBlocksAndGetLastBlockLength(DFSInputStream.java:305) at org.apache.hadoop.hdfs.DFSInputStream.openInfo(DFSInputStream.java:271) at org.apache.hadoop.hdfs.DFSInputStream.<init>(DFSInputStream.java:263) at org.apache.hadoop.hdfs.DFSClient.open(DFSClient.java:1585) at org.apache.hadoop.hdfs.DistributedFileSystem$4.doCall(DistributedFileSystem.java:326) at org.apache.hadoop.hdfs.DistributedFileSystem$4.doCall(DistributedFileSystem.java:322) at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81) at org.apache.hadoop.hdfs.DistributedFileSystem.open(DistributedFileSystem.java:322) at org.apache.hadoop.fs.FileSystem.open(FileSystem.java:783) at org.apache.hadoop.mapreduce.v2.hs.KilledHistoryService$FlagFileHandler.buildJobIndexInfo(KilledHistoryService.java:223) at org.apache.hadoop.mapreduce.v2.hs.KilledHistoryService$FlagFileHandler.access$200(KilledHistoryService.java:85) at org.apache.hadoop.mapreduce.v2.hs.KilledHistoryService$FlagFileHandler$1.run(KilledHistoryService.java:133) at org.apache.hadoop.mapreduce.v2.hs.KilledHistoryService$FlagFileHandler$1.run(KilledHistoryService.java:125) 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:1796) at org.apache.hadoop.mapreduce.v2.hs.KilledHistoryService$FlagFileHandler.run(KilledHistoryService.java:125) at java.util.TimerThread.mainLoop(Timer.java:555) at java.util.TimerThread.run(Timer.java:505) Caused by: org.apache.hadoop.ipc.RemoteException(java.io.FileNotFoundException): File does not exist: /user/hdfs/.staging/job_1495787732900_0011/job_1495787732900_0011.summary at org.apache.hadoop.hdfs.server.namenode.INodeFile.valueOf(INodeFile.java:66) at org.apache.hadoop.hdfs.server.namenode.INodeFile.valueOf(INodeFile.java:56) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocationsInt(FSNamesystem.java:2007) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocations(FSNamesystem.java:1977) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocations(FSNamesystem.java:1890) at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getBlockLocations(NameNodeRpcServer.java:572) at org.apache.hadoop.hdfs.server.namenode.AuthorizationProviderProxyClientProtocol.getBlockLocations(AuthorizationProviderProxyClientProtocol.java:89) at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.getBlockLocations(ClientNamenodeProtocolServerSideTranslatorPB.java:365) at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java) at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:617) at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1073) at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2216) at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2212) 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:1796) at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2210) at org.apache.hadoop.ipc.Client.call(Client.java:1472) at org.apache.hadoop.ipc.Client.call(Client.java:1409) at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:230) at com.sun.proxy.$Proxy17.getBlockLocations(Unknown Source) at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.getBlockLocations(ClientNamenodeProtocolTranslatorPB.java:256) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:256) at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:104) at com.sun.proxy.$Proxy18.getBlockLocations(Unknown Source) at org.apache.hadoop.hdfs.DFSClient.callGetBlockLocations(DFSClient.java:1279) ... 21 more
Created 06-05-2017 01:39 AM
I was able to solve this problem. I was getting the concept wrong. So, what I did was --
1. I created keytab file for my current user i.e "cloudera"
2. The Jaas.conf should have that keytab, not the hdfs keytab.
3. I had to add this user, hdfs user in the yarn allowed hosts through CM. Also, I added solr user too there.
4. kinit the cloudera user
5. Put the required files in the /user/cloudera directory in hdfs.
6. Run the job.
Created 05-30-2017 12:28 PM
I have a question on your command.
Can we execute "hadoop jar <jar>" command and environment variable setup command (HADOOP_OPTS) as a single command? I never tried that before... not sure I am missing something here
Becuase usually environement variable setup command will be prefixed with the keyword 'export' ... I don't know this will fix your issue but you can try to execute them separately as mentioned below.. it may help
export HADOOP_OPTS="-Djava.security.auth.login.config=/etc/solr/conf/jass.conf"
hadoop jar /usr/lib/solr/contrib/mr/search-mr-*-job.jar org.apache.solr.hadoop.MapReduceIndexerTool \ -D 'mapred.child.java.opts=-Xmx2048m' \ --log4j /usr/share/doc/search-1.0.0+cdh5.10.0+0/examples/solr-nrt/log4j.properties \ --morphline-file /home/cloudera/workspace/solr_home/morphlines/csv_morphline.conf \ --output-dir hdfs://quickstart.cloudera:8020/user/hdfs/test_output \ --verbose \ --go-live \ --zk-host quickstart.cloudera:2181/solr \ --collection csv_collection \ hdfs://quickstart.cloudera:8020/user/hdfs/test_input/books.cs
Created on 05-31-2017 03:41 AM - edited 05-31-2017 03:48 AM
Hello @saranvisa
Thanks for your reply. I was following this link: https://www.cloudera.com/documentation/enterprise/latest/topics/search_using_kerberos.html
HADOOP_OPTS="-Djava.security.auth.login.config=/home/user/jaas.conf" \ hadoop jar MapReduceIndexerTool
BTW, I have a confusion about "jaas.conf" file. What is my understanding is that this "jaas.conf", is for the hdfs.keytab looks like below:
Client {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab="/etc/hadoop/conf/hdfs.keytab"
storeKey=true
useTicketCache=false
debug=true
principal="hdfs/quickstart.cloudera@CLOUDERA";
};is my understadning correct ?
Created 06-05-2017 01:39 AM
I was able to solve this problem. I was getting the concept wrong. So, what I did was --
1. I created keytab file for my current user i.e "cloudera"
2. The Jaas.conf should have that keytab, not the hdfs keytab.
3. I had to add this user, hdfs user in the yarn allowed hosts through CM. Also, I added solr user too there.
4. kinit the cloudera user
5. Put the required files in the /user/cloudera directory in hdfs.
6. Run the job.