向所有人致意,
今天我遇到了一个关于Linux(CentOS)中非root用户的奇怪问题。
我能够编译&通过以下命令正确运行Java程序:
[root@cuda1 hadoop-0.20.2]# javac EnumDevices.java
[root@cuda1 hadoop-0.20.2]# java EnumDevices
Total number of devices: 1
Name: Tesla C1060
Version: 1.3
Clock rate: 1296000 MHz
Threads per block: 512
但我需要通过CentOS中的其他用户[B] hadoop [/ B]来运行它
[hadoop@ws37-mah-lin hadoop-0.20.2]$ javac EnumDevices.java
[hadoop@ws37-mah-lin hadoop-0.20.2]$ java EnumDevices
NVIDIA: could not open the device file /dev/nvidiactl (Permission denied).
Exception in thread "main" CUDA Driver error: 100
at jcuda.CUDA.setError(CUDA.java:1874)
at jcuda.CUDA.init(CUDA.java:62)
at jcuda.CUDA.<init>(CUDA.java:42)
at EnumDevices.main(EnumDevices.java:20)
[hadoop@ws37-mah-lin hadoop-0.20.2]$
实际上我需要运行map-reduce代码,但首先如果它运行简单,那么我会去实现它。
请指导我如何解决此问题,因为CLASSPATH对所有用户都是一样的。
谢谢&amp;最好的祝福, Adarsh Sharma
答案 0 :(得分:0)
看起来您遇到了设备文件权限问题。 Hadoop与此无关,Java类路径也没有。这可能很有用:
http://www.linuxquestions.org/questions/slackware-14/could-not-open-dev-nvidiactl-310026/