Hadoop初探--快速入门

作者: 星源易码 | 来源:发表于2018-05-27 01:35 被阅读10次

    古时候,人们用牛来拉重物,当一头牛拉不动一根圆木得时候,他们不曾想过培育个头更大的牛。同样,我们也不需要尝试更大的计算机,而是应该开发更多的计算系统。--格雷斯·霍珀

    一、hadoop简介

    Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。Hadoop的框架最核心的设计就是:HDFS和MapReduce。
    其中HDFS就是一个分鱼展的大硬盘:

    • 分:数据分块存储
    • 鱼:数据冗余
    • 展:动态扩展

    二、Hadoop的优势

    • 方便:Hadoop可以运行在一般商业机器构成的大型集群上
    • 高可靠性:Hadoop按位存储和处理数据的能力值得信赖
    • 高扩展性:Hadoop通过增加集群节点,可以线性地扩展以处理更大的数据集
    • 高效性:Hadoop能够在节点间动态地移动数据,并保证各个节点的动态平衡
    • 高容错性:hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配

    三、Hadoop的核心系统

    Hadoop的核心系统

    1、Hadoop Common
    Common 为Hadoop的其他项目提供了一些常用工具,主要包括系统配置工具Configuration、远程过程调用RPC、序列化机制和Hadoop 抽象文件系统FileSystem等。
    2、Avro
    Avro,是一个数据序列化系统,可以将数据结构或者对象转换何成便于存储和传输的格式。
    3、Zookeeper
    Zookeeper作为一个分布式的服务框架,解决了分布式计算中的一致性问题,可用于处理分布式应用中经常遇到的数据管理问题:统一命名服务、状态同步服务、集群管理、分布式应用配置项管理
    4、HDFS
    HDFS(Hadoop Distributed File System),Hadoop分布式文件系统
    5、MapReduce
    MapReduce是一种计算模型,用以进行大数据量的计算。MapReduce 将应用划分为Map和Reduce两个步骤,其中Map对数据集上的独立元素进行指定的操作,生成键-值对形势的中间结果;Reduce则对中间结果中相同“键‘的所有”值“进行规约,以得到最终结果。
    6、HBase
    HBase是一个针对数据化数据的可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库。它采用了增强的稀疏排序映射表(Key/Vlaue)
    7、Pig
    Pig运行在hadoop上,是对大型数据集进行分析和评估的平台。
    8、Mahout
    Mahout的主要目标是创建一些可扩展的机器学习领域经典算法的实现。

    四、hadoop分布式环境搭建

    Hadoop集群架构

    1、虚拟机中安装一台master服务器

    (1) 修改主机名

    [root@localhost ~]# vim /etc/sysconfig/network
    NETWORKING=yes
    HOSTNAME=master
    

    (2) 配置网卡IP

    [root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
    DEVICE=eth0
    HWADDR=00:0C:29:A8:49:61
    TYPE=Ethernet
    UUID=8e0bff9b-d7b2-4429-8408-f2f122e323bf
    ONBOOT=yes  ## 修改为yes
    NM_CONTROLLED=yes
    BOOTPROTO=static  ## 修改为static
    IPADDR=192.168.137.100  ##本机IP
    GATEWAY=192.168.137.1  ## 网关信息
    NETMASK=255.255.255.0  ## 广播
    DNS1=1.1.1.1   ## 配置DNS
    

    (3) 创建数据目录

    [root@localhost ~]# mkdir -p /var/data/hadoop
    

    (4) 配置hosts,允许集群间通过主机名访问

    [root@localhost ~]# vim /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.137.100 master
    192.168.137.101 slave1
    192.168.137.102 slave2
    192.168.137.103 slave3
    

    (5) 关闭防火墙

    service iptables stop
    chkconfig iptables off
    

    2、配置Java环境

    1)下载Java,jdk-8u171-linux-x64.rpm
    2)利用指令 rpm -i jdk-8u171-linux-x64.rpm,安装Java环境,默认的路径为/usr/java/jdk1.8.0_171
    3)配置java环境变量,在/etc/profile下配置如下信息:

    JAVA_HOME=/usr/java/jdk1.8.0_171
    PATH=$JAVA_HOME/bin:$PATH
    export JAVA_HOME PATH
    

    退出vim后,敲入命令source /etc/profile,继续输入 java -version,查看Java环境是否配置成功:

    [root@localhost ~]# java -version
    java version "1.8.0_171"
    Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
    Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
    

    3、安装hadoop

    1)软件安装,下载相应的版本,这里以hadoop-2.7.6.tar.gz为例;
    2)解压Hadoop文件,tar -xzvf hadoop-2.7.6.tar.gz -C /usr/local/
    3)配置hadoop运行环境,hadoop-env.sh:

    [root@localhost ~]# cd /usr/local/hadoop/etc/hadoop/
    [root@localhost hadoop]# vim hadoop-env.sh
    
    修改JAVA_HOME的变量值:
    # The java implementation to use.
    export JAVA_HOME=/usr/java/jdk1.8.0_171
    

    4)配置hadoop核心文件,core-site.xml,在<configuration></configuration>配置相关属性:

    [root@localhost hadoop]# vim core-site.xml
    # 配置namenode
    <property>
            <name>fs.defaultFS</name>
            <value>hdfs://master:9000</value>
    </property>
    #修改hdfs默认文件路径
    <property>
            <name>hadoop.tmp.dir</name>
            <value>/var/data/hadoop</value>
    </property>
    

    5)配置Hadoop的hdfs属性,hdfs-site.xml

    [root@localhost hadoop]# vim hdfs-site.xml
    <!--指定hdfs保存数据的副本数量-->
    <property>
            <name>dfs.replication</name>
            <value>3</value>
    </property>
    

    6) 配置Hadoop的yarn属性:yarn-site.xml

    [root@localhost hadoop]# vim yarn-site.xml
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>master</value>
    </property>
    <property>  
        <name>yarn.nodemanager.aux-services</name>  
        <value>mapreduce_shuffle</value>  
    </property>  
    <property>
        <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
    

    7)配置hadoop的MapReduce属性, mapred-site.xml

    [root@localhost hadoop]# cp mapred-site.xml.template mapred-site.xml
    [root@localhost hadoop]# vim mapred-site.xml
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    

    8)配置datanode节点

    [root@localhost hadoop]# vim slaves
    slave1
    slave2
    slave3
    

    注意:如在此文件中配置了localhost,则会在master中也创建一个datanode

    9)配置环境变量

    [root@master hadoop]# vim /etc/profile
    JAVA_HOME=/usr/java/jdk1.8.0_171
    HADOOP_INSTALL=/usr/local/hadoop
    PATH=$JAVA_HOME/bin:$HADOOP_INSTALL/bin:$HADOOP_INSTALL/sbin:$PATH
    export JAVA_HOME HADOOP_INSTALL PATH
    

    3、克隆master机器三份,分别是slave1,slave2,slave3

    1) 修改对应的IP地址和对应的主机名

    [root@localhost ~]# vim /etc/sysconfig/network
    NETWORKING=yes
    HOSTNAME=slave1
    

    2)clone后的机器无法使用网卡eth0,解决办法:
    首先:打开/etc/udev/rules.d/70-persistent-net.rules

    # This file was automatically generated by the /lib/udev/write_net_rules
    # program, run by the persistent-net-generator.rules rules file.
    #
    # You can modify it, as long as you keep each rule on a single
    # line, and change only the value of the NAME= key.
    
    # PCI device 0x8086:0x100f (e1000)
    SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:a8:49:61",ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
    
    # PCI device 0x8086:0x100f (e1000)
    ## 注释这一行
    #SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:71:ec:e2", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1" 
    

    将这一行注释掉,并记录下00:0c:29:71:ec:e2

    3) 配置网卡信息

    DEVICE=eth1 ## 将原有的eth0,修改成eth1
    HWADDR=00:0C:29:71:ec:e2 ## 修改为上一步中记录的号串
    TYPE=Ethernet
    UUID=8e0bff9b-d7b2-4429-8408-f2f122e323bf
    ONBOOT=yes
    NM_CONTROLLED=yes
    BOOTPROTO=static
    IPADDR=192.168.137.101 ## 修改IP地址
    GATEWAY=192.168.137.2
    NETMASK=255.255.255.0
    DNS1=1.1.1.1
    

    4、免密登陆

    Hadoop 启动 / 停止脚本需要通过 SSH 发送命令启动相关守护进程,为了避免每次启动 / 停止 Hadoop 都要输入密码进行验证,需设置免密码登录。切记:重启一下三台slave机器

    1)在master服务器端生成ssh key: ssh-keygen -t rsa

    [root@master .ssh]# ssh-keygen -t rsa
    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa):   ## 回车
    Enter passphrase (empty for no passphrase):  ## 回车
    Enter same passphrase again:  ## 回车
    Your identification has been saved in /root/.ssh/id_rsa.
    Your public key has been saved in /root/.ssh/id_rsa.pub.
    The key fingerprint is:
    fd:d8:c4:6c:51:8a:77:35:12:e2:00:54:34:02:09:e3 root@master
    The key's randomart image is:
    +--[ RSA 2048]----+
    |   o..+++= . oo..|
    |  . ..  . +..o...|
    |   E      ..+ .  |
    |         . + o   |
    |        S . =    |
    |           *     |
    |          . o    |
    |                 |
    |                 |
    +-----------------+
    

    2)将生成的公钥复制到三台服务器上以及master上:

    [root@master .ssh]# ssh-copy-id slave1
    

    5、master机器上namenode格式化

    1)执行命令:hadoop namenode -format
    2)验证是否格式化成功:

    [root@master ~]# cd /var/data/hadoop/
    [root@master hadoop]# ll
    total 4
    drwxr-xr-x. 3 root root 4096 May  6 20:43 dfs
    

    6、启动Hadoop集群

    1)执行启动命令,包括hdfs和yarn

    [root@master ~]# start-all.sh 
    This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
    Starting namenodes on [master]
    master: starting namenode, logging to /usr/local/hadoop-2.7.6/logs/hadoop-root-namenode-master.out
    slave2: starting datanode, logging to /usr/local/hadoop-2.7.6/logs/hadoop-root-datanode-slave2.out
    slave3: starting datanode, logging to /usr/local/hadoop-2.7.6/logs/hadoop-root-datanode-slave3.out
    slave1: starting datanode, logging to /usr/local/hadoop-2.7.6/logs/hadoop-root-datanode-slave1.out
    Starting secondary namenodes [0.0.0.0]
    0.0.0.0: starting secondarynamenode, logging to /usr/local/hadoop-2.7.6/logs/hadoop-root-secondarynamenode-master.out
    starting yarn daemons
    starting resourcemanager, logging to /usr/local/hadoop-2.7.6/logs/yarn-root-resourcemanager-master.out
    slave2: starting nodemanager, logging to /usr/local/hadoop-2.7.6/logs/yarn-root-nodemanager-slave2.out
    slave3: starting nodemanager, logging to /usr/local/hadoop-2.7.6/logs/yarn-root-nodemanager-slave3.out
    slave1: starting nodemanager, logging to /usr/local/hadoop-2.7.6/logs/yarn-root-nodemanager-slave1.out
    

    2)分别在集群中执行jps指令,查看节点是否启动成功

    [root@master ~]# jps
    4197 Jps
    3783 SecondaryNameNode
    3592 NameNode
    3934 ResourceManager
    
    [root@slave1 ~]# jps
    2033 DataNode
    2124 NodeManager
    2223 Jps
    

    3)访问Hadoop提供的网页管理

    192.168.137.100:50070
    192.168.137.100:8088
    

    相关文章

      网友评论

        本文标题:Hadoop初探--快速入门

        本文链接:https://www.haomeiwen.com/subject/zhadjxtx.html