CentOS6.7 下搭建Hadoop2.7.1 单机伪分布式环境

开始搭建前配置环境

  1. 配置IP地址
    cd /etc/sysconfig/network-scripts/
    vi ifcfg-eno16777736(网卡名视情况而定)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    TYPE="Ethernet"
    BOOTPROTO=static
    DEFROUTE="yes"
    IPV4_FAILURE_FATAL="no"
    IPV6INIT="yes"
    IPV6_AUTOCONF="yes"
    IPV6_DEFROUTE="yes"
    IPV6_FAILURE_FATAL="no"
    NAME="eno16777736"
    UUID="dfdf7864-58bb-403c-a422-6f721fb8c391"
    DEVICE="eno16777736"
    ONBOOT="yes"
    IPADDR="192.168.30.50"
    PREFIX="24"
    GATEWAY="192.168.30.1"
    IPV6_PEERDNS="yes"
    IPV6_PEERROUTES="yes"
    IPV6_PRIVACY="no"
    ````
    2. 配置网关
    `vim /etc/sysconfig/network`
    NETWORKING = yes
    HOSTNAME = Hadoop.Master
    GATEWAY = 192.168.30.1
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    `systemctl restart network`
    3. 设置hosts文件
    `vi /etc/hosts`
    在文件添入以下内容:
    `192.168.30.50 Hadoop.Master`
    4. 配置yum源,安装自动补全等
    `mkdir /opt/repo`
    `mv /etc/yum.repos.d/* /opt/repo/`
    `vi /etc/yum.repos.d/local.repo`
    `mkdir /mnt/centos`
    将镜像文件传入根目录中进行挂载
    `mount /CentOS-7-x86_64-DVD-1511.iso /mnt/centos/`
    安装vim和自动补全,然后重新登录以生效
    `yum install vim bash-completion -y`

    ## 添加Hadoop用户 ##

    1. 添加用户组
    `groupadd hadoop`
    2. 添加用户并分配到用户组
    `useradd -g hadoop hadoop`
    3. 修改hadoop用户密码
    `passwd hadoop`

    ## 关闭防火墙 ##

    1. 关闭防火墙
    `systemctl stop firewalld.service`
    2. 关闭防火墙自启动
    `chkconfig firewalld off`
    3. 关闭Selinux
    `vim /etc/sysconfig/selinux`
    (修改如下内容)
    `SELINUX=disabled`
    4. 使SElinux立即生效,参数0是宽容模式(Prmissive),参数1是强制模式(Enforcing)
    `setenforce 0`
    查看Selinux状态,
    `getenforce`

    ## SSH无密码配置 ##

    1. 查看ssh与rsync安装状态(没有显示结果则表示没有安装,需执行步骤2安装)
    `rpm -qa|grep openssh`
    `rpm -qa|grep rsync`
    2. 安装ssh与rsync
    `yum -y install ssh`
    `yum -y install rsync`
    3. 切换hadoop用户
    `su hadoop`
    4. 生成SSH密码对
    `ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa`
    5. 将id_dsa.pub追加到授权的key中
    `cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys`
    6. 设置授权key权限
    `chmod 600 ~/.ssh/authorized_keys`
    7. 测试ssh连接
    `ssh localhost`

    ## 安装JAVA ##

    1. 安装
    首先检查当前系统是否有jdk
    `rpm -qa|grep java`
    如果有,则需要卸载(卸载以java开头,后跟数字版本号的)
    `rpm -e –nodeps [包名]`
    > eg: rpm -e --nodeps java-1.7.0-openjdk-1.7.0.141-2.6.10.5.el7.x86_64

    2. 安装java
    [点我下载JDK](http://www.baidu.com)
    `rpm –ivh jdk-8u162-linux-x64.rpm`
    3. 配置(在配置文件最下方添加配置)
    `vi /etc/profile`
    (在配置文件最下方添加配置,注意第一行最后边的jdk版本号要和自己的版本号相同)
    export JAVA_HOME=/usr/java/jdk1.8.0_162
    export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib
    export PATH=$PATH:$JAVA_HOME/bin
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    3. 使配置文件生效
    `source /etc/profile`
    4. 测试环境变量设置,如最后一句执行完成后有显示版本号则安装完成
    `java`
    `javac`
    `java -version`
    参考链接:https://www.linuxidc.com/Linux/2018-03/151326.htm

    ## Hadoop安装与配置 ##

    1. 将压缩包上传至/home/hadoop目录
    [点我下载Hadoop](http://www.baidu.com)
    `mv hadoop-2.7.1.tar.gz /home/hadoop`
    2. 将压缩包解压至/usr目录
    `tar zxvf /home/hadoop/hadoop-2.7.1.tar.gz -C /usr/`
    3. 修改文件夹名称
    `mv /usr/hadoop-2.7.1/ /usr/hadoop`
    4. 创建hadoop数据目录
    `mkdir /usr/hadoop/tmp`
    5. 将hadoop文件夹授权给hadoop用户
    `chown -R hadoop:hadoop /usr/hadoop/`
    6. 设置环境变量
    `vi /etc/profile`
    (追加如下内容)
    export HADOOP_HOME=/usr/hadoop
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
    export HADOOP_OPTS=”-Djava.library.path=$HADOOP_HOME/lib”
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    7. 使环境变量生效
    `source /etc/profile`
    8. 测试环境变量设置
    `hadoop version`
    (最先错误测试失败,可能是版本跟不上的原因,要保证Hadoop和JDK版本正确)

    ## 配置HDFS ##

    1. 切换至Hadoop用户
    `su – hadoop`
    2. 修改hadoop-env.sh
    `cd /usr/hadoop/etc/hadoop/`
    `vi hadoop-env.sh`
    (修改如下内容)
    `export JAVA_HOME=/usr/java/jdk1.8.0_162`
    3. 修改core-site.xml
    `vi core-site.xml`
    (添加如下内容)
    fs.defaultFS hdfs://Hadoop.Master:9000 hadoop.tmp.dir /usr/hadoop/tmp/ A base for other temporary directories.
    1
    2
    3
    4. 修改hdfs-site.xml
    `vi hdfs-site.xml`
    (添加如下内容)
    dfs.replication 1
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    5. 格式化hdfs(状态为1表示格式化失败,失败可能的原因:环境配置和xml修改错误)
    `hdfs namenode –format`
    注:出现Exiting with status 0即为成功
    6. 启动hdfs
    `start-dfs.sh`
    (停止命令)`stop-dfs.sh`
    > 注:输出如下内容,则启动成功
    WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
    Starting namenodes on [Hadoop.Master]
    Hadoop.Master: starting namenode, logging to /usr/hadoop/logs/hadoop-hadoop-namenode-Hadoop.Master.out
    Hadoop.Master: starting datanode, logging to /usr/hadoop/logs/hadoop-hadoop-datanode-Hadoop.Master.out
    Starting secondary namenodes [0.0.0.0]
    The authenticity of host '0.0.0.0 (0.0.0.0)' can't be established.
    RSA key fingerprint is .
    Are you sure you want to continue connecting (yes/no)? yes
    0.0.0.0: Warning: Permanently added '0.0.0.0' (RSA) to the list of known hosts.
    0.0.0.0: starting secondarynamenode, logging to /usr/hadoop/logs/hadoop-hadoop-secondarynamenode-Hadoop.Master.out
    WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicab
    7. 查看进程
    `jps`
    > 注:输出类似如下内容
    1763 NameNode
    1881 DataNode
    2146 Jps
    2040 SecondaryNameNode
    8. 使用web查看Hadoop运行状态
    http://你的服务器ip地址:50070/
    ![](https://s2.ax1x.com/2020/03/05/3TzHmt.png)
    9. 在HDFS上运行WordCount
    创建HDFS用户目录:
    `hdfs dfs -mkdir /user`
    根据自己的情况调整/user/(username):
    `hdfs dfs -mkdir /user/hadoop`
    复制输入文件(要处理的文件)到HDFS上:
    `hdfs dfs -put /usr/hadoop/etc/hadoop /input`
    查看我们复制到HDFS上的文件:
    `hdfs dfs -ls /input`
    运行单词检索(grep)程序(注意自己安装的Hadoop包名):
    `hadoop jar /usr/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar grep /input /output 'dfs[a-z.]+'`
    > (WordCount
    `hadoop jar /usr/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /input /output`
    说明:output文件夹如已经存在则需要删除或指定其他文件夹。)

    错误1:input和output指定错误;解决办法:在前边加上根目录/
    ![](https://s2.ax1x.com/2020/03/11/8kTmwT.png)
    错误2:/output文件已经存在;解决办法:须删去HDFS下的/output然后再执行
    ![](https://s2.ax1x.com/2020/03/11/8kbemt.png)
    查看运行结果:
    `hdfs dfs -cat /output/*`
    使用web方式登录验证,点击Utilities下边选择Browse the file system ,在下边找到name为output的文件,点开后如有下图所示文件,则表示成功
    ![](https://s2.ax1x.com/2020/03/11/8kb51H.png)

    ### 配置YARN

    修改mapred-site.xml:
    `cd /usr/hadoop/etc/hadoop/`
    `cp mapred-site.xml.template mapred-site.xml`
    `vi mapred-site.xml`
    (添加如下内容)
    mapreduce.framework.name yarn
    1
    2
    3
    修改yarn-site.xml:
    `vi yarn-site.xml`
    (添加如下内容)
    yarn.nodemanager.aux-services mapreduce_shuffle ``` 启动YARN: `start-yarn.sh` (停止yarn stop-yarn.sh) 查看当前java进程: `jps` > (输出如下) 4918 ResourceManager 1663 NameNode 1950 SecondaryNameNode 5010 NodeManager 5218 Jps 1759 DataNode

运行mapReduce程序:
配置好如上配置再运行mapReduce程序时即是yarn中运行
使用web查看Yarn运行状态:
http://服务器ip地址:8088/

HDFS常用命令

  1. 创建HDFS文件夹
    在根目录创建input文件夹:
    hdfs dfs -mkdir -p /input
    在用户目录创建input文件夹:
    说明:如果不指定“/目录”,则默认在用户目录创建文件夹
    hdfs dfs -mkdir -p input
    (等同于 hdfs dfs -mkdir -p /user/hadoop/input)
  2. 查看HDFS文件夹
    查看HDFS根文件夹:
    hdfs dfs -ls /
    查看HDFS用户目录文件夹:
    hdfs dfs -ls
    查看HDFS用户目录文件夹下input文件夹:
    hdfs dfs -ls input
    (等同与 hdfs dfs -ls /user/hadoop/input)
  3. 复制文件到HDFS
    hdfs dfs -put /usr/hadoop/etc/hadoop input
  4. 删除文件夹
    hdfs dfs -rm -r input