• 搭建与安装hadoop(本地模式和伪分布式)


    写在前面

    随着开学,不少朋友让我帮他们装hadoop,由于同学的配置不一,基本都没有到配置集群的步骤。所以就在这里记录一下配置本地模式和伪分布式的步骤。

    准备

    • linux系统的虚拟机一台(centos或者ubuntu都可以,centos建议7以上)
    • 安装sftp软件,如mobaxterm等等
    • 修改IP为静态IP
    • 关闭防火墙
    • 配置自己的用户具有root权限
    • jdk1.8和hadoop的gz包
    • 配置主机名与IP地址的映射

    以上内容都可在我的另一篇博客搭建Hadoop集群里找到

    开始

    我们在/opt目录下创建module和software文件夹

    [liuge@hadoop06 opt]$ sudo mkdir module
    [liuge@hadoop06 opt]$ sudo mkdir software
    

    修改两个文件夹的所有者:

    这里liuge是我自己的用户名,填你们自己的即可。

    [liuge@hadoop06 opt]$ sudo chown liuge:liuge module/ software/
    

    安装JDK

    查询是否安装Java软件:

    [liuge@hadoop06 opt]$ rpm -qa | grep java
    

    如果发现安装了openJdk,用命令删除:

    [liuge@hadoop06 opt]$ sudo rpm -e 软件包
    

    卸载干净后,用sftp软件将jdk的包(1.8以上)传到/opt/software下

    然后解压到/opt/module下:

    [liuge@hadoop06 software]$ tar -zxvf jdk-8u202-linux-x64.tar.gz -C /opt/module/
    

    配置下JDK路径:

    [liuge@hadoop06 jdk1.8.0_202]$ pwd
    /opt/module/jdk1.8.0_202
    sudo vim /etc/profile
    
    
    #JAVA_HOME
    export JAVA_HOME=/opt/module/jdk1.8.0_202
    export PATH=$PATH:$JAVA_HOME/bin
    
    [liuge@hadoop06 jdk1.8.0_202]$ source /etc/profile
    [liuge@hadoop06 jdk1.8.0_202]# java -version
    java version "1.8.0_202"
    

    安装hadoop

    将hadoop的包解压出来:

    [liuge@hadoop06 software]$ tar -zxvf hadoop-2.7.2.tar.gz -C /opt/module/
    

    然后将hadoop添加到环境变量:

    [liuge@hadoop06 hadoop-2.7.2]$ sudo vi /etc/profile
    

    在文件末尾添加:

    ##HADOOP_HOME
    export HADOOP_HOME=/opt/module/hadoop-2.7.2
    export PATH=$PATH:$HADOOP_HOME/bin
    

    让修改的文件生效:

    [liuge@hadoop06 hadoop-2.7.2]$ source /etc/profile
    

    运行hadoop

    本地模式

    在目录下创建一个input

    [liuge@hadoop06 hadoop-2.7.2]$ mkdir input
    

    拷贝一些文件到input下:

    [liuge@hadoop06 hadoop-2.7.2]$ cp etc/hadoop/*.xml input
    

    执行mapreduce程序:

    [liuge@hadoop06 hadoop-2.7.2]$ bin/hadoop jar
    share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'
    

    查看输出结果:

    [liuge@hadoop06 hadoop-2.7.2]$ cat output/*
    

    再跑个wordcount示例:

    创建一个wcinput文件夹:

    [liuge@hadoop06 hadoop-2.7.2]$ mkdir wcinput
    

    在wcinput文件下创建一个wc.input文件:

    [liuge@hadoop06 hadoop-2.7.2]$ cd wcinput
    [liuge@hadoop06 wcinput]$ touch wc.input
    

    编辑wc.input文件,输入内容:

    [liuge@hadoop06 wcinput]$ vim wc.input
    
    hadoop yarn
    hadoop mapreduce
    atguigu
    atguigu
    

    保存退出即可。

    最后退回/opt/module/hadoop-2.7.2目录下,执行wordcount:

    [liuge@hadoop06 hadoop-2.7.2]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput wcoutput
    

    查看运行结果:

    [liuge@hadoop06 hadoop-2.7.2]$ cat wcoutput/part-r-00000
    

    到这,本地模式运行成功了,也就代表我们的hadoop安装基本成功了。

    伪分布式

    首先来配置HDFS:

    首先找到Jdk的安装目录:

    [liuge@hadoop06  ~]# echo $JAVA_HOME
    

    编辑hadoop目录下的配置文件(hadoop-env.sh):

    [liuge@hadoop06  hadoop-2.7.2]$ vim etc/hadoop/hadoop-env.sh
    

    在里面找到JAVA_HOME,写上我们自己的:

    export JAVA_HOME=/opt/module/jdk1.8.0_202
    

    再编辑一下核心配置文件(core-site.xml),添加namenode配置:

    <!-- 指定HDFS中NameNode的地址 -->
    <property>
    <name>fs.defaultFS</name>
        <value>hdfs://hadoop06:9000</value>
    </property>
    
    <!-- 指定Hadoop运行时产生文件的存储目录 -->
    <property>
    	<name>hadoop.tmp.dir</name>
    	<value>/opt/module/hadoop-2.7.2/data/tmp</value>
    </property>
    

    然后配置一下hdfs-site.xml:

    <!-- 指定HDFS副本的数量 -->
    <property>
    	<name>dfs.replication</name>
    	<value>1</value>
    </property>
    

    现在我们可以启动集群了。

    首先要格式化集群NameNode(不要随便格式化 !!!这次之后就不要随便格式化了)

    [liuge@hadoop06 hadoop-2.7.2]$ bin/hdfs namenode -format
    

    然后我们先启动Namenode:

    [liuge@hadoop06 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start namenode
    

    再启动datanode:

    [liuge@hadoop06 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode
    

    使用jps命令查看是否启动成功:

    [liuge@hadoop06 hadoop-2.7.2]$ jps
    13586 NameNode
    13668 DataNode
    13786 Jpss
    

    在Web端查看(这里我配置了hosts映射所以可以通过名称直接访问):

    http://hadoop06:50070
    

    然后我们通过集群跑一个wordcount:

    [liuge@hadoop06 hadoop-2.7.2]$ bin/hdfs dfs -mkdir -p /user/liuge/input
    [liuge@hadoop06 hadoop-2.7.2]$bin/hdfs dfs -put wcinput/wc.input
      /user/liuge/input/
    [liuge@hadoop06 hadoop-2.7.2]$ bin/hadoop jar
    share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/liuge/input/ /user/liuge/output
    

    最后可以在WEB端直接查看结果。

    之后是配置yarn

    编辑一下yarn-env.sh,在里面配置一下JAVA_HOME:

    [liuge@hadoop06 hadoop-2.7.2]$ vim etc/hadoop/yarn-env.sh
    export JAVA_HOME=/opt/module/jdk1.8.0_202
    

    接下来配置yarn-site.xml:

    <!-- Reducer获取数据的方式 -->
    <property>
     		<name>yarn.nodemanager.aux-services</name>
     		<value>mapreduce_shuffle</value>
    </property>
    
    <!-- 指定YARN的ResourceManager的地址 -->
    <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop06</value>
    </property>
    

    再配置mapred-env.sh:

    [liuge@hadoop06 hadoop-2.7.2]$ vim etc/hadoop/mapred-env.sh
    export JAVA_HOME=/opt/module/jdk1.8.0_202
    

    将mapred-site.xml.template重命名为mapred-site.xml,然后对其进行配置:

    [liuge@hadoop06 hadoop]$ mv mapred-site.xml.template mapred-site.xml
    [liuge@hadoop06 hadoop]$ vi mapred-site.xml
    
    <!-- 指定MR运行在YARN上 -->
    <property>
    		<name>mapreduce.framework.name</name>
    		<value>yarn</value>
    </property>
    

    然后启动ResourceManager和NodeManager:

    [liuge@hadoop06 hadoop-2.7.2]$ sbin/yarn-daemon.sh start resourcemanager
    [liuge@hadoop06 hadoop-2.7.2]$ sbin/yarn-daemon.sh start nodemanager
    

    在WEB端查看:

    http://hadoop06:8088/cluster
    

    我们删除HDFS上的output文件,然后执行mapreduce程序:

    [liuge@hadoop06 hadoop-2.7.2]$ bin/hdfs dfs -rm -R /user/liuge/output
    [liuge@hadoop06 hadoop-2.7.2]$ bin/hadoop jar
     share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/liuge/input  /user/liuge/output
    

    最后可以在WEB上查看结果。

    http://hadoop06:8088
    

    配置历史服务器

    之后为了显示程序的历史运行情况,配置一下历史服务器。

    配置mapred-site.xml:

    <!-- 历史服务器端地址 -->
    <property>
    <name>mapreduce.jobhistory.address</name>
    <value>hadoop06:10020</value>
    </property>
    <!-- 历史服务器web端地址 -->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hadoop06:19888</value>
    </property>
    

    然后启动历史服务器即可:

    [liuge@hadoop06 hadoop-2.7.2]$ sbin/mr-jobhistory-daemon.sh start historyserver
    

    在WEB端查看:

    http://hadoop06:19888
    

    配置日志的聚集

    日志聚集开启后,可以更好的查看运行日志。

    我们编辑yarn-site.xml,开启日志聚集功能:

    <!-- 日志聚集功能使能 -->
    <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
    </property>
    
    <!-- 日志保留时间设置7天 -->
    <property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
    </property>
    

    然后重启一下nodemanager,Resourcemanager和HistroyManager。

    最后再跑一个wordcount吧:

    删除HDFS上已存在的输出文件:

    [liuge@hadoop06 hadoop-2.7.2]$ bin/hdfs dfs -rm -R /user/liuge/output
    

    执行wordcount:

    [liuge@hadoop06 hadoop-2.7.2]$ hadoop jar
     share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/liuge/input /user/liuge/output
    

    最后查看日志:

    http://hadoop06:19888/jobhistory
    

    总结

    到这里,已经完全配置完了。可以看到配置hadoop需要踏实的linux基础,不然的话本教程是看不懂的。

  • 相关阅读:
    Android SDK镜像的介绍使用
    如何在使用MAMP环境下安装MySQLdb
    MySQL – 导出数据成csv
    CSV
    自己写的一个Yeoman的Generator-Require-Angularjs
    笔记
    PHP
    Intellij IDEA 14的注册机
    nodejs
    Python
  • 原文地址:https://www.cnblogs.com/wushenjiang/p/13752434.html
Copyright © 2020-2023  润新知