Hadoop2.X64 分布式安装指南

来源:互联网 发布:淘宝客服介入会成功吗 编辑:程序博客网 时间:2024/05/18 14:42

Hadoop2.X64 分布式安装指南

1  前言

Hadoop 安装有如下三种方式:

单机模式:安装简单,几乎不用作任何配置,但仅限于调试用途;

伪分布模式:在单节点上同时启动 NameNode、DataNode、JobTracker、TaskTracker、Secondary Namenode 等 5 个进程,模拟分布式运行的各个节点;

完全分布式模式:正常的 Hadoop 集群,由多个各司其职的节点构成。

2  系统需求

以下说明 Hadoop 2.7.2 安装的基本需求环境。

2.1  系统硬件

Intel x86_64 PC 机器,主机安装 VMware-workstation9.0,虚拟化安装 3 台虚拟机,虚拟机网络采用 NAT 方式。

master 192.168.100.10 内存 2.0G 硬盘 40G

slave1 192.168.100.20 内存 1.0G 硬盘 40G

slave2 192.168.100.30 内存 1.0G 硬盘 40G

网关 192.168.100.2 VMNet8:192.168.100.1

2.2  系统软件

操作系统:CentOS 6.5 x64 版本

指令:

YARN——Resource Manager,NodeManager

HDFS——NameNode,DataNode,SecendryNameNode

3  准备环境

3.1  关闭防火墙

暂时关闭:

service iptables stop

service ip6tables stop

永久关闭(关闭其自启动):

chkconfig iptables off

chkconfig ip6tables off

查看指令:

service iptables status

设置规则:iptables -L

3.2  关闭 SELinux(系统安全模式,不利于部分操作需关闭)

用下面命令执行,并修改内容如下所示:

vi /etc/sysconfig/selinux

SELINUX=enforcing修改为:SELINUX=disabled

3.3  配置节点IP地址(单机配置)

vi/etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

HWADDR=00:0C:29:54:18:A8

TYPE=Ethernet

UUID=bddbf7e2-09c1-4c04-a34e-95d22b0a1c88

ONBOOT=yes

NM_CONTROLLED=yes

#BOOTPROTO=dhcp

BOOTPROTO=static

IPADDR=192.168.100.10

NETMASK=255.255.255.0

GATEWAY=192.168.100.2

设置完毕后 运行如下命令 重启 linux 的网络,使新配置的 ip 生效

sudo /etc/init.d/networkrestart

再次运行 ipconfig 确认 ip 地址是否生效

3.3.1 访问外网

如需要将虚拟机访问外网,还需要配置 DNS

修改对应网卡的 DNS 的配置文件

# vi /etc/resolv.conf

修改以下内容

nameserver 180.76.76.76

nameserver 114.114.114.114

3.4  创建hadoop  用户

此步骤所有节点都要操作

useradd hadoop

添加完用户之后,再设置 hadoop 用户的密码:

passwd hadoop

设置完密码,再将 hadoop 用户增加到sudoer 列表中,授予 hadoop 用户有 sudo 执行权

sudo vi /etc/sudoers,找到下面这一行。

root ALL=(ALL) ALL

在这一行的下面,再添加一行。

root ALL=(ALL) ALL

hadoop ALL=(ALL) ALL

保存时由于是用户操作,可用“:wq!”强制保存。不需要更改文件修改权限。(若用权限修改,修改完后需改回原权限“440”,否则执行sudo会报错。)

3.5  用户与权限

建议将自行安装的软件统一放置在/opt 目录下,所以将/opt 修改为用户的:(-R指文件夹全部文件及子文件夹)

$ sudo chown -R hadoop:hadoop/opt

3.6  修改节点主机名(分机中也需要操作)

修改/etc/sysconfig/network 中的 hostname

sudo vi/etc/sysconfig/network

HOSTNAME=localhost.localdomain# 修改HOSTNAME=master

3.7  添加hosts  记录

修改/etc/hosts 文件

sudo vi /etc/hosts 增加(可保留文件内容追加即可。)

192.168.100.10 master

(若是存在分机,还需要进行以下配置:)

192.168.100.20 slave1

192.168.100.30 slave2

shutdown -r now #最后,重启服务器即可使用户名生效。

3.8 SSH  安装与配置

安装 SSH(在ubuntu中是apt-get)

sudo yum install ssh

启动 SSH

service sshd start

设置开机运行

chkconfig sshd on

SSH 配置:

修改 sudo vi/etc/ssh/sshd_config 将 ssh 服务的密钥认证打开 需要把被注释掉这几行打开

RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile.ssh/authorized_keys

修改完毕后 重启 ssh 服务

sudo /etc/init.d/sshd restart

3.9  无密码登陆

通过建立 hadoop  用户之间相互信任(此步骤所有节点都要操作)

3.9.1设置 master无密码自登陆

切换至 hadoop 用户下执行

ssh-keygen

这条命令是生成其无密码密钥对,询问其保存路径时 直接回车采用默认路径。生成的

密钥对:id_rsa 和 id_rsa.pub,默认存储在"/home/hadoop/.ssh"目录下。

然后将自己的公钥以及其他服务器 hadoop 用户的公钥放置 hadoop 宿主目录下的 .ssh/authorized_keys 中,注意 authorized_keys 默认不存在,需要手动创建,并且必须设置权限为 700。

cat ~/.ssh/id_rsa.pub >~/.ssh/authorized_keys

chmod 700~/.ssh/authorized_keys

测试,第一次登录可能需要 yes 确认,之后就可以直接登录了:

$ ssh localhost

Last login: Sat Jul 1822:57:44 2015 from localhost

对于 slave1 和 slave2,进行无密码自登陆设置,操作同上。

3.9.2设置主机-> 从机的无密码登录

$ cat ~/.ssh/id_rsa.pub | sshhadoop@slave1 'cat - >> ~/.ssh/authorized_keys'

$ cat ~/.ssh/id_rsa.pub | sshhadoop@slave2 'cat - >> ~/.ssh/authorized_keys'

测试:

[hadoop@master ~]$ sshhadoop@slave1

Last login: Sat Jul 1823:25:41 2015 from master

[hadoop@master ~]$ sshhadoop@slave2

Last login: Sat Jul 1823:25:14 2015 from master

3.9.3设置从机-> 主机的无密码登录

分别在 slave1、slave2 上执行:

$ cat ~/.ssh/id_rsa.pub | sshhadoop@master 'cat - >> ~/.ssh/authorized_keys'

测试:

[hadoop@slave1 ~]$ sshhadoop@master

Last login: Sat Jul 1823:25:41 2015 from slave1

3.10 安装 Java

(建议每台机器的 JAVA_HOME 路径信息相同)此步骤所有节点都要操作下载 jkd:

(http://www.oracle.com/technetwork/java/javase/downloads/index.html)

下载后解压至自己指定的目录如 /opt/

$ tar –zxvfjdk-8u91-linux-x64.tar.gz –C /opt/

3.10.1 配置java

则 JAVA_HOME 地址可以如下配置,在/etc/profile 中修改:

$ sudo vi / etc/profile

在末尾加入:

# set java

exportJAVA_HOME=/opt/jdk1.8.0_91

exportJRE_HOME=$JAVA_HOME/jre

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

exportPATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin

注:如果是 32 位的 Linux,请安装 jdk-7u45-linux-i586 的 32 位 Java。

添加之后执行 source /etc/profile使新增的环境变量生效

然后执行 java --version 检查 java 版本是否已经替换为 jdk1.8.0_91

3.11  设置系统时间

查看当前系统时间 date 命令

当发现虚拟机时间与外部时间不一致时,需要设置正确时间,有两种方法:

方法 1:手动设置

date -s "2007041413:58:00"

date -s "2007-04-1413:58:00"

date -s "2007/04/1413:58:00"

方法 2:通过网络授时进行设置

ntpdate time.ntp.org

ntpdate cn.ntp.org.cn

ntpdate 58.220.207.226

注意:如系统未安装 ntpdate,可以用如下命名先安装:

sudo yum -y install ntpdate

3.12  克隆虚拟机产生的问题

在使用 vmware 克隆一个系统的时候,是减少本地物理内存的一个好办法,但是在克隆完成后往往出现网络配置上的问题,以下是修改办法。

cat/etc/udev/rules.d/70-persistent-net.rules

vi /etc/sysconfig/network-scripts/ifcfg-eth0

将rules中的pci地址复制到ifcfg-eth0中

重启服务

sudo service network restart或者 sudo /etc/init.d/network restart

用ifconfig指令查看ip现状。

4  安装配置hadoop-2.7.2

4.1 Hadoop 2.7.2

从 Apache 官方可以下载到 Hadoop 2.7.2 的发布代码,或者在 CNNIC 下载:

http://mirrors.cnnic.cn/apache/hadoop/common/hadoop-2.7.2/hadoop

-2.7.2.tar.gz

4.2 Hadoop  路径配置

$ tar xzvfhadoop-2.7.2.tar.gz –C /opt

然后建议使用软连接:

$ ln -s /opt/hadoop-2.7.2/opt/hadoop

4.3 全局配置

在/etc/profile 的末尾加入:

# set hadoop

exportHADOOP_HOME=/opt/hadoop

exportCLASSPATH=$($HADOOP_HOME/bin/hadoop classpath):$CLASSPATH

exportPATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

确保可以在任意位置执行 hadoop 命令。

然后将配置文件启用:

$ source /etc/profile

4.4 增加目录配置:

创建 Hadoop 的数据存储目录,并修改属主权限:

$ sudo mkdir /data

$ sudo chown -R hadoop:hadoop/data

$ mkdir –p /data/hadoop/dfs/

$ mkdir –p /data/hadoop/tmp

4.5  Master上操作

解压 hadoop-2.7.2.tar.gz 到/opt/hadoop进入配置文件目录

cd /opt/hadoop/etc/hadoop

在这里主要修改一下几个文件:(文件内容有些参数根据自己实际情况修改)

slaves core-site.xml hadoop-env.shhdfs-site.xml

mapred-site.xml (此文件默认不存在,需从其对应的 template 复制一份)

yarn-env.sh yarn-site.xml

4.5.1  修改slaves  文件

添加以下两行(目的:添加 slave节点,可以是主机的 ip 或者是主机名,建议写主机名,这里是dateManger的节点。slave1和slave2在分机创建后可以添加)

master

slave1

slave2

4.5.2  修改core-site.xml

添加以下内容:

<configuration>

<property>

<name>fs.defaultFS</name>

<value>hdfs://master:9000</value>

</property>

<property>

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

<value>file:/data/hadoop/tmp</value>

</property>

</configuration>

4.5.3  修改hdfs-site.xml  文件

添加以下内容

<configuration>

<property>

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

<value>file:/data/hadoop/dfs/name</value>

</property>

<property>

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

<value>file:/data/hadoop/dfs/data</value>

</property>

<property>

<name>dfs.replication</name>

<value>3</value>

</property>

<property>

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

<value>true</value>

</property>

</configuration>

4.5.4  修改mapred-site.xml 文件

添加以下内容

<configuration>

<property>

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

<value>yarn</value>

</property>

</configuration>

4.5.5  修改yarn-site.xml 文件

添加以下内容

<configuration>

<property>

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

<value>mapreduce_shuffle</value>

</property>

<property>

<name>yarn.resourcemanager.hostname</name>

<value>master</value>

</property>

</configuration>

4.5.6  修该hadoop-env.sh  文件

修改 JAVA_HOME 值(export JAVA_HOME= /opt/jdk1.8.0_91 )

4.5.7  修改yarn-env.sh 文件

修改 JAVA_HOME 值(export JAVA_HOME= /opt/jdk1.8.0_91 )

4.5.8  传送文件至各个节点保持一致

将修改后的所有文件都复制(覆盖)到各个节点hadoop 目录

scp -r /opt/hadoop/slave1:/opt/

scp -r /opt/hadoop/slave2:/opt/

5  启动 hadoop

5.1  初始化 hadoop

切换至 hadoop 用户,执行命令:

hdfs namenode -format

初始化完之后会自动的在/data/hdoop/dfs/下面创建

/data/hdoop/dfs/name/目录

每次初始化都会对 dfs 进行操作,一般只要初始化一次就可以了,因为如果 dfs 里面有数据的话会把它给弄丢的

5.2  启动 hadoop

1.start-dfs.sh

此时master 上会产生:(两个进程)

SecondaryNameNode

NameNode

Slave 节点上会产:(一个进程)

DataNode

2.start-yarn.sh

此时master 上会产生:(多出来一个)

ResourceManager

NameNode

SecondaryNameNode

slave 节点上会产:

DataNode

NodeManager

访问yarn网页 :http://192.168.100.10:8088

访问hdfs网页 :http://192.168.100.10:50070

至此,hadoop  已经启动

5.3  验证 hadoop

1.用hadoop 用户执行,运行Test ——pi运算

hadoop jar/opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar pi 10 10

2.可以运行Test Case2 word count

$mkdir input

$echo ‘hello,world’ >>input/file1.in

$echo ‘hello, hadoop’>> input/file2.in

./bin/hadoop fs -mkdir -p/user/hadoop/test_wordcount/

./bin/hadoop fs –put input/user/hadoop/test_wordcount/in

$ hadoop jar/opt/hadoop/share/hadoop//mapreduce/hadoop-mapreduce-examples-2.7.2.jar

wordcount/user/hadoop/test_wordcount/in /user/hadoop/test_wordcount/out

6  常见问题

6.1  异常处理

如果发生任何启动异常,关闭进程后,需要清空数据:

$ rm -rf /data/hadoop/dfs/*

$ rm -rf /data/hadoop/tmp/*

然后重新执行格式化:

$ hdfs namenode -format

6.2 slave  节点DataNode  无法启动

我搭建了很多次,这个问题每次都出现,所以总结了一下:

① 防火墙没关  解决办法:你懂得

② 所有节点 hosts 链表不统一,或有错误解决办法:你懂得

③ 因为多次 format namenode 造成 namenode 和 datanode 的 clusterID 不一致

解决方法:

方法一:更改 slave Cluster ID 与 master 相同

修改每一个datanode上面的CID(位于dfs/data/current/VERSION文件夹中)使两者一

方法二:删除所有节点/data/hadoop/dfs/data/下 curren 目录 然后重新 start-dfs.sh

即可

6.3 datanode  无法启动

dataNode 无法启动是配置过程中最常见的问题,主要原因是多次 format

namenode 造成 namenode 和 datanode 的 clusterID 不一致。建议查看 datanode 上面

的 log 信 息 。 解 决 办 法 : 修 改 每 一 个 datanode 上 面 的 CID( 位 于

dfs/data/current/VERSION 文件夹中)使两者一致。

1. clusterID 不一致,namenode 的 cid 和 datanode 的 cid 不一致,导致的原因是

对 namenode 进行 format 的之后,datanode 不会进行 format,所以 datanode 里面的

cid 还是和 format 之前 namenode 的 cid 一样,解决办法是删除 datanode 里面的

dfs.datanode.data.dir 目录和 tmp 目录,然后再启动start-dfs.sh

2.即使删除 iptables 之后,仍然报Datanode denied communication with namenode:

DatanodeRegistration 错误,参考文章

http://stackoverflow.com/questions/17082789/cdh4-3exception-from-the-logs-after-s

tart-dfs-sh-datanode-and-namenode-star,可以知道需要把集群里面每个 host 对应的ip

写入/etc/hosts 文件就能解决问题。

7 常见命令

集群状态:http://192.168.100.10:8088

HDFS 状态:http://192.168.100.10:50070

查看集群状态:./bin/hdfs dfsadmin-report

查看文件块组成:./bin/hdfs fsck /-files -blocks

$sbin/hadoop-daemon.sh startnamenode # 启动 namenode

$sbin/hadoop-daemon.sh startdatanode # 启动 datanode

$sbin/yarn-daemon.sh startnodemanager #启动 nodemanager

$sbin/yarn-daemon.sh startresourcemanager # 启动resourcemanager

$sbin/yarn-daemon.shstartproxyserver #启动 web App proxy, 作用类似 jobtracker,

若 yarn-site.xml 里没有设置 yarn.web-proxy.address 的 host 和端口,或者设置了和

resourcemanager 相同的 host 和端口,则 hadoop 默认 proxyserver 和 resourcemanager 共享 host:port

$sbin/mr-jobhistory-daemon.shstart historyserver

安全模式是 hadoop 的一种保护机制,在启动时,最好是等待集群自动退出,然后进行文件操作。

1 0