如何解决伪分布无法启动datanode的问题

[问题描述]:使用start-all.sh启动时,无法启动datanode,使用hadoopfs-put等命令报错

[问题分析]:

有两种情况

1.使用root用户创建hadoop集群

使用root运行start-all.sh,hadoop会加上-jvm参数,该参数根据java版本不同不一样,这是导致错误的根源

观察logs/hadoop-root-datanode-xxx.out发现

Unrecognizedoption:-jvm

CouldnotcreatetheJavavirtualmachine.

因此不建议使用root启动hadoop

2.使用hadoop或其他用户创建集群

配置文件hdfs-site.xml中的dfs.data.dir路径,权限不对

正确的权限为:drwxr-xr-x(755)

完整的启动hadoop伪集群的方法:

1.创建hadoop用户

useraddhadoop

passwdhadoop

2.修改ssh无密码登陆(前提是ssh正常安装,服务sshd启动)

ssh-keygen-tdsa-P''-f~/.ssh/id_dsa

cat~/.ssh/id_dsa.pub>>~/.ssh/authorized_keys

以hadoop身份登陆,输入sshlocalhost测试,如果无需密码登陆则成功

如果不成功,可以尝试彻底删除.ssh目录,重新生成公钥

3.在~/.bashrc文件中配置hadoop的环境变量

1.JAVA_HOME(必须,也可以在conf/hadoop-env.sh中指定,默认没有)

exportJAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre

2.HADOOP_HOME

exportHADOOP_HOME=/home/hadoop/hadoop_home

3.HADOOP_VERSION

exportHADOOP_VERSION=0.20.203.0

4.HADOOP_BIN

exportHADOOP_BIN=$HADOOP_HOME/hadoop-$HADOOP_VERSION/bin

5.PATH

exportPATH=$PATH:$HADOOP_BIN

4.修改hadoop三大配置(配置文件默认在conf目录下)

1.core-site.xml(详细说明见http://hadoop.apache.org/common/docs/current/core-default.html)

<configuration>
            <property>
                <name>fs.default.name</name>
                <value>hdfs://localhost:9000</value>
            </property>
            <property>
                <name>hadoop.tmp.dir</name>
                <value>/home/hadoop/hadoop_home/hadoop-0.20.203.0/hadoop_tmp</value>
            </property>
        </configuration>

其中,hadoop.tmp.dir为临时文件夹,默认文件夹为/tmp/hadoop-${user.name}

2.hdfs-site.xml(详细说明见http://hadoop.apache.org/common/docs/current/hdfs-default.html)

<configuration>
            <property>
                <name>dfs.replication</name>
                <value>1</value>
            </property>
            <property>
                <name>dfs.name.dir</name>
                <value>/home/hadoop/hadoop_home/hadoop-0.20.203.0/namenode_name</value>
            </property>
            <property>
                <name>dfs.data.dir</name>
                <value>/home/hadoop/hadoop_home/hadoop-0.20.203.0/namenode_data</value>
            </property>
        </configuration>

dfs.replication:副本的数量,默认为3个,伪集群为1个

dfs.name.dir:默认值${hadoop.tmp.dir}/dfs/name,指定Namenode存储fsimage文件的位置,如果值是逗号分隔的列表,则在所有的目录上都会存放一份副本,用于冗余.

DetermineswhereonthelocalfilesystemtheDFSnamenodeshouldstorethenametable(fsimage).Ifthisisacomma-delimitedlistofdirectoriesthenthenametableisreplicatedinallofthedirectories,forredundancy.

dfs.data.dir:默认值${hadoop.tmp.dir}/dfs/data,指定datanode在本地文件系统存放块数据的位置,如果值是逗号分隔的列表,则数据会被存储到所有目录下,典型是存储到多个不同的设备上,如果目录不存在则忽略.

DetermineswhereonthelocalfilesystemanDFSdatanodeshouldstoreitsblocks.Ifthisisacomma-delimitedlistofdirectories,thendatawillbestoredinallnameddirectories,typicallyondifferentdevices.Directoriesthatdonotexistareignored.

其中要注意dfs.data.dir的权限为755,否则会报无法启动datanode的错误

3.mapred-site.xml(详细说明见http://hadoop.apache.org/common/docs/current/mapred-default.html)

<configuration>
            <property>
                <name>mapred.job.tracker</name>
                <value>localhost:9001</value>
            </property>
            <property>
                <name>mapred.local.dir</name>
                <value>/home/hadoop/hadoop_home/hadoop-0.20.203.0/mapred/local</value>
            </property>
            <property>
                <name>mapred.system.dir</name>
                <value>/home/hadoop/hadoop_home/hadoop-0.20.203.0/mapred/system</value>
            </property>
        </configuration>

mapred.job.tracker:JobTracker的主机IP地址和端口

mapred.local.dir:默认值${hadoop.tmp.dir}/mapred/local,决定存储MapReduce中间数据(map输出数据)的位置,而事实上,map输出的中间数据会存放到本地磁盘而非hdfs,见<HadoopTheDefinitiveGuide>-<CHAPTER2MapReduce>-<ScalingOut>-<DataFlow>:Maptaskswritetheiroutputtothelocaldisk,nottoHDFS.),如果值是逗号分割的列表,且目录位于不同的设备,则可以分担硬盘I/O.目录不存在则忽略.

ThelocaldirectorywhereMapReducestoresintermediatedatafiles.Maybeacomma-separatedlistofdirectoriesondifferentdevicesinordertospreaddiski/o.Directoriesthatdonotexistareignored.

mapred.system.dir:默认值${hadoop.tmp.dir}/mapred/system,MapReduce存储控制文件的地方,该路径是hdfs的路径,如/hadoop/mapred/system/

ThedirectorywhereMapReducestorescontrolfiles.

5.格式化HDFS

Hadoopnamenode-format

6.运行hadoop守护进程

bin/start-all

7.观察hadoop运行情况

使用ps-Uhadoop-f发现:

java-Dproc_namenode-Xmx1000m

java-Dproc_datanode-Xmx1000m

java-Dproc_secondarynamenode

java-Dproc_jobtracker-Xmx1000m

java-Dproc_tasktracker-Xmx1000m

则表示正常

相关推荐