Java访问Hadoop编译和运行遇到的各类问题和解决方

Java访问Hadoop编译和运行遇到的各类问题和解决方案:

问题1:

在javac编译时,老是缺少依赖的类,

解决方案:

所以我之后写了一个脚本,将所有的.jar文件都加载到CLASSPATH变量中,就ok了。

问题2:

而实际操作中出现文件操作的权限不足。因为用hadoop shell放进去的默认权限是rw-r--r--,所以作为程序对象就没有操作权限。

解决方案:

java之之前加上sudo权限即可。如果还是不行,那只好:/bin/hadoop fs -chmod 777 文件名

我的shell脚本是这样写的。(jardir是我先将所有的jar文件cp到了该目录)

#!/bin/sh
FILES=/usr/local/hadoop/jardir/*
v=""
for f in $FILES
do
    v1=${f}
    v2=${v1}:${v}
    v=${v2}
done

echo "$v"

v2="."
v=${v}${v2}

sudo javac -classpath ${v} CopyFile.java
sudo java -classpath ${v} CopyFile

之后只用运行:

sh build.sh

即可

下面附上我的java代码:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;

public class CopyFile {

public static void main(String[] args) throws Exception {

Configuration conf=https://www.linuxidc.com/Linux/2013-05/new Configuration();

conf.set("fs.default.name","hdfs://localhost:9000");
      conf.set("hadoop.job.ugi","hadoop,hadoop");

FileSystem hdfs=FileSystem.get(conf);

//本地文件

Path src =https://www.linuxidc.com/Linux/2013-05/new Path("t.txt");

//HDFS为止

Path dst =https://www.linuxidc.com/Linux/2013-05/new Path("/my/b.txt");


            hdfs.copyFromLocalFile(src, dst);
            System.out.println("Upload to"+conf.get("fs.default.name"));


            FileStatus files[]=hdfs.listStatus(dst);
            for(FileStatus file:files)
              System.out.println(file.getPath());

boolean b=hdfs.delete(new Path("/my/t.txt"));
System.out.println("b="+b);
hdfs.close();
        }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/4056b18761cb788531fcda2b509dfd5a.html