在 Windows 上运行 MapReduce 所需的权限

在 Windows 上运行 MapReduce 所需的权限


前两天学习的时候遇到执行 MapReduce 任务时报 “Failed to create symlink”、“ CreateSymbolicLink error (1314)” 错误的情况

stackoverflow 找到了解答


原因是在 driver 中使用了 job.addCacheFile() 方法设置缓存文件

1
2
// 设置 加载缓存文件
job.addCacheFile(new URI("file:///D:/test/0806a/cache/position.txt"));

在 mapper 中从缓存文件创建文件输入流

1
2
// 从缓存文件 创建文件输入流
InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream("position.txt"), "UTF-8");

这种实现方式,在执行的时候,会借助 winutils.exe 创建软连接,而该操作需要管理员权限


  • 解决方法一:mapper 改为使用绝对路径,不通过缓存文件

    • 1
      2
      
      // 使用绝对路径的方式 创建文件输入流
      InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream("D:\\test\\0806a\\cache\\position.txt"), "UTF-8");
      
  • 解决方法二:使用管理员权限开启 IDEA ,可以直接在 IDEA 中执行该 MapReduce 程序

    • 也有很多人习惯直接关闭 Windows UAC


就是以管理员方式启动 hadoop “集群” ,然后在集群中运行这个 MapReduce 的 jar 包

  1. 以管理员方式启动命令行

  2.  1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    
    # 切换目录
    D:
    cd D:\#Coding\_Environment\hadoop-2.10.1\etc\hadoop
    # 执行环境配置
    hadoop-env.cmd
    
    # 启动 hdfs,yarn
    cd D:\#Coding\_Environment\hadoop-2.10.1\sbin
    start-dfs.cmd
    start-yarn.cmd
    
    # 执行 MapReduce 程序
    cd D:\#Coding\BDdev\S3_M1\hadoop2_mapreduce\hadoop_mapreduce\target
    hadoop jar ./test.jar com.lagou.mr.map_join.MJDriver
    

相关内容