Hadoop ubuntu伪分布式配置及简单使用

Hadoop的主要作用是进行数据的分布式存储和分析,如果不在分布式环境下使用Hadoop,难免有些大材小用。之前两篇文章介绍了MapReduce程序的编写,并且简单介绍了MapReduce的执行流程,今天来看看如何搭建伪分布式环境,然后将之前的示例在伪分布式环境下运行。

Hadoop运行在伪分布式或分布式模式下时,有几个重要的概念需要简单介绍一下。在进行配置前,首先了解一下。

基本概念

  1. HDFS

    HDFS是Hadoop的分布式文件系统,上传到Hadoop的文件,就放置在HDFS中。HDFS中有两类节点:namenode和datanode,一个namenode管理多个datanode,namenode类似于目录树,掌管着HDFS中文件的信息,包括该文件相关的datanode的信息;datanode则实际保存着文件的数据块。

  2. YARN

    YARN是Hadoop的集群资源管理系统,当我们使用Hadoop,资源请求会交给YARN处理,YARN会对资源的使用进行调度。

伪分布式环境搭建

之前已经在单机环境下配置了Hadoop,这里不再赘述,我们直接开始伪分布式环境的搭建。伪分布式环境下,Hadoop守护进程运行在本机上,需要安装ssh,以方便与其进行通信。

SSH配置

  1. 安装ssh

    $ sudo apt-get install  ssh

  2. 设置无密码登录

    $ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

    $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

    $ ssh-add

  3. 测试

    $ ssh localhost

如果看到Welcome to ...的字样,且进入到新的命令提示符,说明登陆成功,验证后exit退出即可。设置无密码登录,主要是为了方便使用,否则在以后启动Hadoop时候会多次要求输入密码。大家也可以尝试这里先不设置登录密码,进行后面的工作。

Hadoop伪分布式配置

Hadoop的配置文件在Hadoop的安装目录下的etc/hadoop目录下,我们利用这些文件进行配置。

core-site.xml

<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/usr/local/hadoop-2.8.2/tmp</value>
    </property>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost/</value>
    </property>
</configuration>

  1. hadoop.tmp.dir

    该属性指定Hadoop的临时目录,默认设置是/tmp目录,但是该目录下的内容会在系统重启时清空,导致我们的很多文件重启后就被删除,所以需要设置该选项。我设置在了Hadoop安装目录下的tmp目录下。

  2. fs.defaultFS

    默认的文件系统,使用uri进行标识,我们的uri使用了hdfs,所以说明我们的文件系统是HDFS。

hdfs-site.xml

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

  1. dfs.replication

    上传到HDFS的文件的副本数,默认是3,主要是考虑数据的可靠性。但是我们是伪分布配置,只需要一份副本即可。

  2. dfs.namenode.name.dir

    namenode需要保存的数据信息放在该目录下。

  3. dfs.datanode.data.dir

    datanode需要保存的数据信息放在该目录下。

这两个配置文件完成了对HDFS的配置,接下来对YARN进行配置。

mapred-site.xml

$ sudo mv mapred-site.xml.template mapred-site.xml

Hadoop为我们提供了一个模板,我们在此基础上进行修改,指定使用YARN资源管理器。

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>
yarn-site.xml

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

  1. yarn.resourcemanager.hostname

    资源管理器主机名。

  2. yarn.nodemanager.aux-services

    MapReduce中的shuffle就在这里设置。

这样,HDFS和YARN就配置好了,不过,在启动前,先要格式化HDFS,先要修改hadoop目录的所有者

$ sudo chown 你的用户名:你的用户所在组 Hadoop安装路径

$ hdfs namenode -format


如果看到打印最后几行有下面的文字,说明我们格式化成功。

Exiting with status 0


胜利在望,最后,编辑etc/hadoop/hadoop-env.sh,其中有一行

export JAVA_HOME=${JAVA_HOME}

将其修改为

export JAVA_HOME=你的JAVA_HOME位置


现在启动吧

$ start-dfs.sh

$ start-yarn.sh

$ mr-jobhistory-daemon.sh start historyserver


使用jps进行查看,需要有相应的Java进程启动(前面的数字可能不同)。

$ Java安装目录/bin/jps

26803 JobHistoryServer
26083 SecondaryNameNode
26293 ResourceManager
26421 NodeManager
26855 Jps
25726 NameNode
25855 DataNode


Hadoop为我们提供了Web页面,可以从Web页面查看Hadoop的运行情况:

namenode:http://localhost:50070

资源管理器:http://localhost:8088

历史服务器:http://localhost19888


如果要停止,只要执行

$ mr-jobhistory-daemon.sh stop historyserver

$ stop-yarn.sh

$ stop-dfs.sh


伪分布式简单使用

配置并启动之后,我们来做一些简单的操作,首先为自己的用户创建一个目录。

$ hadoop fs -mkdir -p /user/$USER


然后查看一下

$ hadoop fs -ls /user/

应该可以看到一个以你的用户名命名的目录。


从上面两个命令应该可以看出来,Hadoop操作HDFS的命令和Shell的命令基本类似,基本格式就是

hadoop fs -命令名称 [选项] [操作对象]


创建一个input目录

$ hadoop fs -mkdir /user/$USER/input


删除input目录

$ hadoop fs -rm -r /user/$USER/input


把之前我们文章中用的text文件放到input中

$ hadoop fs -put text /user/$USER/input


执行我们之前的示例

$ hadoop jar HadoopDemo.jar com.yjp.mapreduce.FirstCharCount input output


查看运行结果

$ hadoop fs -cat output/*


也可以把结果拿到本地

hadoop fs -get output output


后面几个命令大家可能会奇怪,为什么没有使用/user/$USER/,这是因为Hadoop如果访问HDFS的目录时,会自动添加/user/$USER/,例如最后的get命令,第一个output是HDFS上的目录,第二个output是本地output目录。



猜你喜欢

转载自blog.csdn.net/yjp19871013/article/details/78633233