hadoopMap任务失败:未指定协议

w41d8nur  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(513)

我使用的是cdh4,我正在尝试使用jocl从mapper类的cleanup()方法访问gpu(注意:我的普通代码(没有map reduce)在gpu上运行良好。
当我执行map reduce代码时,它抛出一个错误(下面指定)。

attempt_201309171647_0021_m_000000_1: No protocol specified
attempt_201309171647_0021_m_000000_1: No protocol specified
13/09/20 18:03:01 INFO mapred.JobClient: Task Id : attempt_201309171647_0021_m_000000_2, Status : FAILED
org.jocl.CLException: CL_DEVICE_NOT_FOUND
    at org.jocl.CL.checkResult(CL.java:569)
    at org.jocl.CL.clGetDeviceIDs(CL.java:2239)
    at com.testMR.jocl.WordCountMapper.cleanup(WordCountMapper.java:106)
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:142)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:672)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:330)
    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:1408)
    at org.apache.hadoop.mapred.Child.main(Child.java:262)

******************************************************************************

每个map任务都会抛出一个错误“没有指定协议”。这是什么意思?mapper类中使用了哪些协议?
当做

fzwojiic

fzwojiic1#

操作系统的图形设备有问题。
我们解决了:-)
我们遇到的问题是运行在hadoop上的amd opencl代码。mapreduce代码无法访问gpu卡。它需要x-server提供的gui服务来使用gpu计算资源。
据我所知,amd opencl代码(对于root以外的用户)在没有x-server访问权限的情况下无法运行(http://en.wikipedia.org/wiki/x_window_system)
根据这条线索http://devgurus.amd.com/thread/160838 amd正致力于让opencl在没有x-server的情况下工作。
我找到的让opencl代码在hadoop上运行的解决方案就是从这个线程改编的http://devgurus.amd.com/message/1284840 这就建议了在没有gui的情况下让opencl代码通过ssh登录运行的步骤。
以下是我遵循的步骤:
使用“chsh lightdm”命令编辑“lightdm”用户的shell,并将其设置为/bin/bash

$sudo chsh lightdm

当提示时,键入:/bin/bash
打开/etc/rc.local并在“退出0”之前添加以下行。

su -l lightdm -c "sleep 30 ; export DISPLAY=:0 ; xhost +local:"

创建一个文件/etc/profile.d/compute.sh并在其中添加以下内容(并执行“chmod 755/etc/profile.d/compute.sh”):


# !/bin/sh

export COMPUTE=:0

# export DISPLAY=:0

# export GPU_MAX_ALLOC_PRCENT=100

# export GPU_MAX_HEAP_SIZE=100

if [ ! -z "$DISPLAY" ]; then

    xhost +local:

fi

如果这个设置不起作用,上面注解掉的条目是用来测试其他东西的,但是对我们来说它起作用了
为上述脚本授予权限

$sudo chmod 755 /etc/profile.d/compute.sh

如果有人从lightdm登录/注销,x安装程序将重置,因此以下内容被添加到/etc/lightdm/lightdm.conf中

greeter-show-manual-login=true

greeter-setup-script=/etc/profile.d/compute.sh

session-setup-script=/etc/profile.d/compute.sh

重新启动系统,以便为所有用户(包括mapred)设置环境变量,现在我们可以从hadoop运行opencl代码

相关问题