非法具有多个根(结语中的开始标记?)

时间:2018-08-29 09:04:31

标签: xml

设置Hadoop时出现错误。

java.lang.RuntimeException:com.ctc.wstx.exc.WstxParsingException:非法具有多个根(Epilog中的开始标记?)。  在[row,col,system-id]:[8,2,“文件:/usr/local/hadoop/etc/hadoop/core-site.xml”]

core-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<property>
    <name>hadoop.tmp.dir</name>
    <value>/app/hadoop/tmp</value>
    <description>A base for other temporary directories.</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
<description>The name of the default file system. A URI whose scheme and authority determine the FileSystem implementation. The uri's scheme determines the config property (fs.SCHEME.impl) naming the FileSystem implementation class. The uri's authority is used to determine the host, port, etc. for a filesystem.</description>
</property>

上面的错误似乎是由于xml格式引起的。我可以知道如何解决这种错误吗?

3 个答案:

答案 0 :(得分:2)

XML只能具有一个顶层(“根”)元素(不包括<?xml>处理指令)。在Hadoop的core-site.xml中,此标记应为<configuration>。因此,请尝试以下操作:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/app/hadoop/tmp</value>
        <description>A base for other temporary directories.</description>
    </property>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://localhost:9000</value>
        <description>The name of the default file system. A URI whose scheme and authority determine the FileSystem implementation. The uri's scheme determines the config property (fs.SCHEME.impl) naming the FileSystem implementation class. The uri's authority is used to determine the host, port, etc. for a filesystem.</description>
    </property>
<configuration>

答案 1 :(得分:1)

按照以下步骤安装hadoop: 在分布式模式下安装HADOOP的步骤 步骤1:-

#cd /home/masternode
# mkdirhadoopinfra
# chown -R root:roothadoopinfra
# chmod -R 777 hadoopinfra

步骤1:-打开/root/.bashrc文件,并将以下行添加到文件中

export HADOOP_HOME=/usr/lib/hadoop_package/hadoop-2.5.6
export HADOOP_MAPRED_HOME=$HADOOP_HOME 
export HADOOP_COMMON_HOME=$HADOOP_HOME 
export HADOOP_HDFS_HOME=$HADOOP_HOME 
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native 
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

步骤2:-现在将所有更改应用到当前正在运行的系统中。 来源〜/ .bashrc 现在开始Hadoop配置 步骤3:-您可以在“ $ HADOOP_HOME / etc / hadoop”位置找到所有Hadoop配置文件。您需要根据Hadoop基础架构在这些配置文件中进行必要的更改。 $ cd $ HADOOP_HOME / etc / hadoop 为了使用Java开发Hadoop程序,您必须通过用系统中Java的位置替换JAVA_HOME值来重置hadoop-env.sh文件中的Java环境变量。 gedit hadoop-env.sh并将Java路径添加到此文件 导出JAVA_HOME = / usr / lib / hadoop_package / jdk1.8.0_161

步骤4:-core-site.xml core-site.xml文件包含以下信息,例如用于Hadoop实例的端口号,为文件系统分配的内存,用于存储数据的内存限制以及读/写缓冲区的大小。 打开core-site.xml,并在和标记之间添加以下属性。

<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>    //  hdfs://192.168.64.131:9000   <master ip>
</property>
</configuration>

步骤5:-hdfs-site.xml hdfs-site.xml文件包含信息,例如复制数据的值,本地文件系统的namenode路径和datanode路径。这意味着您要在其中存储Hadoop的地方。

<configuration>

<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>file:///home/masternode/hadoopinfra/hdfs/namenode </value>
</property>
<property>
<name>dfs.data.dir</name>
<value>file:///home/masternode/hadoopinfra/hdfs/datanode </value >
</property>

</configuration>

步骤6:-yarn-site.xml 该文件用于将yarn配置到Hadoop中。打开yarn-site.xml文件,并在此文件的标记之间添加以下属性。

<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>

</configuration>

步骤7:-mapred-site.xml 该文件用于指定我们使用的MapReduce框架。默认情况下,Hadoop包含一个yarn-site.xml模板。首先,您需要使用以下命令将文件从mapred-site,xml.template复制到mapred-site.xml文件。 $ cpmapred-site.xml.template mapred-site.xml 打开mapred-site.xml文件,并在此文件中的标记之间添加以下属性。

<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

</configuration>

步骤8:-验证Hadoop安装 以下步骤用于验证Hadoop安装。

start-all.sh

jps

答案 2 :(得分:0)

此问题是@Amadan解释的XML语法问题。仔细检查您的 core-site.xml 。 就我而言,出现此错误是因为我在文件中两次声明了<configuration></configuration>