• Hadoop第3周练习--Hadoop2.X编译安装和实验


    1    作业题目... 5

    2    编译Hadoop2.X 64bit. 5

    2.1     运行环境说明... 5

    2.1.1   硬软件环境... 5

    2.1.2   集群网络环境... 6

    2.2     环境搭建... 6

    2.2.1   JDK安装和Java环境变量配置... 6

    2.2.2   安装并设置maven. 8

    2.2.3   root用户使用yum安装svn. 9

    2.2.4   root用户使用yum安装autoconf automake libtool cmake. 10

    2.2.5   root用户使用yum安装ncurses-devel11

    2.2.6   root用户使用yum安装openssl-devel12

    2.2.7   root用户使用yum安装gcc*. 13

    2.2.8   安装并设置protobuf13

    2.3     编译Hadoop. 16

    2.3.1   下载Hadoop源代码 Release2.2.0. 16

    2.3.2   编译Hadoop源代码... 16

    2.3.3   验证编译是否成功... 17

    3    Hadoop2.X 64bit安装... 18

    3.1     运行环境说明... 18

    3.1.1   硬软件环境... 18

    3.1.2   集群网络环境... 18

    3.1.3   安装使用工具... 19

    3.2     环境搭建... 21

    3.2.1   配置本地环境... 21

    3.2.2   设置操作系统环境... 24

    3.3     配置Hadooop设置... 32

    3.3.1   下载并解压hadoop安装包... 32

    3.3.2   Hadoop目录下创建子目录... 33

    3.3.3   配置hadoop-env.sh. 34

    3.3.4   配置yarn-env.sh. 35

    3.3.5   配置core-site.xml36

    3.3.6   配置hdfs-site.xml37

    3.3.7   配置mapred-site.xml38

    3.3.8   配置yarn-site.xml40

    3.3.9   配置slaves文件... 41

    3.3.10向各节点分发hadoop程序... 41

    3.3.11格式化namenode. 42

    3.3.12启动hdfs43

    3.3.13验证当前进行... 43

    3.3.14启动yarn. 43

    3.3.15验证当前进行... 44

    4    实验性问题解决... 44

    4.1     运行环境说明... 44

    4.1.1   硬软件环境... 44

    4.1.2   集群网络环境... 45

    4.2     问题1--web监控界面加上安全机制... 45

    4.2.1   修改Core-Site.xml文件... 45

    4.2.2   手动创建signature-secret文件... 46

    4.2.3   把该文件分发到两个datanode... 47

    4.2.4   重新启动hadoop. 47

    4.2.5   验证访问... 47

    4.3     问题2--模拟namenode崩溃并恢复... 48

    4.3.1   删除NameNodeName目录下所有文件,模拟崩溃... 48

    4.3.2   重启Hadoop. 48

    4.3.3   格式化NameNode. 50

    4.3.4   获取DataNodenamespaceID.. 51

    4.3.5   修改NameNodenamespaceID.. 52

    4.3.6   删除NameNodefsimage. 52

    4.3.7   SSN中拷贝fsimageNN... 52

    4.3.8   重启Hadoop. 53

    4.4     问题3--改变HDFS块大小... 53

    4.4.1   Hadoop中建立/input文件夹... 53

    4.4.2   查看当前blocksize. 54

    4.4.3   修改hdfs-site.xml配置文件... 54

    4.4.4   重启Hadoop. 55

    4.4.5   再次查看当前blocksize. 55

    4.5     问题4--SNNNN的分离... 56

    4.5.1   复制虚拟机... 56

    4.5.2   设置SNN虚拟机IP地址... 56

    4.5.3   设置SNN虚拟机名称... 57

    4.5.4   所有节点hosts 文件加入SNN IP对应信息... 57

    4.5.5   所有节点masters文件加入SNN信息... 57

    4.5.6   所有节点中修改hdfs-site.xml58

    4.5.7   重启所有虚拟机... 59

    4.5.8   配置ssh免密码登录... 59

    4.5.9   重新格式化NameNode. 61

    4.5.10启动Hadoop. 61

    4.5.11验证... 61

    4.6     问题5--再次格式化namenode,此时datanode是否能加入... 62

    4.6.1   停止Hadoop并格式化... 62

    4.6.2   启动Hadoop,并查看datanode状态... 62

    4.6.3   查看datanode日志... 63

    4.6.4   解决办法... 63

    4.6.5   重启集群,查看datanode状态... 64

    4.7     问题6--控制namenode检查点发生的频率... 65

    4.7.1   core-site.xml中修改检查点频率... 65

    4.7.2   重启集群,查看检查点更新频率... 65

    4.7.3   观察checkpoint 前后 namenode的变化... 66

    4.7.4   基本原理... 66

    5    问题解决... 67

    5.1     安装CentOS64位虚拟机 This host supports Intel VT-x, but Intel VT-x is disabled. 67

    5.2     *** is not in the sudoers file解决方法... 67

    5.3     yum无法下载... 68

    5.4     CentOS 64bit安装Hadoop2.2.0中出现文件编译位数异常... 69

    5.5    编译Hadoop2.2.0出现代码异常... 70

     

    1 作业题目

    1.  部署Hadoop 2.x,建议尝试64位系统下进行本地编译的安装方式

    2.  Hadoop 1.x上进行探索性的实验研究,以下问题62

    (1) 能否给web监控界面加上安全机制,怎样实现?抓图过程

    (2)模拟namenode崩溃,例如将name目录的内容全部删除,然后通过secondary namenode恢复namenode,抓图实验过程

    (3) 怎样改变HDFS块大小?实验验证并抓图过程

    (4) secondary namenodenamenode分离,部署到单独的节点,抓图实验过程

    (5) Hadoop集群实施成功后,再次格式化名称节点,请问此时datanode还能加入集群不?如果不能加入怎样解决?模拟过程并抓图

    (6) 怎样控制namenode检查点发生的频率,用实验模拟检查点发生的前后过程,并抓图发生前和发生后的元数据情况进行比较,说明之

    2  编译Hadoop2.X 64bit

    2.1  运行环境说明

    2.1.1硬软件环境

    l  主机操作系统:Windows 64 bit,双核4线程,主频2.2G6G内存

    l  虚拟软件:VMware® Workstation 9.0.0 build-812388

    l  虚拟机操作系统:CentOS 6.5 64位,单核,1G内存

    l  JDK1.7.0_55 64

    l  HadoopRelease 2.3.0 source

    2.1.2集群网络环境

    集群只包含一个节点,设置IP地址为192.168.1.200

    2.2  环境搭建

    2.2.1JDK安装和Java环境变量配置

    1.     下载JDK1.7 64bit安装包

    打开JDK1.7 64bit安装包下载链接为:

    http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

    打开界面之后,先选中 Accept License Agreement ,然后下载 jdk-7u55-linux-x64.tar.gz,如下图所示:

    clip_image002

     

    2.     赋予hadoop用户/usr/lib/java目录可读写权限,使用命令如下:

    sudo chmod -R 777 /usr/lib/java

    clip_image004

    3.     把下载的安装包,使用ssh工具上传到/usr/lib/java 目录下,使用如下命令进行解压

    tar -zxvf jdk-7u55-linux-x64.tar.gz

    clip_image006

    解压后目录如下图所示:

    clip_image008

    4.     使用root用户配置 /etc/profile,该设置对所有用户均生效

    vi /etc/profile

    clip_image010

    export JAVA_HOME=/usr/lib/java/jdk1.7.0_55

    export PATH=$JAVA_HOME/bin:$PATH

    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

    clip_image012

    5.     重新登录并验证

    logout

    java -version

    clip_image014

    2.2.2安装并设置maven

    1.     下载maven安装包,建议安装3.0以上版本,本次安装选择的是maven3.0.5的二进制包,下载地址如下

    http://mirror.bit.edu.cn/apache/maven/maven-3/

    clip_image016

    2.     使用ssh工具把maven包上传到/home/hadoop/Downloads目录

    clip_image018

    3.     解压缩apache-maven-3.0.5-bin.tar.gz

    tar -zxvf apache-maven-3.0.5-bin.tar.gz

    clip_image020

    4.     apache-maven-3.0.5目录移到/usr/local目录下

    sudo mv apache-maven-3.0.5 /usr/local

    clip_image022

    5.     /etc/profile配置文件中加入如下设置

    export PATH=$JAVA_HOME/bin:/usr/local/apache-maven-3.0.5/bin:$PATH

    clip_image024

    6.     编辑/etc/profile文件并验证配置是否成功:

    source /etc/profile

    mvn -version

    clip_image026

    2.2.3root用户使用yum安装svn

    yum install svn

    clip_image028

    clip_image030

    2.2.4root用户使用yum安装autoconf automake libtool cmake

    yum install autoconf automake libtool cmake

    clip_image032

    clip_image034

    2.2.5root用户使用yum安装ncurses-devel

    yum install ncurses-devel

    clip_image036

    2.2.6root用户使用yum安装openssl-devel

    yum install openssl-devel

    clip_image038

    clip_image040

    2.2.7root用户使用yum安装gcc*

    yum install gcc*

    clip_image042

    clip_image044

    2.2.8安装并设置protobuf

    注:该程序包需要在gcc安装完毕后才能安装,否则提示无法找到gcc编译器。

    1.     下载protobuf安装包

    下载链接为: https://code.google.com/p/protobuf/downloads/list

    clip_image046

    2.     使用ssh工具把protobuf-2.5.0.tar.gz包上传到/home/hadoop/Downloads目录

    clip_image048

    3.     解压安装包

    tar -zxvf protobuf-2.5.0.tar.gz

    clip_image050

    clip_image052

    4.     protobuf-2.5.0目录转移到/usr/local目录下

    sudo mv protobuf-2.5.0 /usr/local

    clip_image054

    5.     进行目录运行命令

    进入目录以root用户运行如下命令:

    ./configure

    make

    make check

    make install

    clip_image056

    clip_image058

    6.     验证是否安装成功

    运行成功之后,通过如下方式来验证是否安装成功

    protoc

    clip_image060

    2.3  编译Hadoop

    2.3.1下载Hadoop源代码 Release2.2.0

    通过SVN获取Hadoop2.2.0源代码,在/home/hadoop/Downloads目录下命令:

    svn checkout http://svn.apache.org/repos/asf/hadoop/common/tags/release-2.2.0

    获取时间较长,大小约75.3M

    clip_image062

    2.3.2编译Hadoop源代码

    :) 由于hadoop2.2.0svnpom.xml有点问题,会造成编译中出错,可先参考5.5修复该问题。在Hadoop源代码的根目录执行如下命令:

    mvn package -Pdist,native -DskipTests –Dtar

    (注意:这行命令需要手工输入,如果复制执行会报异常!)

    clip_image064

    耗费的时间较长,总共花费了32分钟,在编译过程需要联网,从网络中下载所需要的资料。

    clip_image066

    clip_image068

    2.3.3验证编译是否成功

    hadoop-dist/target/hadoop-2.2.0/lib/native 目录中查看libhadoop.so.1.0.0属性:

    file ./libhadoop.so.1.0.0

    该文件为ELF 64-bit LSB则表示文件成功编译为64

    clip_image070

    hadoop-dist/target目录中已经打包好了hadoop-2.2.0.tar.gz,该文件作为Hadoop2.X 64位安装包。

    clip_image072

    3    Hadoop2.X 64bit安装

    3.1  运行环境说明

    3.1.1硬软件环境

    l  主机操作系统:Windows 64 bit,双核4线程,主频2.2G6G内存

    l  虚拟软件:VMware® Workstation 9.0.0 build-812388

    l  虚拟机操作系统:CentOS 64位,单核,1G内存

    l  JDK1.7.0_55 64

    l  Hadoop2.2.0

    3.1.2集群网络环境

    集群包含三个节点:1namenode2datanode,其中节点之间可以相互ping通。节点IP地址和主机名分布如下:

    序号

    IP地址

    机器名

    类型

    用户名

    1

    10.88.147.226

    hadoop1

    名称节点

    hadoop

    2

    10.88.147.227

    hadoop2

    数据节点

    hadoop

    3

    10.88.147.228

    hadoop3

    数据节点

    hadoop

    所有节点均是CentOS6.5 64bit系统,防火墙均禁用,所有节点上均创建了一个hadoop用户,用户主目录是/usr/hadoop。所有节点上均创建了一个目录/usr/local/hadoop,并且拥有者是hadoop用户。因为该目录用于安装hadoop,用户对其必须有rwx权限。(一般做法是root用户在/usr/local下创建hadoop目录,并修改该目录拥有者为hadoop(chown R hadoop /usr/local/hadoop),否则通过SSH往其他机器分发Hadoop文件会出现权限不足的提示。

    3.1.3安装使用工具

    3.1.3.1Linux文件传输工具

    Linux系统传输文件推荐使用SSH Secure File Transfer,该工具顶部为工具的菜单和快捷方式,中间部分左面为本地文件目录,右边为远程文件目录,可以通过拖拽等方式实现文件的下载与上传,底部为操作情况监控区,如下图所示:

    clip_image074

    3.1.3.2Linux命令行执行工具

    l  SSH Secure Shell

    SSH Secure工具的SSH Secure Shell提供了远程命令执行,如下图所示:

     

    clip_image076

    l  SecureCRT

    SecureCRT是常用远程执行Linux命令行工具,如下图所示:

    clip_image078

     

     

     

     

    3.2  环境搭建

    本次安装集群分为三个节点,节点设置按照2.1.2章节进行设置。环境搭建分为两部分,具体为配置本地环境和设置操作系统环境。

    3.2.1配置本地环境

    该部分对服务器的配置需要在服务器本地进行配置,配置完毕后需要重启服务器确认配置是否生效,特别是远程访问服务器需要设置固定IP地址。

    3.2.1.1设置IP地址

    1.     点击System-->Preferences-->Network Connections,如下图所示:

    clip_image080

    2.     修改或重建网络连接,设置该连接为手工方式,设置如下网络信息:

          IP地址:    10.88.147.*

          子网掩码: 255.255.255.0

          网关:     10.88.*.*

          DNS     10. **.***.** (上网需要设置DNS服务器)

          注意:网关、DNS等根据所在网络实际情况进行设置,并设置连接方式为"Available to all users",否则通过远程连接时会在服务器重启后无法连接服务器

    clip_image082

    3.     在命令行中,使用ifconfig命令查看设置IP地址信息,如果修改IP不生效,需要重启机器再进行设置(如果该机器在设置后需要通过远程访问,建议重启机器,确认机器IP是否生效):

    clip_image084

    3.2.1.2设置机器名

    root用户登录,使用 vi /etc/sysconfig/network 打开配置文件,根据实际情况设置该服务器的机器名,新机器名在重启后生效

    clip_image086

    3.2.1.3设置Host映射文件

    1.     使用root身份编辑/etc/hosts映射文件,设置IP地址与机器名的映射,设置信息如下:

    vi /etc/hosts

    l     10.88.147.226 hadoop1

    l     10.88.147.227 hadoop2

    l     10.88.147.228 hadoop3

    clip_image088

    2.     使用如下命令对网络设置进行重启

    /etc/init.d/network restart

    clip_image090

    3.     验证设置是否成功

    clip_image092

    3.2.1.4上网配置

    第一步   root用户使用vi /etc/profile命令打开配置文件,如下图所示:

    clip_image010[1]

    第二步   在该文件设置如下配置:

    export http_proxy=proxy.*****:8080

    export no_proxy="localhost,10.88.*hadoop*"

    export https_proxy=proxy.*****:8080

    clip_image094

    3.2.2设置操作系统环境

    3.2.2.1关闭防火墙

    Hadoop安装过程中需要关闭防火墙和SElinux,否则会出现异常

    1.     service iptables status 查看防火墙状态,如下所示表示iptables已经开启

    clip_image096

    2.     root用户使用如下命令关闭iptables

    chkconfig iptables off

    clip_image098

    3.2.2.2关闭SElinux

    1.     使用getenforce命令查看是否关闭

    clip_image100

    2.     修改/etc/selinux/config 文件

    SELINUX=enforcing改为SELINUX=disabled,执行该命令后重启机器生效

    clip_image102

    3.2.2.3JDK安装及配置

    7.     下载JDK1.7 64bit安装包

    打开JDK1.7 64bit安装包下载链接为:

    http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

    打开界面之后,先选中 Accept License Agreement ,然后下载 jdk-7u55-linux-x64.tar.gz,如下图所示:

    clip_image002[1]

     

    8.     赋予hadoop用户/usr/lib/java目录可读写权限,使用命令如下:

    sudo chmod -R 777 /usr/lib/java

    clip_image004[1]

    该步骤有可能遇到问题5.2,可参考解决办法处理

    9.     把下载的安装包,使用2.1.3.1介绍的ssh工具上传到/usr/lib/java 目录下,使用如下命令进行解压

    tar -zxvf jdk-7u55-linux-x64.tar.gz

    clip_image006[1]

    解压后目录如下图所示:

    clip_image008[1]

    10.  使用root用户配置 /etc/profile,该设置对所有用户均生效

    vi /etc/profile

    clip_image010[2]

    export JAVA_HOME=/usr/lib/java/jdk1.7.0_55

    export PATH=$JAVA_HOME/bin:$PATH

    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

    clip_image012[1]

    11.  重新登录并验证

    logout

    java -version

    clip_image014[1]

    3.2.2.4更新OpenSSL

    C自带的OpenSSL存在bug,如果不更新OpenSSLAmbari部署过程会出现无法通过SSH连接节点,使用如下命令进行更新:

    yum update openssl

    clip_image104

     

    clip_image106

    该步骤有可能遇到问题5.3,可参考解决办法处理

    3.2.2.5SSH无密码验证配置

    1.     root用户使用vi /etc/ssh/sshd_config,打开sshd_config配置文件,开放三个配置,如下图所示:

    RSAAuthentication yes

    PubkeyAuthentication yes

    AuthorizedKeysFile .ssh/authorized_keys

    clip_image108

    2.     配置后重启服务

    service sshd restart

    clip_image110

    3.     完成以上步骤后,复制该虚拟机两份,分别为hadoop2hadoop3数据节点,IP设置参见1.2章节

    4.     使用hadoop用户登录在三个节点中使用如下命令生成私钥和公钥;

    ssh-keygen -t rsa

    clip_image112

    5.     进入/home/hadoop/.ssh目录在三个节点中分别把公钥命名为authorized_keys_hadoop1authorized_keys_hadoop2authorized_keys_hadoop3,使用命令如下:

    cp id_rsa.pub authorized_keys_hadoop1

    clip_image114

    6.     把两个从节点(hadoop2hadoop3)的公钥使用scp命令传送到hadoop1节点的/home/hadoop/.ssh文件夹中;

    scp authorized_keys_hadoop2 hadoop@hadoop1:/home/hadoop/.ssh

    clip_image116

    clip_image118

    7.     把三个节点的公钥信息保存到authorized_key文件中

    使用cat authorized_keys_hadoop1 >> authorized_keys 命令

    clip_image120

    8.     把该文件分发到其他两个从节点上

    使用scp authorized_keys hadoop@hadoop2:/home/hadoop/.ssh把密码文件分发出去

    clip_image122

    clip_image124

    9.     在三台机器中使用如下设置authorized_keys读写权限

    chmod 400 authorized_keys

    clip_image126

    10.  测试ssh免密码登录是否生效

    clip_image128

    3.3  配置Hadooop设置

    3.3.1下载并解压hadoop安装包

     

    1.     Apache网站上提供Hadoop2.X安装包只支持32位操作系统安装,在64位服务器安装会出现5.4的错误异常。我们使用上一步骤编译好的hadoop-1.1.2-bin.tar.gz文件作为安装包(也可以从网上下载native文件夹或者打包好的64hadoop安装包),使用2.1.3.1介绍的ssh工具上传到/home/hadoop/Downloads 目录下

    clip_image130

    2.     在主节点上解压缩

    cd /home/hadoop/Downloads/

    tar -xzvf hadoop-2.2.0.tar.gz

    clip_image132

    clip_image134

    3.     hadoop-2.2.0目录移到/usr/local目录下

    sudo mv hadoop-2.2.0 /usr/local

    cd /usr/local

    ls

    clip_image136

    4.     使用chown命令遍历修改hadoop-1.1.2目录所有者为hadoop

    sudo chown -R hadoop /usr/local/hadoop-2.2.0

    clip_image138

     

    3.3.2Hadoop目录下创建子目录

    使用hadoop用户在hadoop-2.2.0目录下创建tmpnamedata目录,保证目录所有者为hadoop

    mkdir tmp

    mkdir name

    mkdir data

    ls

    clip_image140

    3.3.3配置hadoop-env.sh

    1.     打开配置文件hadoop-env.sh

    cd etc/hadoop

    sudo vi hadoop-env.sh

    clip_image142

    2.     加入配置内容,设置了hadoopjdkhadoop/bin路径

    export JAVA_HOME=/usr/lib/java/jdk1.7.0_55

    export PATH=$PATH:/usr/local/hadoop-2.2.0/bin

    clip_image144

    3.     编译配置文件hadoop-env.sh,并确认生效

    source hadoop-env.sh

    hadoop version

    clip_image146

    3.3.4配置yarn-env.sh

    1.     /usr/local/hadoop-2.2.0/etc/hadoop打开配置文件yarn-env.sh

    cd /usr/local/hadoop-2.2.0/etc/hadoop

    sudo vi yarn-env.sh

    clip_image148

    2.     加入配置内容,设置了hadoopjdkhadoop/bin路径

    export JAVA_HOME=/usr/lib/java/jdk1.7.0_55

    clip_image150

    3.     编译配置文件yarn-env.sh,并确认生效

    source yarn-env.sh

    clip_image152

    3.3.5配置core-site.xml

    1.     使用如下命令打开core-site.xml配置文件

    sudo vi core-site.xml

    clip_image154

    2.     在配置文件中,按照如下内容进行配置

    <configuration>

      <property>

        <name>fs.default.name</name>

        <value>hdfs://hadoop1:9000</value>

      </property>

      <property>

        <name>fs.defaultFS</name>

        <value>hdfs://hadoop1:9000</value>

      </property>

      <property>

        <name>io.file.buffer.size</name>

        <value>131072</value>

      </property>

      <property>

        <name>hadoop.tmp.dir</name>

        <value>file:/usr/local/hadoop-2.2.0/tmp</value>

        <description>Abase for other temporary directories.</description>

      </property>

      <property>

        <name>hadoop.proxyuser.hduser.hosts</name>

        <value>*</value>

      </property>

      <property>

        <name>hadoop.proxyuser.hduser.groups</name>

        <value>*</value>

      </property>

    </configuration>

    clip_image156

    3.3.6配置hdfs-site.xml

    1.     使用如下命令打开hdfs-site.xml配置文件

    sudo vi hdfs-site.xml

    clip_image158

    2.     在配置文件中,按照如下内容进行配置

    <configuration>

      <property>

       <name>dfs.namenode.secondary.http-address</name>

       <value>hadoop1:9001</value>

      </property>

      <property>

       <name>dfs.namenode.name.dir</name>

       <value>file:/usr/local/hadoop-2.2.0/name</value>

      </property>

      <property>

       <name>dfs.datanode.data.dir</name>

       <value>file:/usr/local/hadoop-2.2.0/data</value>

      </property>

      <property>

       <name>dfs.replication</name>

       <value>2</value>

      </property>

      <property>

       <name>dfs.webhdfs.enabled</name>

       <value>true</value>

      </property>

    </configuration>

    clip_image160

    3.3.7配置mapred-site.xml

    1.     默认情况下不存在mapred-site.xml文件,可以从模板拷贝一份

    cp mapred-site.xml.template mapred-site.xml

    clip_image162

    2.     使用如下命令打开mapred-site.xml配置文件

    sudo vi mapred-site.xml

    clip_image164

    3.     在配置文件中,按照如下内容进行配置

    <configuration>

      <property>

        <name>mapreduce.framework.name</name>

        <value>yarn</value>

      </property>

      <property>

        <name>mapreduce.jobhistory.address</name>

        <value>hadoop1:10020</value>

      </property>

      <property>

        <name>mapreduce.jobhistory.webapp.address</name>

        <value>hadoop1:19888</value>

      </property>

    </configuration>

    clip_image166

    3.3.8配置yarn-site.xml

    1.     使用如下命令打开yarn-site.xml配置文件

    sudo vi yarn-site.xml

    clip_image168

    2.     在配置文件中,按照如下内容进行配置

    <configuration>

      <property>

        <name>yarn.nodemanager.aux-services</name>

        <value>mapreduce_shuffle</value>

      </property>

      <property>

        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>

        <value>org.apache.hadoop.mapred.ShuffleHandler</value>

      </property>

      <property>

        <name>yarn.resourcemanager.address</name>

        <value>hadoop1:8032</value>

      </property>

      <property>

        <name>yarn.resourcemanager.scheduler.address</name>

        <value>hadoop1:8030</value>

      </property>

      <property>

        <name>yarn.resourcemanager.resource-tracker.address</name>

        <value>hadoop1:8031</value>

      </property>

      <property>

        <name>yarn.resourcemanager.admin.address</name>

        <value>hadoop1:8033</value>

      </property>

      <property>

        <name>yarn.resourcemanager.webapp.address</name>

        <value>hadoop1:8088</value>

      </property>

    </configuration>

    clip_image170

    3.3.9配置slaves文件

    1.     设置从节点

    sudo vi slaves

    hadoop2

    hadoop3

    clip_image172 

    clip_image174

    3.3.10   向各节点分发hadoop程序

    1.     hadoop2hadoop3机器中创建/usr/local/hadoop-2.2.0目录,然后修改该目录所有权限

    sudo mkdir /usr/local/hadoop-2.2.0

    sudo chown R hadoop /usr/local/hadoop-2.2.0

    clip_image176

    2.     hadoop1机器上进入/usr/local/hadoop-2.2.0目录,使用如下命令把hadoop文件夹复制到hadoop2hadoop3机器

    使用命令scp -r * hadoop@hadoop2:/usr/local/hadoop-2.2.0

    clip_image178

     

    3.     在从节点查看是否复制成功

    clip_image180

    3.3.11   格式化namenode

    ./bin/hdfs namenode -format

     

    clip_image182

     

    clip_image184

    3.3.12   启动hdfs

    cd hadoop-2.2.0/sbin

    ./start-dfs.sh

    clip_image186

    如果服务器操作系统为32位时,出现问题5.4异常,可以参考解决

    3.3.13   验证当前进行

    此时在hadoop1上面运行的进程有:namenodesecondarynamenode

    clip_image188

    hadoop2hadoop3上面运行的进程有:datanode

    clip_image190

    3.3.14   启动yarn

    ./start-yarn.sh

    clip_image192

    3.3.15   验证当前进行

    此时在hadoop1上运行的进程有:namenodesecondarynamenoderesourcemanager

    clip_image194

    hadoop2hadoop3上面运行的进程有:datanodenodemanager

    clip_image196

    clip_image198

    4    实验性问题解决

    4.1  运行环境说明

    以下实验性问题解决是在第1~2周搭建的环境下进行解决,即在Hadoop1.1.2版本下模拟问题的发生和解决。

    4.1.1硬软件环境

    l  主机操作系统:Windows 64 bit,双核4线程,主频2.2G6G内存

    l  虚拟软件:VMware® Workstation 9.0.0 build-812388

    l  虚拟机操作系统:三个节点均为CentOS6.5 64位,单核,1G内存

    l  JDK1.7.0_55 64

    l  Hadoop1.1.2

    4.1.2集群网络环境

    集群包含三个节点:1namenode2datanode,其中节点之间可以相互ping通。节点IP地址和主机名分布如下:

    序号

    IP地址

    机器名

    类型

    用户名

    运行进程

    1

    10.88.147.221

    hadoop1

    名称节点

    hadoop

    NNSNNJobTracer

    2

    10.88.147.222

    hadoop2

    数据节点

    hadoop

    DNTaskTracer

    3

    10.88.147.223

    hadoop3

    数据节点

    hadoop

    DNTaskTracer

    所有节点均是CentOS系统,防火墙均禁用,所有节点上均创建了一个hadoop用户,用户主目录是/usr/hadoop。所有节点上均创建了一个目录/usr/local/hadoop,并且拥有者是hadoop用户。

    4.2  问题1--web监控界面加上安全机制

    4.2.1修改Core-Site.xml文件

    clip_image200

    以下为配置添加部分:

      <property>

        <name>hadoop.http.filter.initializers</name>

        <value>org.apache.hadoop.security.AuthenticationFilterInitializer</value>

        <description>HTTP Authentication document in hadoop tar file</description>

      </property>

      <property>

        <name>hadoop.http.authentication.type</name>

        <value>simple</value>

        <description>authentication type for web UI</description>

      </property>

      <property>

        <name>hadoop.http.authentication.token.validity</name>

        <value>36000</value>

        <description>how long authentication token is valid before it needs to be renewed</description>

      </property>

      <property>

        <name>hadoop.http.authentication.signature.secret.file</name>

        <value>/usr/local/hadoop-1.1.2/signature-secret</value>

        <description>signature secret for signing authentication tokens</description>

      </property>

      <property>

        <name>hadoop.http.authentication.cookie.domain</name>

        <value></value>

        <description>domain to use for the http cookie that stores authentication token</description>

      </property>

      <property>

        <name>hadoop.http.authentication.simple.anonymous.allowed</name>

        <value>false</value>

        <description>anonymous web UI requests enabled or disabled</description>

      </property>

    4.2.2手动创建signature-secret文件

    /usr/local/hadoop-1.1.2目录下创建signature-secret文件,使用如下命令:

    echo hadoop >signature-secret

    clip_image202

     

    4.2.3把该文件分发到两个datanode

    namenode创建需要把这个文件分发到各个datanode,使用如下命令:

    scp signature-secret hadoop@hadoop2:/usr/local/hadoop-1.1.2

    clip_image204

    4.2.4重新启动hadoop

    clip_image206

    4.2.5验证访问

    使用http://10.88.147.221:50030/jobtracker.jsp访问jobtracker页面出现如下错误:

    clip_image208

    http访问地址加入?user.name=hadoop就能够访问了,不过存在问题是user.name是可以随意输入,在http中明码传递,还是不安全!

    clip_image210

    4.3  问题2--模拟namenode崩溃并恢复

    4.3.1删除NameNodeName目录下所有文件,模拟崩溃

    NameNode节点中name目录为 /usr/local/hadoop-1.1.2/hdfs/name,使用如下命令删除该文件夹下所有文件:

    cd /usr/local/hadoop-1.1.2/hdfs/name

    rm -R *

    clip_image212

    4.3.2重启Hadoop

    使用./stop-all.sh停止Hadoop,然后使用./start-all.sh启动Hadoop,通过jps命令可以看到namenode进程无法启动

    cd /usr/local/hadoop-1.1.2/bin

    ./stop-all.sh

    ./start-all.sh

    clip_image214

    通过hadoop命令查看hdfs文件时无法连接,如下图所示:

    hadoop fs -ls

    clip_image216

    查看logs文件夹下NameNode对应日志文件hadoop-hadoop-jobtracker-hadoop1.log,出现如下错误:

    INFO org.apache.hadoop.mapred.JobTracker: Problem connecting to HDFS Namenode... re-trying

    java.net.ConnectException: Call to hadoop1/10.88.147.221:9000 failed on connection exception: java.net.ConnectException: Connection refused

    clip_image218

    4.3.3格式化NameNode

    停止Hadoop后,通过如下命令格式化Hadoop

    ./stop-all.sh

    ./hadoop namenode -format

    clip_image220

    4.3.4获取DataNodenamespaceID

    通过ssh连接到hadoop2节点,进入DataNode存放数据的文件夹 /usr/local/hadoop-1.1.2/hdfs/data/current,通过如下命令查看VERSION文件内容:

    ssh hadoop2

    cd /usr/local/hadoop-1.1.2/hdfs/data/current

    ls

    cat VERSION

    获取namespaceID

    clip_image222

    4.3.5修改NameNodenamespaceID

    修改hadoop1机器NameNode目录/usr/local/hadoop-1.1.2/hdfs/name/currentVERSION文件中namespaceID值为上一步骤DataNode所对应的值,结果如下图所示:

    cd /usr/local/hadoop-1.1.2/hdfs/name/current

    vi VERSION

    clip_image224

    clip_image226

    4.3.6删除NameNodefsimage

    通过如下命令删除NameNodefsimage

    cd /usr/local/hadoop-1.1.2/hdfs/name/current

    rm fsimage

    clip_image228

    4.3.7SSN中拷贝fsimageNN

    NameNodeSSN路径为/usr/local/hadoop-1.1.2/tmp/dfs/namesecondary,把current文件夹下得fsimage拷贝到NN所在路径中,命令如下:

    cd /usr/local/hadoop-1.1.2/tmp/dfs/namesecondary

    cp fsimage /usr/local/hadoop-1.1.2/hdfs/name/current/

    clip_image230

    4.3.8重启Hadoop

    启动Hadoop,使用jps命令查看,namenode进程正常启动

    cd /usr/local/hadoop-1.1.2/bin

    ./start-all.sh

    clip_image232

    4.4  问题3--改变HDFS块大小

    4.4.1Hadoop中建立/input文件夹

    使用如下命令在Hadoop中创建/input文件夹,把start开始的sh脚本文件放到该文件中:

    cd /usr/local/hadoop-1.1.2/bin

    ./hadoop fs -mkdir /input

    ./hadoop fs -put *.sh /input

    ./hadoop fs -ls /input

    clip_image234

    4.4.2查看当前blocksize

    查看hadoop2节点数据块大小情况,如下图所示:

    clip_image236

    4.4.3修改hdfs-site.xml配置文件

    NameNode节点hadoop1中修改hdfs-site.xml配置文件,加入如下配置:

      <property>

        <name>dfs.block.size</name>

          <value>134217728</value>

      </property>

    clip_image238

    4.4.4重启Hadoop

    重新启动Hadoop程序

    ./stop-all.sh

    ./start-all.sh

    clip_image206[1]

    4.4.5再次查看当前blocksize

    使用如下命令在Hadoop中创建/input1文件夹并复制文件到该文件夹覆盖之前操作的文件:

    ./hadoop fs -mkdir /input1

    ./hadoop fs -put *.sh /input1

    再次在查看block size,如下图所示

    clip_image240

    4.5  问题4--SNNNN的分离

    4.5.1复制虚拟机

    复制NameNode节点所在虚拟机作为SecondaryNameNode运行虚拟机

    clip_image242

    4.5.2设置SNN虚拟机IP地址

    设置该虚拟机IP地址为:10.88.147.224

    clip_image244

    4.5.3设置SNN虚拟机名称

    设置SNN虚拟机名称为:hadoop4

    sudo vi /etc/sysconfig/network

    clip_image246

    clip_image248

    4.5.4所有节点hosts 文件加入SNN IP对应信息

    在所有节点/etc/hosts文件中加入SNNIP地址10.88.147.224对应hadoop4

    sudo vi /etc/hosts

    clip_image250

    4.5.5所有节点masters文件加入SNN信息

    在所有节点masters文件中加入SNN机器名信息,使用如下命令:

    sudo vi /usr/local/hadoop-1.1.2/conf/masters

    master文件中加入SNN机器名

    clip_image252

    4.5.6所有节点中修改hdfs-site.xml

    使用如下命令编辑hdfs-site.xml配置文件:

    sudo vi /usr/local/hadoop-1.1.2/conf/hdfs-site.xml

    hdfs-site.xml文件中加入如下信息:

      <property>

        <name>dfs.secondary.http.address</name>

          <value>hadoop4:50090</value>

      </property>

    clip_image254

    4.5.7重启所有虚拟机

    clip_image256

    4.5.8配置ssh免密码登录

    1.     hadoop410.88.147.244)节点中使用ssh-keygen -t rsa生成私钥和公钥;

    clip_image258

    2.     hadoop410.88.147.244)节点中公钥信息加入到authorized_keys文件中;

    ll

    chmod 400 -R /home/hadoop/.ssh

    cat id_rsa.pub >> authorized_keys

    cat authorized_keys

    clip_image260

    3.     authorized_keys分发到各个节点上;

    scp authorized_keys hadoop@hadoop1:/home/hadoop/.ssh

    clip_image262

    4.     验证是否能够免登录到各个节点;

    clip_image264

    4.5.9重新格式化NameNode

    /usr/local/hadoop-1.1.2/bin目录下使用如下命令进行格式化:

    ./hadoop namenode -format

    clip_image266

    4.5.10   启动Hadoop

    使用如下命令启动Hadoop

    cd /usr/local/hadoop-1.1.2/bin

    ./start-all.sh

    clip_image268

    4.5.11   验证

    1.     hadoop1NN)查看进程情况,启动了NameNodeJobTracker两个进程:

    clip_image270

    2.     hadoop2hadoop3查看进程情况,启动了TraskTracker进程:

    clip_image272

    (注意这个节点上DataNode并没有启动,这个问题是由于NameNodeDataNode之间的namespaceID不一致造成的,该问题的解决方法如4.6所描述)

    3.     hadoop4SNN)查看进程情况,启动了SecondaryNameNode进程:

    clip_image274

    4.6  问题5--再次格式化namenode,此时datanode是否能加入

    4.6.1停止Hadoop并格式化

    使用如下命令停止Hadoop并格式化:

    ./stop-all.sh

    ./hadoop namenode -format

    clip_image276

    4.6.2启动Hadoop,并查看datanode状态

    使用./start-all.sh启动Hadoop

    clip_image268[1]

    datanode中使用jps查看启动状态:

    clip_image272[1]

    4.6.3查看datanode日志

    查看datanode节点hadoop2日志文件夹下日志内容:

    cd /usr/local/hadoop-1.1.2/logs

    cat hadoop-hadoop-datanode-hadoop2.log

    clip_image278

    报错信息为namenodedatanode之间的namespaceID不一致:

    2014-09-30 10:04:41,890 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in /usr/local/hadoop-1.1.2/hdfs/data: namenode namespaceID = 87263132; datanode namespaceID = 1318122769

            at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:232)

            at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:147)

            at org.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNode.java:399)

            at org.apache.hadoop.hdfs.server.datanode.DataNode.<init>(DataNode.java:309)

            at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:1651)

            at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:1590)

            at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:1608)

            at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:1734)

            at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:1751)

    4.6.4解决办法

    有两个解决办法:

    Ø  修改所有datanode/usr/local/hadoop-1.1.2/tmp/dfs/data/current/VERSION 文件的namespaceID namenodenamespaceID(采用该方法)

    Ø  删除datanode /usr/local/hadoop-1.1.2/tmp/dfs/data 目录

     

    登录到hadoop1节点上,获取该节点NameNodenamespaceID

    cd /usr/local/hadoop-1.1.2/hdfs/name/current

    cat VERSION

    clip_image280

    登录到hadoop2hadoop3节点上,修改DataNodenamespaceIDNameNodenamespaceID的值:

    cd /usr/local/hadoop-1.1.2/hdfs/data/current

    vi VERSION

    clip_image282

    4.6.5重启集群,查看datanode状态

    namenode节点hadoop1使用./start-all.sh启动Hadoop

    ./start-all.sh

    clip_image284

    datanode节点hadoop2中使用jps查看启动状态:

    clip_image286

    datanode进程已经启动

    4.7  问题6--控制namenode检查点发生的频率

    4.7.1core-site.xml中修改检查点频率

    系统默认为1个小时即3600秒,在namenode节点中修改core-site.xml文件,加入如下配置内容:

      <property>

        <name>fs.checkpoint.period</name>

          <value>180</value>

      </property>

    clip_image288

    4.7.2重启集群,查看检查点更新频率

    namenode节点的目录 /usr/local/hadoop-1.1.2/hdfs/name/current fsimageedits等的更新频率。每隔4分钟查看,发现namenode 每隔 180 checkpoint 进行更新一次:

    clip_image290

    4.7.3观察checkpoint 前后 namenode的变化

    1.     检查点发生前:

    l  namenodefsimageedits 最后修改时间为1639

    l  16:40 hdfs系统加入 input 文件,namenode 中的edits 记录这次操作,其修改时间为16:40

    2.     检查点发生后

    l  namenode 中的fsimagefsimagefstimeVERSION等文件在16:42进行了检查点更新

    clip_image292

     

    4.7.4基本原理

    当距离上个checkpoint 时间 为${fs.checkpoint.period} 时:

    1. SSN请求NN滚动edits文件,使新的edits log 放到另一个新生成的edits文件。

    2. SSN通过 HTTP GET 获取NNfsimageedits文件

    3. SSNfsimage文件载入内存,并应用edits 文件中的每一项操作,这样就创建了一个新的合成的fsimage 文件。

    4. SSN采用 HTTP POST 方式 将刚合成的fsimage 发送回NN

    5. NN用刚从SSN收到的fsimage代替老一版本的fsimage, 并用第一步中产生的edits 代替原先的edits,同时将fctime文件更新到checkpoint发生的时间

    最终,名称节点就有了一份最新的fsimage文件和一个更短的edits文件(该edits文件不一定空,当SSN在执行checkpoint操作时,edits 可能已经记录下了一些hdfs系统的操作)

    5    问题解决

    5.1  安装CentOS64位虚拟机 This host supports Intel VT-x, but Intel VT-x is disabled

    在进行Hadoop2.X 64bit编译安装中由于使用到64位虚拟机,安装过程中出现下图错误:

    clip_image294

    F1 键进入BIOS 设置实用程序 使用箭头键security面板下找virtualizationEnter 键 进去Intel  VirtualizationTechnology改成EnabledF10 键保存并退出 选择YesEnter 键 完全关机(关闭电源)等待几秒钟重新启动计算机此Intel虚拟化技术开启成功

    5.2  *** is not in the sudoers file解决方法

    当使用hadoop用户需要对文件夹进行赋权,使用chmod命令出现hadoop is not in the sudoers file.  This incident will be reported错误,如下所示:

    clip_image296

     

    1.     使用su命令进入root用户

    clip_image298

    2.     添加文件的写权限,操作命令为:chmod u+w /etc/sudoers

    clip_image300

    3.     编辑/etc/sudoers文件,使用命令"vi /etc/sudoers"进入编辑模式,找到:"root ALL=(ALL) ALL"在起下面添加"hadoop ALL=(ALL) ALL",然后保存退出。

    clip_image302

    5.3  yum无法下载

    1.     /etc/yum.conf中加入proxy=htt://XX.XXX.XX:PORT

    clip_image304

    2.     重启网络

    clip_image306

    3.     再次运行yum install ambari-server则能够正常下载

    clip_image308

    5.4  CentOS 64bit安装Hadoop2.2.0中出现文件编译位数异常

    在安装hadoop2.2.0过程中出现如下异常:Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

    clip_image310

    通过分析是由于lib/native目录中有些文件是在32位编译,无法适应CentOS 64位环境造成

    clip_image312

    有两种办法解决:

    l  重新编译hadoop,然后重新部署

    l  暂时办法是修改配置,忽略有问题的文件

    clip_image314

    5.5  编译Hadoop2.2.0出现代码异常

    目前的2.2.0 Source Code 压缩包解压出来的code有个bug 需要patch后才能编译。否则编译hadoop-auth 会提示下面错误:

    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.5.1:testCompile (default-testCompile) on project hadoop-auth: Compilation failure: Compilation failure:

    [ERROR] /home/hadoop/Downloads/release-2.2.0/hadoop-common-project/hadoop-auth/src/test/java/org/apache/hadoop/security/authentication/client/AuthenticatorTestCase.java:[88,11] error: cannot access AbstractLifeCycle

    [ERROR] class file for org.mortbay.component.AbstractLifeCycle not found

    [ERROR] /home/hadoop/Downloads/release-2.2.0/hadoop-common-project/hadoop-auth/src/test/java/org/apache/hadoop/security/authentication/client/AuthenticatorTestCase.java:[96,29] error: cannot access LifeCycle

    [ERROR] class file for org.mortbay.component.LifeCycle not found

    clip_image316

    直接修改hadoop-common-project/hadoop-auth/pom.xml,其实就是少了一个包,添加一个dependency

    <dependency>

          <groupId>org.mortbay.jetty</groupId>

          <artifactId>jetty-util</artifactId>

          <scope>test</scope>

    </dependency>

    clip_image318

  • 相关阅读:
    vue—子调父 $emit (把子组件的数据传给父组件)
    解决 Error: EBUSY: resource busy or locked, rmdir 'E:/...'问题
    php中session原理及安全性问题
    MySQL函数大全及用法示例
    php基础语法
    常用sql语句
    php表单传值--GET和POST
    jQuery插件的使用方法
    $.ajax()方法详解
    php文件上传
  • 原文地址:https://www.cnblogs.com/shishanyuan/p/4164104.html
Copyright © 2020-2023  润新知