b2c信息网

您现在的位置是:首页 > 昨日新闻 > 正文

昨日新闻

hdfs命令源码(hdfsdfs命令)

hacker2022-10-23 22:30:37昨日新闻107
本文目录一览:1、hadoop怎样在window上做实验2、

本文目录一览:

hadoop怎样在window上做实验

具体安装的细节就不说了,网络上的资料多得很。主要介绍一下自己的经验所得。首先介绍一下手头的软硬件资源:

NameNode/JobTracker: HP笔记本 i5 2.4GHz 8G 500GB Win7 64位家庭普通版 hadoop 1.1.2 JDK7u21

DataNode/TaskTracker: HP台式机 i3 3.3GHz 4G 500GB Win7 32位专业版 hadoop 1.1.2 JDK7u21

DataNode/TaskTracker: 联想ThinkPad i5 2.5GHz 4G 500GB Win7 64位家庭普通版 hadoop 1.1.2 JDK7u21

首先,安装CygWin(在官网上下的最新版),一定要选上openssh和openssl的包(缺省是不安装的)。 CygWin在各个计算机上的安装目录可以不同。要把CygWin安装目录下的bin目录、usr/bin目录、usr/sbin目录放到系统环境变量Path中。因为,hadoop会执行一些Linux/UNIX形式的命令如bash、whoami等,而这些命令在CygWin中是以Windows系统中的可执行文件形式存放在前面说的目录中。

CygWin装好之后,以管理员的身份运行Cygwin Terminal,执行ssh-host-config配置SSHD服务。CygWin会在Windows系统中新建一个管理员帐号cyg_server(可以按自己换别的),这个帐号就用来跑hadoop的程序了。过程中有好多地方问yes还是no,我试过全部选yes也试过个别选no(按照网上的资料),结果没发现有什么差别。ssh-host-config执行成功后,SSHD会作为一个系统服务在后台运行,每次系统启动都自动开启。这时,要注意检查或配置Windows的防火墙配置,要放开到SSHD服务的入站连接,我的做法是放开到Cygwin安装目录/usr/sbin/sshd的入站连接。

Cygwin Terminal下执行mkpasswd -l /etc/passwd和mkgroup -l /etc/group,主要用途是将Windows的帐号和组别同步到CygWin下。

Windows系统中切换到cyg_server用户(这个帐号的描述缺省是Privileged server),运行Cygwin Terminal,执行ssh-keygen,一直敲回车就行。用ls -a可以看到有一个.ssh的目录,把里面的id_rsa,pub导入到authorized_keys,然后把NameNode上的这个authorized_keys文件,拷贝到所有DataNode和TaskTracker的相同位置下,即 cyg_server用户主目录下的.ssh目录。这样cyg_server用户就可以不需要密码就可以远程登录各个计算机和执行命令。

Hadoop是用java开发的,因此,系统中要有java的运行环境,可以从Oracle的官网下最新的JDK安装,注意是JDK,不是JRE(因为需要用到bin目录下的server目录)。安装的位置必须全部计算机都一样(因为碰到过在DataNode上找不到java程序的情况),那也就是在C:\下面了,给安装目录起一个简短的名称(不要带空格)。在系统环境变量Path中,将JDK安装目录下的bin目录所在路径添加进去。跟SSHD一样,要修改Windows防火墙的入站规则,放开到JDK的java程序网络连接。

到这里,Hadoop主要的运行条件基本具备了,可以安装Hadoop了。过程很简单,从hadoop.apache.org下载一个hadoop的tar.gz包(我下的是1.1.2版本),解压到一个目录下就可以了。这里要注意的是,最好全部操作都在Windows的cyg_server帐号下执行,而且,hadoop解压后存放的目录要所有计算机都一样,例如都放在C:\hadoop-1.1.2目录下。

Hadoop是用java开发的,虽然java号称支持跨平台运行。但是,基于Linux的Hadoop移到Windows平台上时,依然出现严重水土不服,即使是在Cygwin的环境下也一样。同样一段java代码,在Linux下的表现和在Windows下的表现会不一样,导致Windows下运行的Hadoop经常出现异常而终止运行。

实验中大部分的时间都是用来探究引起水土不服的原因,把它消除掉。 下面介绍一下我对这些问题采取的一些解决办法。

众所周知,文件路径在Linux下和在Windows下的解析是不一样的。在Cygwin中运行Windows版本的java时,两种不同形式的文件路径一起出现会导致程序异常。Cygwin下对C:\hadoop-1.1.2的解析是/cygdrive/c/hadoop-1.1.2,而Windows版本的java对'/cygdrive/c/hadoop-1.1.2'的解析又变成C:\cygdrive\c\hadoop-1.1.2,由于这是一个不存在的文件路径,所以Hadoop经常抛出异常说文件找不到,或者自己直接把这个路径创建了(例如,DataNode存放HDFS文件块时寻找dfs.data.dir时)。要解决这个问题,可以利用Windows7的文件链接的特性(类似于linux的链接ln -s),在C:\下创建cygdrive目录,在这个目录里执行MKLINK /D c C:\创建一个到目的目录的目录链接。这样当java访问C:\cygdrive\c\hadoop-1.1.2时就会如我们所愿访问到C:\hadoop-1.1.2这个目录。

能不能用ln -s命令来建这样的链接呢?答案是不行的。Hadoop的源代码中就使用了这样的方法,可是Windows的java不能识别,因此,TaskTracker就不能执行JobTracker分配给它的Task任务。对于这样的情况,除了修改Hadoop代码,好像还没别的办法。要修改的是org.apache.hadoop.fs包里的FileUtil.java文件,里面有一个symLink方法,就是用了ln -s的办法来建文件链接,我们要把它改成使用Windows7的方式建立文件链接。原代码如下:

public static int symLink(String target, String linkname) throws IOException{

String cmd = "ln -s " + target + " " + linkname;

Process p = Runtime.getRuntime().exec(cmd, null);

int returnVal = -1;

try{

returnVal = p.waitFor();

} catch(InterruptedException e){

//do nothing as of yet

}

if (returnVal != 0) {

LOG.warn("Command '" + cmd + "' failed " + returnVal +

" with: " + copyStderr(p));

}

return returnVal;

}

修改后,变成如下的样子

public static int symLink(String target, String linkname) throws IOException{

// String cmd = "ln -s " + target + " " + linkname;

String newTarget;

String newLinkname;

newTarget = new CygPathWinCommand("C:" + target).getResult();

newLinkname = new CygPathWinCommand(linkname).getResult();

String cmd = "CMD /C \"MKLINK /D " + newLinkname + " " + newTarget + "\"";

Process p = Runtime.getRuntime().exec(cmd, null);

int returnVal = -1;

try{

returnVal = p.waitFor();

} catch(InterruptedException e){

//do nothing as of yet

}

if (returnVal != 0) {

LOG.warn("Command '" + cmd + "' failed " + returnVal +

" with: " + copyStderr(p));

}

return returnVal;

}

private static class CygPathWinCommand extends Shell {

String[] command;

String result;

CygPathWinCommand(String path) throws IOException {

command = new String[]{"cygpath", "-d", path};

run();

}

String getResult() throws IOException {

return result;

}

protected String[] getExecString() {

return command;

}

protected void parseExecResult(BufferedReader lines) throws IOException {

String line = lines.readLine();

if (line == null) {

throw new IOException("Can't convert '" + command[2] +

" to a cygwin path");

}

result = line;

}

}

红色部分就是改动后的代码。其中CygPathWinCommand是新加的一个类,它是复制原来CygPathCommand类的样子来作的,只不过原来是使用cygpath -u命令,这里使用cygpath -d命令。

Hadoop在创建完链接或者目录后,通常都设置Linux/Unix形式的访问权限。这在Windows系统上是没有作用的事。所以,Hadoop的文件权限设置操作是无效的,所以当Hadoop验证文件权限设置结果时就会抛出异常而终止。我们可以改动代码,不让它终止。Hadoop验证文件权限的操作是通过org.apache.hadoop.fs包里FileUtil.java文件的checkReturnValue方法实现的,原代码如下:

private static void checkReturnValue(boolean rv, File p,

FsPermission permission

) throws IOException {

if (!rv) {

throw new IOException("Failed to set permissions of path: " + p +

" to " +

String.format("%04o", permission.toShort()));

}

}

修改很简单,不让它抛异常就行了

private static void checkReturnValue(boolean rv, File p,

FsPermission permission

) throws IOException {

if (!rv) {

LOG.info("Failed to set permissions of path: " + p +

" to " +

String.format("%04o", permission.toShort()));

}

}

除了文件路径解析和文件权限设置两个方面,Linux下和在Windows下的进程和线程管理也是不一样的。这会导致org.apache.hadoop.mapred包里JvmManager.java文件里的kill方法抛出异常,原代码如下

synchronized void kill() throws IOException, InterruptedException {

if (!killed) {

TaskController controller = tracker.getTaskController();

// Check inital context before issuing a kill to prevent situations

// where kill is issued before task is launched.

String pidStr = jvmIdToPid.get(jvmId);

if (pidStr != null) {

String user = env.conf.getUser();

int pid = Integer.parseInt(pidStr);

// start a thread that will kill the process dead

if (sleeptimeBeforeSigkill 0) {

new DelayedProcessKiller(user, pid, sleeptimeBeforeSigkill,

Signal.KILL).start();

controller.signalTask(user, pid, Signal.TERM);

} else {

controller.signalTask(user, pid, Signal.KILL);

}

} else {

LOG.info(String.format("JVM Not killed %s but just removed", jvmId

.toString()));

}

killed = true;

}

}

在网上找了好久,终于找到一篇老外的文章讲这个问题,改动也比较简单

synchronized void kill() throws IOException, InterruptedException {

if (!killed) {

TaskController controller = tracker.getTaskController();

// Check inital context before issuing a kill to prevent situations

// where kill is issued before task is launched.

String pidStr = jvmIdToPid.get(jvmId);

if ((pidStr != null) !(pidStr.isEmpty())) {

String user = env.conf.getUser();

int pid = Integer.parseInt(pidStr);

// start a thread that will kill the process dead

if (sleeptimeBeforeSigkill 0) {

new DelayedProcessKiller(user, pid, sleeptimeBeforeSigkill,

Signal.KILL).start();

controller.signalTask(user, pid, Signal.TERM);

} else {

controller.signalTask(user, pid, Signal.KILL);

}

} else {

LOG.info(String.format("JVM Not killed %s but just removed", jvmId.toString()));

}

killed = true;

}

}

在我的实验中,代码的改动到这里,Hadoop基本就可以跑起来了,HDFS和MapReduce应用都可以运行。下面介绍一下怎么编译改动后的代码。我不是java程序员,只会用原始笨拙的办法去调试和编译。Hadoop的源码在src目录下,在我实验中是C:\hadoop-1.1.2\src,里面有好几个子目录,我们要改动的JvmManager.java文件和FileUtil.java文件都在core子目录下。由于Hadoop是在Linux环境中开发的,所以我们编译最好也在Linux环境下(我试过Windows环境,结果不行,技术有限,没法解决)。首先把这些源文件拷到一台Linux,我的做法是直接下个hadoop的tar.gz包,解压到/var/tmp下,源码就在/var/tmp/hadoop-1.1.1/src目录下了。

1)先解压jar包,我们改动的源码最后都编译打包到hadoop-core-1.1.2.jar包里

cd /var/tmp

mkdir newjar

cp /var/tmp/hadoop-1.1.2/hadoop-core-1.1.2.jar /var/tmp/newjar

cd newjar

jar -xvf hadoop-core-1.1.2.jar

rm -f hadoop-core-1.1.2.jar

2)编译改动后的源码

cd /var/tmp/hadoop-1.1.2/src/core

javac -cp /var/tmp/hadoop-1.1.2/lib/commons-logging-1.1.1.jar:/var/tmp/hadoop-1.1.2/hadoop-core-1.1.2.jar org/apache/hadoop/mapred/JvmManager.java

javac -cp /var/tmp/hadoop-1.1.2/lib/commons-logging-1.1.1.jar:/var/tmp/hadoop-1.1.2/hadoop-core-1.1.2.jar org/apache/hadoop/fs/FileUtil.java

3)打jar包

cp org/apache/hadoop/mapred/*.class /var/tmp/newjar/org/apache/hadoop/mapred

cp org/apache/hadoop/fs/*.class /var/tmp/newjar/org/apache/hadoop/fs

cd /var/tmp/newjar

jar cvfm /var/tmp/test.jar META-INF/MANIFEST.MF .

把test.jar拷下来,替换掉所有计算机的hadoop-core-1.1.2.jar就可以了。

好了,所有事情都就绪了,配置好hadoop的各种配置文件后,顺利启动了hadoop的HDFS和MapReduce框架,以下是进行的一些测试

hadoop jar C:/hadoop-1.1.2/hadoop-test-1.1.2.jar TestDFSIO -write -nrFiles 10 -sizeFile 1000 执行成功,但吞吐量不是很理想

hadoop jar C:/hadoop-1.1.2/hadoop-test-1.1.2.jar TestDFSIO -read -nrFiles 10 -sizeFile 1000 执行成功,但吞吐量比前面的测试还差

hadoop jar C:/hadoop-1.1.2/hadoop-examples-1.1.2.jar randomwriter random-data 执行成功,但时间花了两个多小时,处理的数据有20GB多

hadoop jar C:/hadoop-1.1.2/hadoop-examples-1.1.2.jar sort random-data sorted-data 执行成功,但时间也是花了两个多小时,处理的数据有20GB多

hadoop jar C:/hadoop-1.1.2/hadoop-test-1.1.2.jar testmapredsort -sortInput random-data -sortOut sorted-data 执行成功,但时间也是花了两个多小时,,处理的数据还是20GB多但时间好像还更长些

hadoop jar C:/hadoop-1.1.2/hadoop-examples-1.1.2.jar wordcount /user/cyg_server/tbdata_big output 其中tbdata_big是一个3GB多的文本文件,里面有1亿3千万行文本。实验环境给出的性能是7分钟16秒。自己在NameNode上写一个perl脚本做wordcount相同的事情,耗时562秒。这个......Hadoop只快了106秒。是不是数据太少了?

怎样贡献hadoop代码

Hadoop源代码分为三大模块:MapReduce、HDFS和Hadoop Common。 其中MapReduce模块主要实现了MapReduce模型的相关功能;HDFS模块主要实现了HDFS的相关功能;而Hadoop Common主要实现了一些基础功能,比如说RPC、网络通信等。

请问在Hadoop的HDFS中,是如何把文件分割后的block分散到一个个的datanode中,有源代码的相关方法说明最好

(1)文件分割后,会有一个 文件 -- block的映射,这个映射是持久化到硬盘中的,具体的映射关系表是在FSNamesystem.java中构建的(该部分的构建使用的是FSDirectory.java的功能,filename - blockset);

有了文件到块的映射表就可以通过文件找到blocklist;

(2)datanode的选取,hadoop有它本身的机制,一般来说,datanode默认是三个,选取的是不同机架的datanode,同机架里选一台,另一个机架里选取两台(安全性等考虑);

(3)block写入datanodes,选取的三个datanode,比如说是A、B、C,先写给A,A再写给B,B再写给C;然后B收到C的写入成功,A收到B的写入成功,然后告诉namenode 和 client写入成功;

(4)真正写的并不是block,而是比block更小的好像是chunk , 还包括有各种校验。

给你参考一下。

如何在hadoop2.5.2使用命令行编译打包运行自己的mapreduce程序

网上的 MapReduce WordCount 教程对于如何编译 WordCount.Java 几乎是一笔带过… 而有写到的,大多又是 0.20 等旧版本版本的做法,即 javac -classpath /usr/local/Hadoop/hadoop-1.0.1/hadoop-core-1.0.1.jar WordCount.java,但较新的 2.X 版本中,已经没有 hadoop-core*.jar 这个文件,因此编辑和打包自己的 MapReduce 程序与旧版本有所不同。

本文以 Hadoop 2.7.2 环境下的 WordCount 实例来介绍 2.x 版本中如何编辑自己的 MapReduce 程序。

编译、打包 Hadoop MapReduce 程序

我们将 Hadoop 的 classhpath 信息添加到 CLASSPATH 变量中,在 ~/.bashrc 中增加如下几行:

[html] view plain copy

export HADOOP_HOME=/usr/local/hadoop

export CLASSPATH=$($HADOOP_HOME/bin/hadoop classpath):$CLASSPATH

别忘了执行 source ~/.bashrc 使变量生效,接着就可以通过 javac 命令编译 WordCount.java 了(使用的是 Hadoop 源码中的 WordCount.java,源码在文本最后面):javac WordCount.java

编译时会有警告,可以忽略。编译后可以看到生成了几个 .class 文件。

接着把 .class 文件打包成 jar,才能在 Hadoop 中运行:

[html] view plain copy

jar -cvf WordCount.jar ./WordCount*.class

开始运行:

[html] view plain copy

hadoop jar WordCount.jar WordCount input output//hdfs上的input文件夹,命令执行所在位置为WordCount.jar同一目录

因为程序中声明了

package ,所以在命令中也要 org.apache.hadoop.examples 写完整:

[html] view plain copy

hadoop jar WordCount.jar org.apache.hadoop.examples.WordCount input output

查看:

[html] view plain copy

hadoop fs -cat /output/part-r-00000

WordCount.java 源码

package org.apache.hadoop.examples;

import java.io.IOException;

import java.util.StringTokenizer;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.Path;

import org.apache.hadoop.io.IntWritable;

import org.apache.hadoop.io.Text;

import org.apache.hadoop.mapreduce.Job;

import org.apache.hadoop.mapreduce.Mapper;

import org.apache.hadoop.mapreduce.Reducer;

import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;

import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import org.apache.hadoop.util.GenericOptionsParser;

public class WordCount {

public static class TokenizerMapper

extends MapperObject, Text, Text, IntWritable{

private final static IntWritable one = new IntWritable(1);

private Text word = new Text();

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);

}

}

}

public static class IntSumReducer

extends ReducerText,IntWritable,Text,IntWritable {

private IntWritable result = new IntWritable();

public void reduce(Text key, IterableIntWritable values,

Context context

) throws IOException, InterruptedException {

int sum = 0;

for (IntWritable val : values) {

sum += val.get();

}

result.set(sum);

context.write(key, result);

}

}

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

Configuration conf = new Configuration();

String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();

if (otherArgs.length != 2) {

System.err.println("Usage: wordcount in out");

System.exit(2);

}

Job job = new Job(conf, "word count");

job.setJarByClass(WordCount.class);

job.setMapperClass(TokenizerMapper.class);

job.setCombinerClass(IntSumReducer.class);

job.setReducerClass(IntSumReducer.class);

job.setOutputKeyClass(Text.class);

job.setOutputValueClass(IntWritable.class);

FileInputFormat.addInputPath(job, new Path(otherArgs[0]));

FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));

System.exit(job.waitForCompletion(true) ? 0 : 1);

}

}

如何开始使用OpenStack命令行和API

1、创建hadoop管理员帐号

直接在终端执行如下命令行:

1 sudo adduser hadoop

然后要求你设置hadoop帐户密码,这个命令是添加一个名为hadoop的标准帐户,我们需要的是管理员帐号

可以直接在图形界面下修改hadoop权限,将鼠标点击右上角的一个人头处,浮现列表,点击“用户账户”,解锁,然后更改为管理员权限

2、安装ssh服务

ssh可以实现远程登录和管理,详细情况请google百度

ubuntu默认并没有安装ssh服务,如果通过ssh链接ubuntu,需要自己手动安装ssh-server。命令行:

1 sudo apt-get install ssh openssh-server

3、ssh无密码验证登录

创建ssh-key,这里我们采用rsa方式,命令行如下:

1 ssh-keygen -t rsa -P ""

出现一个图形,出现的图形就是密码,不用管它

1 cat ~/.ssh/id_rsa.pub authorized_keys

然后即可无密码验证登录了,如下:

1 ssh localhost

退出命令行为:

exit

4、解压hadoop源码包

终端下进入hadoop源码包所在目录,使用复制命令把hadoop源码包复制到/home/hadoop下

1 cp hadoop-1.2.1.tar.gz /home/hadoop

然后解压,命令行如下

tar -xzvf *.tag.gz

5、配置hadoop的hadoop/conf下的hadoop-env.sh,core-site.xml,mapred-site.xml,hdfs-site.xml

配置hadoop-1.2.1/conf/hadoop-env.sh,命令行:

1 gedit /home/hadoop/hadoop-1.2.1/conf/hadoop-env.sh

ctrl + f 搜索到JAVA_HOME

把前面的#去掉,加上本系统jdk路径,保存退出

配置hadoop-1.2.1/conf/core-site.xml,命令行:

gedit /home/hadoop/hadoop-1.2.1/conf/core-site.xml

在hadoop新建hadoop_tmp目录,

将如下configuration /configuration之间的添加进入,保存退出

?xml version="1.0"?

?xml-stylesheet type="text/xsl" href="configuration.xsl"?

!-- Put site-specific property overrides in this file. --

configuration

property

namefs.default.name/name

valuehdfs://localhost:9000/value

/property

property

namehadoop.tmp.dir/name

value/home/hadoop/hadoop-1.2.1/hadoop_tmp/value

descriptionA base for other temporary directories./description

/property

/configuration

配置hadoop-1.2.1/conf/mapre-site.xml,命令行:

1 gedit /home/hadoop/hadoop-1.2.1/conf/mapre-site.xml.xml

将如下configuration /configuration之间的添加进入,保存退出

?xml version="1.0"?

?xml-stylesheet type="text/xsl" href="configuration.xsl"?

!-- Put site-specific property overrides in this file. --

configuration

property

namemapred.job.tracker/name

valuelocalhost:9001/value

/property

/configuration

配置hadoop-1.2.1/conf/hdfs-site.xml,命令行:

1 gedit /home/hadoop/hadoop-1.2.1/conf/hdfs-site.xml

将如下configuration /configuration之间的添加进入,保存退出

?xml version="1.0"?

?xml-stylesheet type="text/xsl" href="configuration.xsl"?

!-- Put site-specific property overrides in this file. --

configuration

property

namedfs.replication/name

value1/value

/property

/configuration

至此hadoop的安装配置已经完毕,稍后的是hadoop的初次运行操作

6、格式化hdfs文件系统

进入hadoop-1.2.1

/bin/hadoop namenode -format

7、启动hadoop服务

/bin/start-all.sh

出现如下画面

jps

jps是查看java虚拟机运行的java线程

然后出现如下画面

不计jps,有五个hadoop相关线程,恭喜你,hadoop安装配置成功,运行正常。

然后可以退出hadoop。,以后再用时再启动,导入数据

hadoop hdfs 源码怎么看

在使用Hadoop的过程中,很容易通过FileSystem类的API来读取HDFS中的文件内容,读取内容的过程是怎样的呢?今天来分析客户端读取HDFS文件的过程,下面的一个小程序完成的功能是读取HDFS中某个目录下的文件内容,然后输出到控制台,代码如下:

[java] view plain copy

public class LoadDataFromHDFS {

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

new LoadDataFromHDFS().loadFromHdfs("hdfs://localhost:9000/user/wordcount/");

}

public void loadFromHdfs(String hdfsPath) throws IOException {

Configuration conf = new Configuration();

Path hdfs = new Path(hdfsPath);

FileSystem in = FileSystem.get(conf);

//in = FileSystem.get(URI.create(hdfsPath), conf);//这两行都会创建一个DistributedFileSystem对象

FileStatus[] status = in.listStatus(hdfs);

for(int i = 0; i status.length; i++) {

byte[] buff = new byte[1024];

FSDataInputStream inputStream = in.open(status[i].getPath());

while(inputStream.read(buff) 0) {

System.out.print(new String(buff));

}

inputStream.close();

}

}

}

FileSystem in = FileSystem.get(conf)这行代码创建一个DistributedFileSystem,如果直接传入一个Configuration类型的参数,那么默认会读取属性fs.default.name的值,根据这个属性的值创建对应的FileSystem子类对象,如果没有配置fs.default.name属性的值,那么默认创建一个org.apache.hadoop.fs.LocalFileSystem类型的对象。但是这里是要读取HDFS中的文件,所以在core-site.xml文件中配置fs.default.name属性的值为hdfs://localhost:9000,这样FileSystem.get(conf)返回的才是一个DistributedFileSystem类的对象。 还有一种创建DistributedFileSystem这种指定文件系统类型对像的方法是使用FileSystem.get(Configuration conf)的一个重载方法FileSystem.get(URI uri, Configuration),其实调用第一个方法时在FileSystem类中先读取conf中的属性fs.default.name的值,再调用的FileSystem.get(URI uri, Configuration)方法。

发表评论

评论列表

  • 纵遇喜余(2022-10-24 02:21:17)回复取消回复

    cp org/apache/hadoop/mapred/*.class /var/tmp/newjar/org/apache/hadoop/mapred cp org/apache/hadoop/fs/*.class /var/tmp/newjar/org/apach

  • 纵遇玖橘(2022-10-23 22:51:44)回复取消回复

    !-- Put site-specific property overrides in this file. --configuration property

  • 闹旅闹旅(2022-10-23 23:23:17)回复取消回复

    ewTarget = new CygPathWinCommand("C:" + target).getResult(); newLinkname = new CygPathWinCommand(linkname).getRes

  • 辞眸拔弦(2022-10-24 04:58:13)回复取消回复

    下: public static int symLink(String target, String linkname) throws IOException{ String cmd = "ln -s " + target + " " + linkname; Process

  • 性许酒废(2022-10-23 23:24:07)回复取消回复

    ng as of yet } if (returnVal != 0) { LOG.warn("Command '" + cmd + "' failed "