我在这个位置安装了Hadoop
的/ usr /本地/ hadoop的$
现在我要列出dfs中的文件。我使用的命令是:
hduser @ ubuntu:/ usr / local / hadoop $ bin / hadoop dfs -ls
这给了我dfs中的文件
Found 3 items
drwxr-xr-x - hduser supergroup 0 2014-03-20 03:53 /user/hduser/gutenberg
drwxr-xr-x - hduser supergroup 0 2014-03-24 22:34 /user/hduser/mytext-output
-rw-r--r-- 1 hduser supergroup 126 2014-03-24 22:30 /user/hduser/text.txt
下次,我以不同的方式尝试了同样的命令
hduser @ ubuntu:/ usr / local / hadoop $ hadoop dfs -ls
它也给了我相同的结果。
有人可以解释为什么两个都在工作,尽管从不同的文件夹执行ls命令。我希望你们理解我的问题。我只能解释这两者之间的区别:
hduser@ubuntu:/usr/local/hadoop$ bin/hadoop dfs -ls
hduser@ubuntu:/usr/local/hadoop$ hadoop dfs -ls
答案 0 :(得分:6)
在unix中,可以通过两种方式执行可执行文件,方法是在系统可执行文件路径中给出绝对/相对路径或命令(路径应在PATH变量中指定)
执行bin/hadoop dfs -ls
时,应该在目录/ usr / local / hadoop中。或者/usr/local/hadoop/bin/hadoop dfs -ls
也可以使用
unix中有一个环境变量PATH,它默认保存在可执行位置列表中,它保留以下路径/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:
。每当我们执行任何命令,如ls,mkdir等时,它都是从PATH变量中的一个位置获取的。当你给命令hadoop时(它将从路径/ usr / local / hadoop / bin /中获取)。因为您在PATH变量中指定了路径/ usr / local / hadoop / bin /。使用以下命令检查PATH变量的值
echo $PATH
答案 1 :(得分:2)
您在HADOOP_HOME
文件中设置了一个hadoop全局路径~/.bashrc
,以便Hadoop命令可以在终端中的任何位置使用。
答案 2 :(得分:2)
在这两种情况下你都得到了相同的结果,因为你已经在bashrc文件中设置了HADOOP_HOME / bin,你可以通过sudo nano~ / .bashrc来检查条目,我们这样做是因为它使我们方便从终端执行命令而不管当前文件目录
如果从bashrc文件中删除HADOOP_HOME / bin条目,则不会得到相同的结果
答案 3 :(得分:1)
因为您在配置Hadoop时设置了PATH变量。 PATH包含HADOOP主页的路径,这就是为什么即使你没有指定/ bin路径,它也是从PATH变量获取的。
答案 4 :(得分:1)
首先,您正在执行相同的命令。 hadoop安装目录中的bin / hadoop dir和hadoop是相同的,为此检查你的.bashrc文件,你必须在那里指定hadoop的可执行路径。 如果您拨打 hadoop ,则表示您正在调用 / usr / local / hadoop / bin / hadoop 命令。 如果你有输出ls-的问题 你正在hadoop文件系统上执行ls,而不是在本地文件系统上。它将显示hadoop文件系统中可用的内容。有关更多详细信息,请访问localhost:50070并查看内容
答案 5 :(得分:1)
在这两种情况下,你都得到了相同的结果,因为你已经在bashrc文件中设置了HADOOP_HOME / bin。因为在unix中,可以通过两种方式执行可执行文件,方法是在系统的可执行路径中提供绝对/相对路径或命令。
当你执行时 - “bin / hadoop dfs -ls”应该在/ usr / local / hadoop目录中。
答案 6 :(得分:1)
这与操作系统有关,而与Hadoop无关。
当您运行没有显式路径的命令时,操作系统将搜索PATH变量中的位置。在您安装Hadoop期间,您必须在用户配置文件中设置一些以下变量(.bashrc或.profiles)
export HADOOP_INSTALL=/usr/local/hadoop
export PATH=$HADOOP_INSTALL/bin:$PATH
因此,无论何时键入以下内容,都会检查$HADOOP_INSTALL/bin
,因为您已在OS PATH变量中设置此路径。
hadoop dfs -ls
当您输入以下内容时,它将使用您的代码段中的当前文件夹路径为/usr/local/hadoop
,并且在当前文件夹下方有bin/hadoop
个文件
bin/hadoop dfs -ls
因此,在这两种情况下,它使用相同的文件执行,但在一种情况下通过PATH变量和另一种情况下的当前目录内容路径(绝对路径)进行识别。
答案 7 :(得分:1)
要找到与hadoop
命令关联的可执行文件的位置,只需运行:
which hadoop
这将打印出所用hadoop
命令的位置。
答案 8 :(得分:1)
在Hadoop安装期间的某个时刻,您需要配置 hdfs文件系统。最后,您使用 hdfs namenode -format 对其进行格式化。从那时起, dfs 不会引用您自己的文件系统,而是引用 hdfs文件系统。当您执行 hadoop dfs -ls 时,它会在 hdfs文件系统上显示用户的主目录。执行命令时,您在主机文件系统中的位置无关紧要,因为它未被使用。
然而,有可能不配置hdfs,它将使用本地文件系统。无论哪种方式 hadoop dfs -ls 都会显示用户主目录的内容。
使用该注释,如果删除用户目录 / user / hduser 并执行 hadoop dfs -ls ,则会出现错误,因为用户目录不存在。
来源: https://amodernstory.com/2014/09/23/installing-hadoop-on-mac-osx-yosemite/
答案 9 :(得分:0)
我将从两个角度回答你的问题,
hduser @ ubuntu:/ usr / local / hadoop $ bin / hadoop dfs -ls
hduser @ ubuntu:/ usr / local / hadoop $ hadoop dfs -ls
$PATH
变量包含hadoop安装目录。 hadoop dfs -ls
命令时,它将从hdfs列出当前用户的主目录项。在您的情况下,它列出了hduser
用户目录数据。 希望它能回答你的问题。
答案 10 :(得分:0)
这是因为你在安装hadoop时已经导出了hadoop路径。现在你可以去确切的hadoop路径,或者只是从你那里输入hadoop。它会双向工作。
答案 11 :(得分:0)
你很可能已经导出了
PATH变量中的$ HADOOP_HOME / bin。
如果它是EMR就好了 export HADOOP_PREFIX = / usr / lib / hadoop export PATH = $ PATH:$ HADOOP_PREFIX / bin
您可以查看路径并找出
答案 12 :(得分:0)
因为 bashrc linux env setup
1)export HADOOP_PREFIX=/usr/local/hadoop/
2)export PATH=$PATH:$HADOOP_PREFIX/bin
执行此操作后,我们需要运行命令
exec bash
答案 13 :(得分:0)
安装Hadoop时,其二进制文件将添加到/ usr / bin文件夹中。
文件夹/ bin,/ sbin,/ usr / bin中的任何二进制文件都可以从UNIX中的任何路径和用户获得。证明:1:https://askubuntu.com/questions/571617/what-is-the-purpose-of-the-bin-directory
只是要添加,文件夹/ bin,/ sbin等之间存在差异,这里解释了差异(https://askubuntu.com/questions/308045/differences-between-bin-sbin-usr-bin-usr-sbin-usr-local-bin-usr-local)
答案 14 :(得分:0)
在您的情况下,hadoop
bin/
内存在/usr/local/hadoop
,因此您可以bin/hadoop
从/usr/local/hadoop
执行hadoop
(这是当前的which hadoop
以上例子中的位置。)
当echo $PATH
的位置添加到PATH时,您也可以直接执行它而不指定相对/绝对路径。
您可以通过运行inf
并打印PATH($(document).on("mouseenter", ":has('.infotip.ifixed')", function() {
var inf = $(this).children(".infotip").parent();
if (inf.length) {
var postesty = inf.offset().top,
postestx = inf.offset().top;
var itheight = $(this).children(".infotip").innerHeight(),
posY = postesty - $(window).scrollTop(),
posX = (postestx - $(window).scrollLeft()) + 190,
accuheight = (posY - itheight) + 150,
divPos = {
left: posX,
top: accuheight
};
$(this).find(".infotip.ifixed").css(divPos);
}
});
)来检查这一点。
答案 15 :(得分:0)
命令bin/hadoop dfs -ls
和hadoop dfs -ls
都适用于您,因为您在{{中设置了hadoop可执行文件( / usr / local / hadoop / bin / hadoop ) 1}}用户变量" hduser"。
要进一步理解,您可以打开终端,并使用export命令从$PATH
中删除值( $ HADOOP_HOME / bin或/ usr / local / hadoop / bin )在linux中。如果您这样做,第二个命令($PATH
)将无法为该终端会话工作。
答案 16 :(得分:0)
命令hadoop fs -ls
是列出hadoop文件系统(HDFS)中根文件夹中的所有文件和目录,而不是当前的文件系统。如果没有对HDFS根目录中的文件进行任何修改,使用此命令的结果应该相同。
您在计算机中安装hadoop时已在路径中添加了hadoop / bin。无论您在当前系统中运行它,命令都将指向相同的路径。
因此,您不要对HDFS进行任何更改,并使用相同的命令。这就是为什么你得到完全相同的结果。
答案 17 :(得分:0)
因为您在hadoop user.SO的.bashrc文件中设置了hadoop路径,所以您不需要将路径导航到bin文件夹。从bin文件夹工作的命令也可以从当前用户的根文件夹中运行。
答案 18 :(得分:0)
你必须给出bin / hadoop dfs -ls
后面的绝对路径 Absolute_path/bin/hadoop dfs -ls
答案 19 :(得分:0)
变量HADOOP_HOME可能已使用hadoop二进制文件的bin路径设置。在这种情况下,无论执行命令hadoop的位置如何,上述两个命令都可以工作。
答案 20 :(得分:0)
只需在.bashrc文件中设置所有hadoop,yarn和其他路径。它将从任何地方运行。
标准hadoop> bin / hadoop fs -ls 有关hadoop的详细信息,请参阅下面的hadoop论坛。
http://tekzak.com/forum/viewforum.php?f=2&sid=5d01e2e3c27aebc6e7ee95447ef328a4
答案 21 :(得分:0)
hadoop可执行文件位于/ bin /文件夹中,因此只要将/ bin / hadoop /设置为$ PATH中的'hadoop'变量,它就是完全相同的命令。您可以找到~/.bashrc
文件中定义的$ PATH变量。从您的根目录尝试cat .bashrc,以便查看。
答案 22 :(得分:0)
当您以hadoop用户身份登录时 只需在终端输入hado并按TAB键即可获得hadoop意味着你的hadoop设置正常工作.. 所以〜。/ bashrc文件也设置正确.. 这意味着当您从任何目录结构使用此命令时 hadoop dfs -ls / 它将为您提供hdfs
中存在的所有文件的列表答案 23 :(得分:0)
命令hadoop dfs ls
等于hdfs文件系统中的ls
命令。我们可以将其视为linux / unix中的ls
命令。
答案 24 :(得分:0)
这是有效的,因为你没有执行shell" ls"命令而不是传递" ls"作为命令的参数" hadoop"因此,在这两种情况下,执行具有相同参数的相同精确命令,即' hadoop dfs -ls'唯一改变的是,在一个案例中,你是用路径来限定它而在另一个案例中你不是,这是有效的,因为' hadoop'必须在$ PATH环境变量中设置。
答案 25 :(得分:0)
两个命令都在做同样的事情。
检查/ etc / bashrc或/root/.bashrc
在那里你会发现HADOOP_HOME设置和bin路径与路径变量一起添加。 设置它时,我们将能够从命令行执行任何地方的hadoop命令。没有其他用途.. !!!