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

2019-03-28 13:01|来源: 网络

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

}

更多Hadoop相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

相关问答

更多

求JAVA quartz 解决方案

既然是固定时间间隔执行任务,直接用SimpleTrigger就好了,用CronTrigger根本不是用来描述固定时间间隔的。

我的“最近的项目和解决方案”选项在哪里?(Where is my “Recent Projects and Solutions” option?)

看起来升级过程的某些部分刚刚删除了此菜单选项。 在nithins链接到这个问题后 ,我按照作者创建的说明重新创建了Recent Projects and Solutions菜单项。 对于后代,这些步骤是(在Visual Studio 2012中执行): 在“工具”菜单下,单击“ 自定义...” 单击“ 命令”选项卡。 将下拉列表中的菜单栏选择选项更改为文件 。 单击“ 添加新菜单” 。 单击修改选择 ,重命名为最近的项目和解决方案。 在菜单栏下拉列表下,选择文件| 最近的项目和解决方案 单击添加命 ...

ADM在TOGAF中的机遇和解决方案阶段意义何在?(What is the Meaning of Opportunities in Opportunities and Solutions Phase of ADM in TOGAF)

阶段B到阶段D包括为每个体系结构域定义基线和目标体系结构,并确定基线和目标之间的差距。 在D阶段结束时,您应该有四组架构定义和四组缺口分析。 阶段E涉及将已识别的差距合并到工作包中。 这些集体是机会。 基线(当前)体系结构和目标(未来)体系结构之间的差距是机会。 然后,您将这些要求纳入路线图并草拟实施计划,这就是解决方案要素。 希望能帮助到你。 Phases B through D involve defining the baseline and target architectures for ...

在Hadoop中实现故障注入有哪些解决方案[关闭](What are the solutions to implementing the fault-injection in Hadoop [closed])

Hadoop实际上有一个故障注入框架。 看到这个 。 Hadoop actually has a fault injection framework. See this.

无法编译解决方案?(Cannot compile solution?)

using BusinessLayer;添加using BusinessLayer; 在应用程序的顶部,如果您已经这样做,那么尝试清理并重建解决方案。 还要确保库和控制台应用程序都具有相同的.net框架版本,例如两者都是4.0而不是其中一个4.0客户端配置文件... Add using BusinessLayer; in the top of your application, if you already did that, then try to clean and rebuild the s ...

如何将我的解决方案纳入Windows Problemm报告和解决方案(How To Get My Solutions Into Windows Problemm Reports and Solutions)

本文介绍如何为Windows XP设置OCA,我相信这些步骤仍适用于Windows Vista和Windows 7。 事实证明,OCA的当前名称是“ WinQual ”。 官方网站在这里 。 This article shows how to set up OCA for Windows XP, I believe that the steps still apply for Windows Vista and Windows 7. It turns out that the current na ...

msbuild和解决方案中的多个Web项目(msbuild and multiple web projects in a solution)

所以我把一切都搞定了,这就是我现在如何调用MSBuild: <msbuild project="${root.dir}\WebPortal\WebPortal ExtJS\WebPortal ExtJS.sln" verbosity="${tools.dotnet.msbuild.verbosity}"> <property name="Configuration" value="${msbuild.configuration}" /> ...

Java验证程序和解决方案(Java verifier and resolution)

内存中的java对象被填充并对齐至少16个字节长,因此在仅包含int字段的类中有一些未使用的空间。 如果向A添加更多字段,则可能会覆盖其他对象的存储空间,但这可能也不会导致立即崩溃,尤其是在这样一个立即退出的短应用程序中。 通过声明这样的类,您可以获得更多乐趣: public class A { int[] a = new int[1]; } public class B { int a = 0x01020304; } public class Test { publi ...