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

本文介绍了解决在使用Hadoop进行文件操作时遇到的权限不足问题的方法,并提供了一个脚本来自动处理依赖问题,确保编译过程顺利。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题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=new Configuration();

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

	            FileSystem hdfs=FileSystem.get(conf);

	            //本地文件

	            Path src =new Path("t.txt");

	            //HDFS为止

	            Path dst =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();
        }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值