首页 > 代码库 > Hadoop第3周练习--Hadoop2.X编译安装和实验

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

1    练习题目

2    编译Hadoop2.X 64bit

2.1  运行环境说明

2.1.1   硬软件环境

2.1.2   集群网络环境

2.2  环境搭建

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

2.2.2   安装并设置maven

2.2.3   root用户使用yum安装svn

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

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

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

2.2.7   root用户使用yum安装gcc*

2.2.8   安装并设置protobuf

2.3  编译Hadoop

2.3.1   下载Hadoop源代码 Release2.2.0

2.3.2   编译Hadoop源代码

2.3.3   验证编译是否成功

3    Hadoop2.X 64bit安装

3.1  运行环境说明

3.1.1   硬软件环境

3.1.2   集群网络环境

3.1.3   安装使用工具

3.2  环境搭建

3.2.1   配置本地环境

3.2.2   设置操作系统环境

3.3  配置Hadooop设置

3.3.1   下载并解压hadoop安装包

3.3.2   Hadoop目录下创建子目录

3.3.3   配置hadoop-env.sh

3.3.4   配置yarn-env.sh

3.3.5   配置core-site.xml

3.3.6   配置hdfs-site.xml

3.3.7   配置mapred-site.xml

3.3.8   配置yarn-site.xml

3.3.9   配置slaves文件

3.3.10向各节点分发hadoop程序

3.3.11格式化namenode

3.3.12启动hdfs

3.3.13验证当前进行

3.3.14启动yarn

3.3.15验证当前进行

4    实验性问题解决

4.1  运行环境说明

4.1.1   硬软件环境

4.1.2   集群网络环境

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

4.2.1   修改Core-Site.xml文件

4.2.2   手动创建signature-secret文件

4.2.3   把该文件分发到两个datanode

4.2.4   重新启动hadoop

4.2.5   验证访问

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

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

4.3.2   重启Hadoop

4.3.3   格式化NameNode

4.3.4   获取DataNodenamespaceID

4.3.5   修改NameNodenamespaceID

4.3.6   删除NameNodefsimage

4.3.7   SSN中拷贝fsimageNN

4.3.8   重启Hadoop

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

4.4.1   Hadoop中建立/input文件夹

4.4.2   查看当前blocksize

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

4.4.4   重启Hadoop

4.4.5   再次查看当前blocksize

4.5  问题4--SNNNN的分离

4.5.1   复制虚拟机

4.5.2   设置SNN虚拟机IP地址

4.5.3   设置SNN虚拟机名称

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

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

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

4.5.7   重启所有虚拟机

4.5.8   配置ssh免密码登录

4.5.9   重新格式化NameNode

4.5.10启动Hadoop

4.5.11验证

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

4.6.1   停止Hadoop并格式化

4.6.2   启动Hadoop,并查看datanode状态

4.6.3   查看datanode日志

4.6.4   解决办法

4.6.5   重启集群,查看datanode状态

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

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

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

4.7.3   观察checkpoint 前后 namenode的变化

4.7.4   基本原理

5    问题解决

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

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

5.3  yum无法下载

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

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

 

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

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