hadoop第一章、
实验一Hadoop完全分布式安装部署
一、实验目的
通过对Hadoop分布式的安装,了解Hadoop集群的运行环境及环境配置,了解hdfs分布式系统的目录结构。
二、实验内容
1、安装JDK
2、SSH免密码登陆
3、局域网同步时间
4、安装hadoop集群
5、hadoop集群启动与验证
三、实验要求
1、人员组织
以小组为单元进行实验,每小组5人,小组自协商选一位组长,由组长安排和分配实验任务,具体参加实验内容中实验过程。
2、节点规划
共3台虚拟机,1台namenode,2台datanode
NN SNN DN
node1 Y
node2 Y Y
node3 Y
3、实验环境:
CentOS6.5
jdk-7u79-linux-x64.rpm
hadoop-2.5.2
四、准备知识
1、JDK
JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。
2、SSH
SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。
传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的, 就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。所谓“中间人”的攻击方式, 就是“中间人”冒充真正的服务器接收你传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。通过使用SSH,你可以把所有传输的数据进行加密,这样”中间人”这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、PoP、甚至为PPP提供一个安全的”通道” 。
3、Hadoop
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
3.1核心架构
Hadoop 由许多元素构成。其最底部是 Hadoop Distributed File System(HDFS),它存储 Hadoop 集群中所有存储节点上的文件。HDFS(对于本文)的上一层是MapReduce 引擎,该引擎由 JobTrackers 和 TaskTrackers 组成。通过对Hadoop分布式计算平台最核心的分布式文件系统HDFS、MapReduce处理过程,以及数据仓库工具Hive和分布式数据库Hbase的介绍,基本涵盖了Hadoop分布式平台的所有技术核心。
3.2 HDFS
对外部客户机而言,HDFS就像一个传统的分级文件系统。可以创建、删除、移动或重命名文件,等等。但是 HDFS 的架构是基于一组特定的节点构建的,这是由它自身的特点决定的。这些节点包括 NameNode(仅一个),它在 HDFS 内部提供元数据服务;DataNode,它为 HDFS 提供存储块。由于仅存在一个 NameNode,因此这是 HDFS 的一个缺点(单点失败)。
存储在 HDFS 中的文件被分成块,然后将这些块复制到多个计算机中(DataNode)。这与传统的 RAID 架构大不相同。块的大小(通常为 64MB)和复制的块数量在创建文件时由客户机决定。NameNode 可以控制所有文件操作。HDFS 内部的所有通信都基于标准的 TCP/IP 协议。
3.3、NameNode
NameNode 是一个通常在 HDFS 实例中的单独机器上运行的软件。它负责管理文件系统名称空间和控制外部客户机的访问。NameNode 决定是否将文件映射到 DataNode 上的复制块上。对于最常见的 3 个复制块,第一个复制块存储在同一机架的不同节点上,最后一个复制块存储在不同机架的某个节点上。注意,这里需要您了解集群架构。
实际的 I/O事务并没有经过 NameNode,只有表示 DataNode 和块的文件映射的元数据经过 NameNode。当外部客户机发送请求要求创建文件时,NameNode 会以块标识和该块的第一个副本的 DataNode IP 地址作为响应。这个 NameNode 还会通知其他将要接收该块的副本的 DataNode。
NameNode 在一个称为 FsImage 的文件中存储所有关于文件系统名称空间的信息。这个文件和一个包含所有事务的记录文件(这里是 EditLog)将存储在 NameNode 的本地文件系统上。FsImage 和 EditLog 文件也需要复制副本,以防文件损坏或 NameNode 系统丢失。
NameNode本身不可避免地具有SPOF(Single Point Of Failure)单点失效的风险,主备模式并不能解决这个问题,通过Hadoop Non-stop namenode才能实现100% uptime可用时间。
3.4 DataNode
DataNode 也是一个通常在 HDFS实例中的单独机器上运行的软件。Hadoop 集群包含一个 NameNode 和大量 DataNode。DataNode 通常以机架的形式组织,机架通过一个交换机将所有系统连接起来。Hadoop 的一个假设是:机架内部节点之间的传输速度快于机架间节点的传输速度。
DataNode 响应来自 HDFS 客户机的读写请求。它们还响应来自 NameNode 的创建、删除和复制块的命令。NameNode 依赖来自每个 DataNode 的定期心跳(heartbeat)消息。每条消息都包含一个块报告,NameNode 可以根据这个报告验证块映射和其他文件系统元数据。如果 DataNode 不能发送心跳消息,NameNode 将采取修复措施,重新复制在该节点上丢失的块。
3.5 MapReduce
MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念”Map(映射)”和”Reduce(归约)”,是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。
3.6 Hadoop特性
Hadoop是一个能够让用户轻松架构和使用的分布式计算平台。用户可以轻松地在Hadoop上开发和运行处理海量数据的应用程序。它主要有以下几个优点:
高可靠性。Hadoop按位存储和处理数据的能力值得人们信赖。
高扩展性。Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。
高效性。Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。
高容错性。Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。
低成本。与一体机、商用数据仓库以及QlikView、Yonghong Z-Suite等数据集市相比,hadoop是开源的,项目的软件成本因此会大大降低。
五、实验步骤
1、安装JDK
1.1 下载并传输JDK
从实验工具栏中下载jdk安装包jdk-7u79-linux-x64.rpm到本地,再下载FTP工具Xftp5.exe到本地安装,安装之后新建一个与虚拟机节点node1的连接,通过在node1中输入ifconfig查看IP,建立连接之后将jdk-7u79-linux-x64.rpm传输到node1系统中。
1.2 安装JDK
然后通过命令安装: rpm -ivh jdk-7u79-linux-x64.rpm
1.3配置jdk环境变量
(1).查看jdk安装后的目录rpm -ql jdk
(2).复制安装目录/usr/java/jdk1.7.0_79
(3).配置jdk的系统环境变量vi /etc/profile
将下面两句放到最后面。
export JAVA_HOME=/usr/java/jdk1.7.0_79
export PATH=
(4).使配置环境生效source /etc/profile
测试是否安装成功。
同理,需要在其他所有节点上安装。
2、 SSH免密码登陆
2.1先配置IP地址与主机名映射关系。
vi /etc/hosts
同理,在其他所有节点上配置。
2.2配置node1本机ssh免密码登录。
2.2.1 在node1上生成密钥文件,包括公钥和私钥。
ssh-keygen -t dsa -P ” -f ~/.ssh/id_dsa
执行上面命令后会在/root/.ssh/目录下面生成两个文件id_dsa和id_dsa.pub,id_dsa文件存放私钥,id_dsa.pub文件存放公钥。
需要将本机的公钥追加到authorized_keys中,这样允许本机通过ssh的形式免密码登录。
可以先测试一下免密码配置之前ssh node1,这里需要输入密码。
输入密码后相当于新打开了一个bash窗口登陆到node1,输入exit退出。
2.2.2 现将公钥追加到authorized_keys中。
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
重新登陆一下,可以看到不需要再输入密码了。
2.2.3将node1的公钥文件拷贝到node2。
scp /root/.ssh/id_dsa.pub root@node2:/root
2.2.4 在node2中创建.ssh目录,将拷贝的公钥内容追加到authorized_keys文件中,此时authorized_keys会自动创建。
cat /root/id_dsa.pub >> /root/.ssh/authorized_keys
至此,实现了node1到node2的免密码登陆,可以通过以下测试。
成功登陆到node2,不需要输入密码。
2.2.5 如果还是不行,可能是centos版本问题,还需要加下面这一步,分别在node1和node2上。
vi /etc/selinux/config
设置SELINUX=disabled
设置完后重启系统。
2.2.6同理设置node1登陆node3免密码以及node2登陆node1、node3免密码。node3登陆node1、node2免密码。
2.2.7最终效果
node1 node2 node3 节点上/root/.ssh/ authorized_keys文件内容。
3、局域网同步时间
3.1首先需要在所有节点上安装ntp服务
yum –y install ntp
同时在其他节点上安装
3.2修改node1服务器上的/etc/ntp.conf,加上以下的配置:
server 127.127.1.0
fudge 127.127.1.0 stratum 10
后面那个数字在0-15之间都可以,这样就将node1的本地时间作为ntp服务提供给其他节点。
3.3重启node1的ntpd
service ntpd restart
这里显示是正常的,failed是因为没有开启
3.4关闭所有节点防火墙并关闭随系统自启动
node1上执行service iptables stop
并且关闭随系统自启动
chkconfig iptables off
可以通过命令查看 chkconfig
同理,在其他节点上设置。
3.5保证除node1节点所有节点的ntpd服务是关闭的。
service ntpd stop
如果本身没开启,将显示为failed,可以先开启,再停止。
同理,关闭其他节点(node1除外)。
3.6 其他所有节点同步node1的本地时间。
ntpdate + node1的IP
同理,设置其他节点的时间与node1保持同步。
4、安装hadoop集群
安排两个人操作,一个人操作步骤1—4,然后另一个人操作步骤5—9将压缩包通过Xftp工具上传至node1的/usr/目录下。
4.1进入usr目录,解压hadoop-2.5.1_x64.tar.gz
cd /usr
tar –zxvf hadoop-2.5.1_x64.tar.gz
重命名文件夹:mv hadoop-2.5.2 hadoop
4.2配置hadoop的java环境
编辑文件: vi /usr/hadoop/etc/hadoop/hadoop-env.sh
将{JAVA_HOME}改成实际的java目录。
4.3配置core-site.xml文件
vi /usr/hadoop/etc/hadoop/core-site.xml
fs.defaultFS
hdfs://node1:9000
hadoop.tmp.dir
/usr/hadoop/tmp
在/usr/hadoop目录下新建一个tmp目录用于存放Hadoop文件
4.4配置hdfs-site.xml文件
vi /usr/hadoop/etc/hadoop/hdfs-site.xml
dfs.namenode.secondary.http-address
node2:50090
dfs.namenode.secondary.https-address
node2:50091
4.5配置datanode
进入/usr/hadoop/etc/hadoop目录
cd /usr/hadoop/etc/hadoop/
vi slaves
node2
node3
4.6在相同目录/usr/hadoop/etc/hadoop/下新建文件masters,并输入node1。
vi masters
node1
4.7 修改各节点主机名使其与hadoop节点名称一致。
node1(192.168.81.131)节点:
node2(192.168.81.132)节点:
node3(192.168.81.133)节点:
vi /etc/sysconfig/network
将HOSTNAME修改为node1
4.8删除/usr/hadoop/share下的doc
rm -rf /usr/hadoop/share/doc/
4.9拷贝haddoop整个目录到其他节点
scp -r /usr/hadoop root@node2:/usr/
scp -r /usr/hadoop root@node3:/usr/
4.10格式化namenode
4.10.1首先配置hadoop环境变量bin和sbin
vi /etc/profile
export HADOOP_HOME=/usr/hadoop/
export PATH=
4.10.2保存后使生效:source /etc/profile
4.10.3格式化:hdfs namenode -format
4.10.4格式化后会在配置的目录(/opt/hadoop)下生成fsimage文件
5、hadoop集群启动与验证
5.1.在node1上启动hdfs
start-dfs.sh
查看进程 jps
node1:
5.2.配置windows系统节点与IP映射C:\Windows\System32\drivers\etc\hosts文件。
5.3.浏览器访问http://node1:50070 或http://192.168.81.131:50070
看到这个界面表示hadoop安装成功并启动正常。
5.4.查看datanode节点
5.5查看hdfs文件目录
5.6通过命令上传文件
hdfs dfs -mkdir /usr
hdfs dfs -put /root/jdk-7u79-linux-x64.rpm /usr/
六、总结
本次实验通过对Hadoop分布式的安装操作,首先了解Hadoop集群的运行环境及环境配置,了解hdfs分布式系统的目录结构和基本操作。