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

时间:2023-06-14 10:51:44

作业题目

位系统下进行本地编译的安装方式

选2

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

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

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

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

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

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

编译Hadoop2.X 64bit

2.1  运行环境说明

2.1.1硬软件环境

线程,主频2.2G,6G内存

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

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

l  JDK:1.7.0_55 64位

l  Hadoop:Release 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,如下图所示:

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

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

sudo chmod -R 777 /usr/lib/java

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

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

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

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

解压后目录如下图所示:

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

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

vi /etc/profile

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

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

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

5.     重新登录并验证

logout

java -version

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

2.2.2安装并设置maven

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

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

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

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

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

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

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

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

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

sudo mv apache-maven-3.0.5 /usr/local

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

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

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

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

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

source /etc/profile

mvn -version

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

2.2.3以root用户使用yum安装svn

yum install svn

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

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

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

yum install autoconf automake libtool cmake

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

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

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

yum install ncurses-devel

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

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

yum install openssl-devel

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

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

2.2.7以root用户使用yum安装gcc*

yum install gcc*

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

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

2.2.8安装并设置protobuf

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

1.     下载protobuf安装包

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

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

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

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

3.     解压安装包

tar -zxvf protobuf-2.5.0.tar.gz

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

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

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

sudo mv protobuf-2.5.0 /usr/local

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

5.     进行目录运行命令

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

./configure

make

make check

make install

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

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

6.     验证是否安装成功

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

protoc

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

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

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

2.3.2编译Hadoop源代码

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

mvn package -Pdist,native -DskipTests –Dtar

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

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

分钟,在编译过程需要联网,从网络中下载所需要的资料。

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

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

2.3.3验证编译是否成功

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

file ./libhadoop.so.1.0.0

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

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

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

Hadoop2.X 64bit安装

3.1  运行环境说明

3.1.1硬软件环境

线程,主频2.2G,6G内存

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

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

l  JDK:1.7.0_55 64位

l  Hadoop:2.2.0

3.1.2集群网络环境

个namenode、2个datanode,其中节点之间可以相互ping通。节点IP地址和主机名分布如下:

序号

IP地址

机器名

类型

用户名

10.88.147.226

hadoop1

名称节点

hadoop

10.88.147.227

hadoop2

数据节点

hadoop

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,该工具顶部为工具的菜单和快捷方式,中间部分左面为本地文件目录,右边为远程文件目录,可以通过拖拽等方式实现文件的下载与上传,底部为操作情况监控区,如下图所示:

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

3.1.3.2Linux命令行执行工具

l  SSH Secure Shell

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

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

l  SecureCRT

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

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

3.2  环境搭建

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

3.2.1配置本地环境

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

3.2.1.1设置IP地址

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

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

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

IP地址:    10.88.147.*

子网掩码: 255.255.255.0

网关:     10.88.*.*

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

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

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

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

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

3.2.1.2设置机器名

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

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

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

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

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

/etc/init.d/network restart

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

3.     验证设置是否成功

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

3.2.1.4上网配置

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

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

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

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

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

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

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

3.2.2设置操作系统环境

3.2.2.1关闭防火墙

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

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

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

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

chkconfig iptables off

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

3.2.2.2关闭SElinux

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

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

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

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

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

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,如下图所示:

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

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

sudo chmod -R 777 /usr/lib/java

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

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

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

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

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

解压后目录如下图所示:

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

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

vi /etc/profile

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

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

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

11.  重新登录并验证

logout

java -version

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

3.2.2.4更新OpenSSL

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

yum update openssl

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

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

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

3.2.2.5SSH无密码验证配置

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

RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile .ssh/authorized_keys

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

2.     配置后重启服务

service sshd restart

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

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

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

ssh-keygen -t rsa

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

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

cp id_rsa.pub authorized_keys_hadoop1

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

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

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

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

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

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

使用cat authorized_keys_hadoop1 >> authorized_keys 命令

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

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

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

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

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

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

chmod 400 authorized_keys

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

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

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

3.3  配置Hadooop设置

3.3.1下载并解压hadoop安装包

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

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

2.     在主节点上解压缩

cd /home/hadoop/Downloads/

tar -xzvf hadoop-2.2.0.tar.gz

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

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

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

sudo mv hadoop-2.2.0 /usr/local

cd /usr/local

ls

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

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

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

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

3.3.2在Hadoop目录下创建子目录

使用hadoop用户在hadoop-2.2.0目录下创建tmp、name和data目录,保证目录所有者为hadoop

mkdir tmp

mkdir name

mkdir data

ls

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

3.3.3配置hadoop-env.sh

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

cd etc/hadoop

sudo vi hadoop-env.sh

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

2.     加入配置内容,设置了hadoop中jdk和hadoop/bin路径

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

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

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

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

source hadoop-env.sh

hadoop version

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

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

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

2.     加入配置内容,设置了hadoop中jdk和hadoop/bin路径

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

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

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

source yarn-env.sh

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

3.3.5配置core-site.xml

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

sudo vi core-site.xml

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

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>

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

3.3.6配置hdfs-site.xml

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

sudo vi hdfs-site.xml

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

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>

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

3.3.7配置mapred-site.xml

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

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

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

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

sudo vi mapred-site.xml

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

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>

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

3.3.8配置yarn-site.xml

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

sudo vi yarn-site.xml

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

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>

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

3.3.9配置slaves文件

1.     设置从节点

sudo vi slaves

hadoop2

hadoop3

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

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

3.3.10   向各节点分发hadoop程序

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

sudo mkdir /usr/local/hadoop-2.2.0

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

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

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

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

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

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

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

3.3.11   格式化namenode

./bin/hdfs namenode -format

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

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

3.3.12   启动hdfs

cd hadoop-2.2.0/sbin

./start-dfs.sh

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

位时,出现问题5.4异常,可以参考解决

3.3.13   验证当前进行

此时在hadoop1上面运行的进程有:namenode,secondarynamenode

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

hadoop2和hadoop3上面运行的进程有:datanode

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

3.3.14   启动yarn

./start-yarn.sh

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

3.3.15   验证当前进行

此时在hadoop1上运行的进程有:namenode,secondarynamenode,resourcemanager

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

hadoop2和hadoop3上面运行的进程有:datanode,nodemanager

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

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

实验性问题解决

4.1  运行环境说明

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

4.1.1硬软件环境

线程,主频2.2G,6G内存

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

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

l  JDK:1.7.0_55 64位

l  Hadoop:1.1.2

4.1.2集群网络环境

个namenode、2个datanode,其中节点之间可以相互ping通。节点IP地址和主机名分布如下:

序号

IP地址

机器名

类型

用户名

运行进程

10.88.147.221

hadoop1

名称节点

hadoop

NN、SNN、JobTracer

10.88.147.222

hadoop2

数据节点

hadoop

DN、TaskTracer

10.88.147.223

hadoop3

数据节点

hadoop

DN、TaskTracer

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

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

4.2.1修改Core-Site.xml文件

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

以下为配置添加部分:

  <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

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

4.2.3把该文件分发到两个datanode中

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

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

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

4.2.4重新启动hadoop

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

4.2.5验证访问

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

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

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

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

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

4.3.1删除NameNode中Name目录下所有文件,模拟崩溃

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

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

rm -R *

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

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

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

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

hadoop fs -ls

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

查看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

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

4.3.3格式化NameNode

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

./stop-all.sh

./hadoop namenode -format

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

4.3.4获取DataNode的namespaceID

通过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值

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

4.3.5修改NameNode的namespaceID

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

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

vi VERSION

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

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

4.3.6删除NameNode的fsimage

通过如下命令删除NameNode中fsimage:

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

rm fsimage

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

4.3.7从SSN中拷贝fsimage到NN中

在NameNode中SSN路径为/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/

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

4.3.8重启Hadoop

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

cd /usr/local/hadoop-1.1.2/bin

./start-all.sh

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

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

4.4.1在Hadoop中建立/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

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

4.4.2查看当前blocksize

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

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

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

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

  <property>

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

      <value>134217728</value>

  </property>

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

4.4.4重启Hadoop

重新启动Hadoop程序

./stop-all.sh

./start-all.sh

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

4.4.5再次查看当前blocksize

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

./hadoop fs -mkdir /input1

./hadoop fs -put *.sh /input1

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

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

4.5  问题4--SNN与NN的分离

4.5.1复制虚拟机

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

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

4.5.2设置SNN虚拟机IP地址

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

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

4.5.3设置SNN虚拟机名称

设置SNN虚拟机名称为:hadoop4

sudo vi /etc/sysconfig/network

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

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

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

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

sudo vi /etc/hosts

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

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

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

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

在master文件中加入SNN机器名

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

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>

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

4.5.7重启所有虚拟机

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

4.5.8配置ssh免密码登录

1.     在hadoop4(10.88.147.244)节点中使用ssh-keygen -t rsa生成私钥和公钥;

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

2.     把hadoop4(10.88.147.244)节点中公钥信息加入到authorized_keys文件中;

ll

chmod 400 -R /home/hadoop/.ssh

cat id_rsa.pub >> authorized_keys

cat authorized_keys

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

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

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

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

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

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

4.5.9重新格式化NameNode

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

./hadoop namenode -format

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

4.5.10   启动Hadoop

使用如下命令启动Hadoop:

cd /usr/local/hadoop-1.1.2/bin

./start-all.sh

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

4.5.11   验证

1.     在hadoop1(NN)查看进程情况,启动了NameNode、JobTracker两个进程:

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

2.     在hadoop2、hadoop3查看进程情况,启动了TraskTracker进程:

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

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

3.     在hadoop4(SNN)查看进程情况,启动了SecondaryNameNode进程:

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

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

4.6.1停止Hadoop并格式化

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

./stop-all.sh

./hadoop namenode -format

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

4.6.2启动Hadoop,并查看datanode状态

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

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

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

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

4.6.3查看datanode日志

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

cd /usr/local/hadoop-1.1.2/logs

cat hadoop-hadoop-datanode-hadoop2.log

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

报错信息为namenode与datanode之间的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 为 namenode的namespaceID(采用该方法)

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

登录到hadoop1节点上,获取该节点NameNode的namespaceID:

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

cat VERSION

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

登录到hadoop2和hadoop3节点上,修改DataNode的namespaceID为NameNode的namespaceID的值:

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

vi VERSION

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

4.6.5重启集群,查看datanode状态

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

./start-all.sh

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

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

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

datanode进程已经启动

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

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

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

  <property>

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

      <value>180</value>

  </property>

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

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

分钟查看,发现namenode 每隔 180 秒 checkpoint 进行更新一次:

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

4.7.3观察checkpoint 前后 namenode的变化

1.     检查点发生前:

:39。

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

2.     检查点发生后

l  namenode 中的fsimage、fsimage、fstime、VERSION等文件在16:42进行了检查点更新

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

4.7.4基本原理

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

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

2. SSN通过 HTTP GET 获取NN的fsimage和edits文件

3. SSN将fsimage文件载入内存,并应用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.1  安装CentOS64位虚拟机 This host supports Intel VT-x, but Intel VT-x is disabled

位虚拟机,安装过程中出现下图错误:

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

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

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

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

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

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

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

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

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

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

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

5.3  yum无法下载

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

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

2.     重启网络

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

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

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

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

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

位编译,无法适应CentOS 64位环境造成

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

有两种办法解决:

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

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

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

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

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

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

<dependency>

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

      <artifactId>jetty-util</artifactId>

      <scope>test</scope>

</dependency>

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