hadoop从入门到精通第一节Hadoop完全分布式安装部署

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是开源的,项目的软件成本因此会大大降低。

扫描二维码关注公众号,回复: 8681895 查看本文章

五、实验步骤
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= PATH: JAVA_HOME/bin
这里写图片描述
(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= PATH: HADOOP_HOME/bin:$HADOOP_HOME/sbin
这里写图片描述
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:50070http://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分布式系统的目录结构和基本操作。

发布了13 篇原创文章 · 获赞 19 · 访问量 4387

猜你喜欢

转载自blog.csdn.net/gaowei15750194853/article/details/78633121