如何通过使用Hadoop

时间:2019-01-22 06:50:57

标签: java hadoop hdfs wine

我正在研究Hadoop。

我想使用Hadoop与exe文件并行处理数据。

我试图在Mapper类中调用一个exe文件,但是发生了以下错误。

■错误消息:

wine: '/home' is not owned by you, refusing to create a configuration directory there

■我的环境:

OS:CentOS 7(VMWare)

Hadoop 2.9.2(伪分布式)

java openjdk 1.8.0_191

■方法1:指定“ WINEPREFIX”

我在运行时在Java文件中设置了WINEPREFIX。并使用下面的代码。

ProcessBuilder pb_ex = new ProcessBuilder( "export", "WINEPREFIX=/user/(username)/wine_env" ); // the directory /user/(username)/wine_env is exists.
Process process_ex = pb_ex.start();
process_ex.waitFor();

但是,发生以下错误。

Error: java.io.IOException: Cannot run program "export": error=2, No such file or directory

■方法2:“小丑”表示“ / home”

在终端中执行以下代码后,我执行了jar文件。

bin/hdfs dfs -chown (username) /home
or
bin/hdfs dfs -chown -R (username) /home

发生了与第一个错误相同的错误(酒:“ / home”不归您所有,拒绝在此处创建配置目录)。

■方法3:更改访问权限

HDFS上“ ./home”的访问权限从1更改为2。

1:drwxr-xr-x

2:drwxrwxrwx

发生了与第一个错误相同的错误(酒:“ / home”不归您所有,拒绝在此处创建配置目录)。

■源代码:

我使用了官方页面教程中的源代码。 (https://hadoop.apache.org/docs/stable/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html

我如下更改了TokenizerMapper类的“地图”功能。

※“ convertInputStreamToString()”是将Stream值转换为String值的函数。

※“ fileName”已获取。

public void map(Object key, Text value, Context context
                ) throws IOException, InterruptedException {
  StringTokenizer itr = new StringTokenizer(value.toString());
  while (itr.hasMoreTokens()) {
    word.set(itr.nextToken());
    context.write(word, one);
  }
  // from here
  ProcessBuilder pb = new ProcessBuilder( "./testHello.exe", fileName );
  Process process = pb.start();
  int ret = process.waitFor();
  InputStream is = process.getInputStream();
  InputStream es = process.getErrorStream();
  String theString1 = convertInputStreamToString(is);
  String theString2 = convertInputStreamToString(es);
  Text word2 = new Text( ret + " " + cmd + " ," + theString1 + " ," + theString2);
  IntWritable one2 = new IntWritable(1);
  context.write(word2, one2);   // Confirm error message
}

■预期结果:

ret = 0

■实际结果:

ret = 1

theString2 =葡萄酒:'/ home'不是您的所有,拒绝在此处创建配置目录

有人对我可以尝试的其他事情有任何想法吗?

任何帮助将不胜感激。在这里变得绝望。

0 个答案:

没有答案