Linux系统Hadoop伪分布式模式配置

一、修改配置文件

需要配置相关文件,才能够让Hadoop在伪分布式模式下顺利运行,Hadoop的配置文件位于/usr/local/hadoop/etc/hadoop/中,进行伪分布式模式配置时,需要修改2个配置文件,即core-site.xml和hdfs-site.xml。

打开Linux终端,进入/usr/local/hadoop/etc/hadoop/目录,使用vim编辑器打开core-site.xml文件,它的初始内容如下:

<configuration>
</configuration>

我们需要在对它进行修改,修改后文件内容如下:

<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/usr/local/hadoop/tmp</value>
        <description>Abase for other temporary directories.</description>
    </property>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>

hadoop.tmp.dir参数用于保存临时文件,若没有配置hadoop.tmp.dir这个参数,则默认使用的临时目录为/tmp/hadoo-hadoop,而这个目录在Hadoop重启时有可能被系统清理掉,导致一些意想不到的问题,因此,必须配置这个参数;

fs.defaultFS参数用于指定HDFS的访问地址,其中9000是端口号。

同样需要修改配置文件hdfs-site.xml,修改后的内容如下:

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/usr/local/hadoop/tmp/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/usr/local/hadoop/tmp/dfs/data</value>
    </property>
</configuration>

dfs.replication参数用于指定副本的数量,因为在分布式文件系统HDFS中,数据会被冗余存储多份,以保证可靠性和可用性,在这里,我们采用的是伪分布式模式,只有一个节点,所以只可能有1个副本,设置dfs.replication参数的值为1;

dfs.namenode.name.dir参数用于设定名称节点的元数据的保存目录

dfs.datanode.data.dir参数用于设定数据节点的数据保存目录

需要注意的是,Hadoop的运行方式(如运行在单机模式下还是运行在伪分布式模式下)是由配置文件决定的,启动Hadoop时会读取配置文件,然后根据配置文件来决定运行在什么模式下,因此,如果需要从伪分布式模式切换回单机模式,只需要删除core-site.xml中的配置项即可

二、执行名称节点格式化

进入/usr/local/hadoop/目录,通过下列命令执行名称节点的格式化:

./bin/hdfs namenode -format

如果格式化成功,会看到has been successfully formatted和Exiting with status 0的提示信息,如果出现Exiting with status 1的提示信息,则表示出现错误:
在这里插入图片描述
如果出现错误,也无需着急,仔细查看错误提示信息,如果有下列错误信息:

Error: JAVA_HOME is not set and could not be found

则说明在安装Java环境时,设置JAVA_HOME环境变量没有设置成功,需要重新设置环境变量,具体内容请参照:Linux系统安装Java环境

三、启动Hadoop

进入/usr/local/hadoop/目录,通过下列命令启动Hadoop:

./sbin/start-dfs.sh

如果出现如下SSH提示,输入yes即可:
在这里插入图片描述
注意,在这里需要确保你的Linux系统已安装SSH服务端,安装方法为:

sudo apt-get install openssh-server

启动Hadoop的过程中可能出现如下警告信息:

WARN util.NativeCodeLoader: Unable to load native-hadoop library for your
platform*** using builtin-java classes where applicable WARN

这个警告提示信息可以忽略,并不会影响Hadoop正常使用。

如果启动Hadoop时遇到输出非常多的“ssh: Could not resolve hostname xxx”的异常情况,这并不是SSH的问题,可以通过下列步骤设置Hadoop环境变量来解决:

①按Ctrl + C键中断启动过程;

②使用vim编辑器打开文件~/.bashrc,在文件最上边的开始位置增加如下两行内容(设置过程与JAVA_ HOME变量类似,其中,HADOOP_ HOME为Hadoop的安装目录):

export HADOOP_HOME=/usr/local/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/1ib/native

③保存文件以后,通过下列命令使环境变量设置生效:

source ~/.bashrc

④再次启动Hadoop:

./sbin/start-dfs.sh

Hadoop启动完成后,可以通过下列命令来判断是否成功启动:

jps

若成功启动,则会列出如下进程:
在这里插入图片描述
如果看不到SecondaryNameNode进程,运行下列命令关闭Hadoop相关进程,然后再次尝试启动:

./sbin/stop-dfs.sh

如果看不到NameNode或DataNode进程,则表示配置不成功,仔细检查之前的步骤,或通过查看启动日志排查原因。

启动Hadoop成功以后,就可以运行MapReduce程序处理数据,此时是对HDFS进行数据读写,而不是对本地文件进行读写

四、Hadoop无法正常启动的解决方法

一般可以通过查看启动日志来排查原因,启动日志信息记录在下面这个文件中:

/usr/local/hadoop/logs/hadoop-hadoop-namenode-机器名称.log

因为每一次的启动日志都是追加在日志文件之后,所以需要拉到日志文件的最后面查看,根据日志记录的时间信息,就可以找到某次启动的日志信息。

当找到属于本次启动的一段日志信息以后,出错的提示信息一般会出现在最后面,通常是写着Fatal、Error、Warning或者Java Exception的地方,可以在网上搜索一下出错信息,寻找一些相关的解决方法。

如果启动后执行jps命令后,找不到DataNode进程,则表示数据节点启动失败,可尝试如下步骤(注意,这会删除HDFS中原有的所有数据,如果原有的数据很重要,请不要这样做,不过在第一次启动时,通常不会有重要数据):

①关闭Hadoop:

./sbin/stop-dfs.sh

②删除tmp文件,注意,这会删除HDFS 中原有的所有数据:

rm -r ./tmp

③重新格式化名称节点:

./bin/hdfs namenode -format

④重启Hadoop:

./sbin/start-dfs.sh

五、使用Web界面查看HDFS信息:

Hadoop成功启动后,可以在Linux系统中打开一个浏览器,在地址栏输人地址:http://localhost:50070,就可以查看名称节点和数据节点信息,还可以在线查看HDFS中的文件:
在这里插入图片描述

六、运行Hadoop伪分布式实例

在单机模式中,实例读取的都是本地数据,但在伪分布式模式下,读取的则是分布式文件系统HDFS上的数据

在伪分布式模式下运行grep实例

①进入/usr/local/hadoop/目录,通过下列命令在HDFS中创建用户目录:

./bin/hdfs dfs -mkdir -p /user/当前登录用户的用户名

②在HDFS中创建用户对应的input目录:

./bin/hdfs dfs -mkdir input

③把本地文件系统的/usr/local/hadoop/etc/hadoop/目录中的所有xml文件作为输人文件,复制到分布式文件系统HDFS中的/user/hadoop/input/目录中:

./bin/hdfs dfs -put ./etc/hadoop/*.xml input

④查看HDFS中input目录下的文件列表:

./bin/hdfs dfs -ls input

⑤运行grep实例:

./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar grep input output 'dfs[a-z.]+'

⑥查看HDFS中output文件夹中的运行结果:

./bin/hdfs dfs -cat output/*

执行结果如下:
在这里插入图片描述
需要注意的是,Hadoop默认不会覆盖结果文件,因此再次运行上面实例时会提示出错,如果要再次运行,需要先使用如下命令把output文件夹删除

./bin/hdfs dfs -rm -r output

七、关闭Hadoop

进入/usr/local/hadoop/目录,通过下列命令关闭Hadoop:

./sbin/stop-dfs.sh

需要注意的是,下次启动Hadoop时,无须进行名称节点的初始化(否则会出错),也就是说,不要再次执行./bin/hdfs namenode -format命令,每次启动Hadoop只需要直接运行./sbin/start-dfs.sh命令即可。

八、启动YARN

YARN是Hadoop2.0以后新增的专门负责资源管理与任务调度的组件,MapReduce作业可以运行在YARN之上,由YARN负责为MapReduce作业进行资源管理和任务调度。

但是YARN对于分布式模式(真正由多台机器构成的集群环境)才有意义,伪分布式模式下,YARN无法真正发挥作用,因此伪分布式模式下不需要借助于YARN为MapReduce作业进行资源管理和任务调度,而是可以直接借助于Hadoop自身内置的mapred.LocalJobRunner来为MapReduce作业进行资源管理和任务调度,也就是说,不启动YARN,MapReduce程序也能够正常运行。

不过,这里仍然介绍一下伪分布模式下如何配置和启动YARN,让YARN来负责资源管理与任务调度:

①进入/usr/local/hadoop/目录,通过下列命令将配置文件/usr/local/hadoop/etc/hadoop/mapred-site.xml.template重命名为mapred-site.xml:

mv ./etc/hadoop/mapred-site.xml.template ./etc/hadoop/mapred-site.xml

②修改配置文件mapred-site.xml,修改后内容如下:

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

③修改配置文件/usr/local/hadoop/etc/hadoop/yarn-site.xml,修改后内容如下:

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

④启动Hadoop:

./sbin/start-dfs.sh

⑤启动YARN:

./sbin/start-yarn.sh

⑥通过下列命令开启历史服务器,在浏览器地址栏输入地址:http://localhost:8088,即可在Web中查看任务运行情况:

./sbin/mr-jobhistory-daemon.sh start historyserver

⑦通过jps命令查看当前运行的进程,可以看到多了NodeManager和ResourceManager两个后台进程:
在这里插入图片描述
需要注意的是,启动YARN之后,运行实例的方法和伪分布式模式是一样的,仅仅是资源管理、任务调度方式不同,观察日志信息可以发现,不启用YARN时,是mapred.LocalJobRunner在跑任务,启用YARN之后,是mapred.YARNRunner在跑任务

⑧关闭YARN:

./sbin/stop-yarn.sh

⑨关闭历史服务器:

./sbin/mr-jobhistory-daemon.sh stop historyserver

⑩关闭Hadoop:

./sbin/stop-dfs.sh

需要注意的是,在经过上述步骤以后,如果以后在伪分布式模式下启动Hadoop的时候不想同时启动YARN,则务必把配置文件mapred-site.xml重命名,改成mapred-site.xml.template,需要用时改回来即可,否则,如果该配置文件存在,使用./sbin/start-dfs.sh命令启动Hadoop以后却未开启YARN,则运行程序时会提示“Retrying connect to server: 0. 0.0.0/0.0.0.0:8032"错误。

九、配置PATH变量

前面在启动Hadoop时都要加上命令的路径,例如./sbin/start-dfs.sh这个命令中就带上了路径,实际上通过设置PATH变量,可以在执行命令时不用带上命令本身所在的路径。

例如,打开一个Linux终端,在任何一个目录下执行ls命令时,都没有带上ls命令的路径,实际上执行ls命令时,之所以不需要带上路径,是因为Linux系统已经把ls命令的路径加入到PATH变量中了,当执行ls命令时,系统是根据PATH这个环境变量中包含的目录位置,逐一进行查找,直至在这些目录位置下找到匹配的程序(若没有匹配的程序,则系统会提示该命令不存在)。

知道了这个原理以后,同样可以把start-dfs.shstop-dfs.sh等命令所在的目录/usr/local/hadoop/sbin/加入到环境变量PATH中,这样以后在任何目录下都可以直接使用命
start-dfs.sh启动Hadoop而不用带上命令路径,具体操作方法是:

①使用vim编辑器打开~/.bashrc这个文件,然后在这个文件的最前面位置加入如下单独一行:

export PATH=$PATH:/usr/local/hadoop/sbin

在后面的学习过程中,如果要继续把其他命令的路径也加入到PATH变量中,也需要继续修改~/.bashrc这个文件,当后面要继续加入新的路径时,只要用英文冒号“:”隔开,把新的路径加到后面即可,例如,如果要继续把/usr/local/hadoop/bin路径增加到PATH中,只要继续追加到后面,如下所示:

export PATH=$PATH:/usr/local/hadoop/sbin:/usr/local/hadoop/bin

②执行下列命令使设置生效:

source ~/.bashrc

设置生效后,在任何目录下启动Hadoop,都只要直接输入start-dfs.sh命令即可,同理,停止Hadoop也只需要在任何目录下输入stop-dfs.sh命令即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章