Hadoop fs -ls输出当前工作目录的文件而不是hdfs卷的文件

时间:2017-12-28 18:15:55

标签: hadoop hdfs hadoop2

在OpenSuse Tumbleweed 20170703上使用Hadoop 2.8.2设置了一个伪分布式节点(localhost).Java版本为1.8.0_151。通常,它似乎设置正确。我可以格式化hadoop fs -ls而没有错误等。

但是,当我尝试hdfs时,会返回当前工作目录中的文件/目录,而不是返回core-site.xml卷文件(此时应该没有任何内容)的预期行为。

最初关注this guide for CentOS(根据需要进行更改)和Apache Hadoop guide

我假设它是配置问题,但我不明白为什么会这样。我已经按照下面的hdfs-site.xml/opt/hadoop-hdfs-volume/玩了一下,没有运气。

hadoop已存在,已分配给用户组hadoop中的用户/opt/hadoop/。和/tmp/hadoop-hadoop/dfs/name目录一样(对于bin的东西)。

修改

hdfs namenode -format是运行/tmp/命令的地方。 /tmp/hadoop-dijksterhuis似乎也拥有我的用户(hadoop)和*-site.xml用户目录。

考虑到下面的dfs配置文件,这对我来说似乎很奇怪。

尝试使用yarn目录中的.sh脚本重新启动hadoop/sbin/<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/opt/hadoop-hdfs-volume/${user.name}</value> </property> </configuration> 服务。也重新启动了。没有运气!

核心-site.xml中:

<configuration>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>${hadoop.tmp.dir}/dfs/data</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>${hadoop.tmp.dir}/dfs/name</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

HDFS-site.xml中:

Sub addTask(taskName As String, taskDescription As String, taskEXEPath As String, taskParameters As String)
        taskName = taskName.Trim
        taskDescription = taskDescription.Trim
        taskEXEPath = taskEXEPath.Trim
        taskParameters = taskParameters.Trim

        If Not IO.File.Exists(taskEXEPath) Then
            MsgBox("Executable path not found.", MsgBoxStyle.Critical, Me.Text)
            Exit Sub
        End If

        Dim taskService As TaskService = New TaskService()
        Dim newTask As TaskDefinition = taskService.NewTask

        newTask.RegistrationInfo.Description = taskDescription

        If chkEnabled.Checked Then newTask.Triggers.Add(New LogonTrigger)

        Dim exeFileInfo As New FileInfo(taskEXEPath)

        newTask.Actions.Add(New ExecAction(Chr(34) & taskEXEPath & Chr(34), taskParameters, exeFileInfo.DirectoryName))

        newTask.Principal.RunLevel = TaskRunLevel.Highest
        newTask.Settings.Compatibility = TaskCompatibility.V2_1
        newTask.Settings.AllowDemandStart = True
        newTask.Settings.DisallowStartIfOnBatteries = False
        newTask.Settings.RunOnlyIfIdle = False
        newTask.Settings.StopIfGoingOnBatteries = False
        newTask.Settings.AllowHardTerminate = False
        newTask.Settings.UseUnifiedSchedulingEngine = True
        newTask.Settings.ExecutionTimeLimit = Nothing
        newTask.Settings.Priority = ProcessPriorityClass.Normal
        newTask.Principal.LogonType = TaskLogonType.InteractiveToken

        taskService.RootFolder.SubFolders(strTaskFolderName).RegisterTaskDefinition(taskName, newTask)

        newTask.Dispose()
        taskService.Dispose()
        newTask = Nothing
        taskService = Nothing
    End Sub

有人有什么想法吗?如果需要,我可以提供更多细节。

1 个答案:

答案 0 :(得分:0)

通过another SO answer

管理修复修复程序

<div class="col s12 m6 l2">添加到$HADOOP_CONF_DIR=/opt/hadoop/etc/hadoop用户的hadoop

这会覆盖.bashrc中的值,该值会将namenode指向默认的etc/hadoop-env.sh目录。

tmp/hadoop-${user-name}瞧!问题已解决。