资源描述
资料内容仅供您学习参考,如有不当之处,请联系改正或者删除。
Hadoop云计算平台搭建方案
一、 平台搭建概述
1.1总体思路
针对于电网企业在营销服务领域展开的大数据分析处理, 搭建Hadoop云计算平台进行海量数据存储, 并作深层次加工、 处理, 挖掘出无法简单直观便可得到的新的模式, 为电力企业的决策提供指导。平台采用Hadoop-2.2.0作为海量数据存储和分析工具, 将其部署在4个物理计算机节点上, 搭建Hadoop集群, 其中1个节点作为master节点, 其余3个作为slave节点。为了获取更好的稳定性, 平台搭建在Linux系统( ubuntu-14.04-desktop-i386) 环境下。
1.2软件列表
软件
描述
版本
VMware Workstation
虚拟化软件
VMware Workstation 10.0.2.46408
Ubuntu
Linux操作系统
ubuntu-14.04-desktop-i386
JDK
Java的软件开发工具包
jdkl.8.0_20
Hadoop
开源的云计算基础框架
Hadoop-2.2.0
HBase
分布式数据存储系统
Hbase-0.96.2
Zookeeper
Hadoop可靠协调系统
Zookeeper-3.4.5
Sqoop
数据迁移工具
Sqoop-1.99.3
1.3平台搭建总流程和节点信息一览表
在平台搭建前, 给出实现的总流程图和节点信息一览表, 从而对平台搭建过程和各节点信息有一个全局的认识, 平台搭建总流程如下图所示。
创立虚拟机master, 完成JDK、 Hadoop等应用的安装和配置
对虚拟机master进行克隆, 得到的虚拟机分别作为slave1、 slave2和slave3
完成Zookeeper、 HBase等其它分布式服务的部署, 搭建Hadoop集群
运行并测试Hadoop集群系统
各节点信息如下表所示:
机器名
IP地址
用户名
充当角色
master
172.19.17.102
hadoop
JobTracker、 Namenode
slave1
172.19.17.104
hadoop
TaskTracker、 Datanode
slave2
172.19.17.105
hadoop
TaskTracker、 Datanode
slave3
172.19.17.106
hadoop
TaskTracker、 Datanode
二、 基础平台的搭建步骤
此次大数据存储和处理平台的搭建, 需要4台物理节点来部署Hadoop平台环境。我们使用虚拟机软件VMware Workstation创立4台虚拟机, 承载平台搭建工作。另外, 由于对4台虚拟机的配置大部分是相同的, 因此利用VMware Workstation的克隆功能, 能够减少部署的工作量。
2.1安装虚拟机软件VMware Workstation
首先在4台PC机器上均安装虚拟化软件VMware Workstation, 并输入相应的序列号。
2.2在master节点上安装Linux系统Ubuntu
在设定为master PC节点上首先安装Linux系统( 版本为ubuntu-11.04-desktop-i386) , 在安装过程中为提高后期安装软件的兼容性和稳定性, 在系统语言上选择英语。创立用户名为”hadoop”的普通用户, 设置统一的密码。安装完成后将系统的terminal命令窗口调出来, 以便使用。
同时, 为实现虚拟机的Ubuntu系统与本机的Windows系统之间方便快捷的文字复制粘贴以及物理主机系统与虚拟机系统相互拖放文件进行共享, 需要安装VMare Tools工具, 具体操作如下:
启动虚拟机, 进入Ubuntu系统, 在VM菜单栏”虚拟机(M)”的下拉菜单点击”安装VMare Tools(T)”后, 会弹出一个”VMare Tools”文件夹, 里面包含VMare Tools的安装包VMwareTools-9.6.2-1688356.tar.gz, 将该安装包拷贝到/home/hadoop目录下, 输入命令进行解压安装: tar xzvf VMwareTools-9.6.2-1688356.tar.gz
此时在/home/hadoop/目录下产生vmware-tools-distrib文件夹, 进入该目录, 经过在terminal终端输入相应命令, 运行vmware-install.pl脚本:
cd /home/hadoop/vmware-tools-distrib //进入目录
sudo ./ vmware-install.pl //执行vmware-install.pl脚本
按提示多次”回车”直至显示安装成功的信息, 再重启系统即可。
在完成上述操作后, 为保障Hadoop集群各节点之间的无障碍通信, 需关闭系统防火墙。在重启系统后, 在terminal终端输入命令: sudo ufw disable
当显示”Firewall stopped and disable on system startup”时表示防火墙已关闭, 若后续服务部署过程中机器重启无法实现节点之间的相互通信, 可尝试检查防火墙是否关闭。
2.3 master节点的JDK安装与配置
由于Hadoop底层实现是用JAVA语言编写的, 因此它的运行离不开JAVA运行环境( JRE) 的支持, 这就需要JDK。JDK有多个更新版本, 安装过程大致相同, 这里选择安装最近更新的版本jdkl.8.0_20。先将安装文件jdk-8u20-linux-i586.gz拷贝到master节点的目录/home/hadoop/下, 在终端输入命令: tar xzvf jdk-8u20-linux-i586.gz
进行解压安装, 此时会产生文件夹”jdk1.8.0_20”, 所得的JDK安装路径为”/home/hadoop/jdk1.8.0_20”。安装结束后打开/etc/profile文件, 配置JDK的class path: 在terminal终端键入命令: sudo gedit /etc/profile打开profile文件, 在文件末尾加上以下语句:
#set java environment
export JAVA_HOME=/home/hadoop/jdk1.8.0_20
export JRE_HOME=/home/hadoop/jdk1.8.0_20/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH // /home/hadoop/是hadoop文件夹所在路径, 不可照抄, 要以实际路径为准
保存之后, 在terminal终端输入命令: source /etc/profile使其生效。并键入命令java –version查看是否配置成功, 若出现如下信息, 则表示java环境变量配置成功。
java version "1.8.0_20"
Java(TM) SE Runtime Environment (build 1.8.0_20-b26)
Java HotSpot(TM) Client VM (build 25.20-b23, mixed mode)
注: 以上灰色背景标注的文字表示的Linux命令, 红色字体颜色标注的文本表示的需要写入的Hadoop环境配置文件中的信息, 绿色字体颜色标注的小5号文本表示注释, 下同
2.4 master节点的hadoop安装与配置
Hadoop的安装是Hadoop平台搭建的关键步骤, 将从下载的安装包hadoop-2.2.0.tar.gz拷贝到master节点目录/home/hadoop/下, 进行解压安装, 输入命令: tar xzvf hadoop-2.2.0.tar.gz
安装完成后配置环境变量: 在系统文件/etc/profile以及Hadoop的安装目录/home/hadoop/hadoop-2.2.0文件夹下的多个文件添加相应的配置信息。
2.4.1 添加环境变量
打开/etc/profile文件, 在terminal终端键入命令: sudo gedit /etc/profile调出profile文件, 在文件末尾加上:
# set hadoop environment
export HADOOP_HOME=/home/hadoop/hadoop-2.2.0
export PATH=$HADOOP_HOME/bin:$PATH
export PATH=$HADOOP_HOME/sbin:$PATH
然后保存, 在终端键入命令source /etc/profile使其生效。
异常处理1:
问题: 保存添加的环境变量并使其生效后, terminal可能会出现如下警告:
(gedit:2949): Gtk-WARNING **: Attempting to set the permissions of `/root/.local/share/recently-used.xbel', but failed: No such file or directory
(gedit:2949): Gtk-WARNING **: Attempting to store changes into `/root/.local/share/recently-used.xbel', but failed: Failed to create file '/root/.local/share/recently-used.xbel.MN6R3V': No such file or directory
(gedit:2949): Gtk-WARNING **: Attempting to set the permissions of `/root/.local/share/recently-used.xbel', but failed: No such file or directory
解决方法: 只需直接在终端中输入命令: sudo mkdir -p /root/.local/share/ , 创立警告信息中所提示的目录即可。
若无视警告重启ubuntu后将会出现以下情况: 输入密码无法进入系统, 一直处于输入密码后又跳转回输入密码的界面。此时的解决方法是: 在输入密码界面同时按下alt+ctrl+F2进入ubuntu命令模式, 并使用root用户及对应密码登陆系统, 然后键入: /usr/bin/vi /etc/profile打开etc/profile文件, 找到最近在末尾加上的hadoop配置文件, 按delete键删除这些行, 然后键入命令:wq! ( 注意此处有冒号, 不可省略) 保存文件。然后同时按下ctrl+alt+del重启系统即可使系统恢复正常登陆, 然后按照上述方法重新配置。
2.4.2 目录设置
在普通用户hadoop下创立hadoop的数据存储目录( 若使用root用户创立上述文件夹则会因权限问题导致无法向这些文件夹中写入并读取数据) , 可自行选择数据存储的路径, 我们选择在/home/hadoop/文件夹下创立dfs和tmp作为数据存储与交换的目录, 并在dfs文件夹下创立name和data两个子文件夹。分别执行命令:
mkdir /home/hadoop/dfs/name //创立/home/hadoop/下dfs的子文件夹name
mkdir /home/hadoop/dfs/data //创立/home/hadoop/下dfs的子文件夹data
mkdir /home/hadoop/tmp //创立/home/hadoop/tmp
2.4.3 /home/hadoop/hadoop-2.2.0/etc/hadoop下配置文件的修改
接下来在/home/hadoop/hadoop-2.2.0/etc/hadoop目录下需要修改以下文件的内容: 在slaves文件下分别写入三个slave节点的名称, 完成节点信息配置, 并分别经过对hadoop-env.sh、 core-site.xml、 hdfs-site.xml、 mapred-site.xml、 yarn-site.xml、 yarn-env.sh等文件分别进行Hadoop核心文件配置、 HDFS配置、 Mapreduce配置和Yarn配置。对/home/hadoop/hadoop-2.2.0/etc/hadoop文件夹下的几个文件做一定的修改, 配置每个文件时先单击文件右键, 选择”open with text editor”方式打开, 按照以下方式修改, 需要配置的文件如下:
( 1) 配置hadoop-env.sh文件, 打开该文件, 检索 ”#export JAVA_HOME=${JAVA_HOME}”文本, 在该语句的下一行添加:
export JAVA_HOME=/home/hadoop/jdk1.8.0_20
这样配置的目的是为Hadoop的守护进程设置环境变量, 让Hadoop能够获取到JDK服务的支持。
( 2) 配置slaves文件, 打开该文件, 将其内容修改为slave1、 slave2、 slave3。
文件名
打开后, 将其内容修改为:
slaves
slave1
slave2
slave3
( 3) 配置core-site.xml文件, 打开该文件, 在文件末尾添加以下语句。
文件名
打开文件后, 在其末尾添加语句:
core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://172.19.17.102:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property> <name>hadoop.proxyuser.tan.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.tan.groups</name>
<value>*</value>
</property>
</configuration>
( 4) 配置hdfs-site.xml文件, 打开该文件, 在文件末尾添加以下语句。
文件名
打开文件后, 在其末尾添加语句:
hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>172.19.17.102:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>4</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
注意: 需要在hdfs-site.xml中配置dfs.replication属性时, dfs.replication属性指定HDFS中文件块复制的份数, 其默认值为3, 当datanode节点少于3台便会报错。在一般情况下, 当其属性值为3的时候, HDFS的部署策略是在本地机柜中一个节点放置一个备份, 在本地机柜的不同结点再放置一个备份, 然后再在另一个机柜中的一个结点放置一个备份 。
( 5) 配置mapred-site.xml文件。事实上在进行配置之前, mapred-site.xml文件默认并不存在, 需要首先将该目录下的mapred-site.xml.template文件进行复制, 并重命名为mapred-site.xml, 接下来打开mapred-site.xml, 添加以下语句。
文件名
打开文件后, 在其末尾添加语句:
mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>172.19.17.102:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>172.19.17.102:19888</value>
</property>
</configuration>
( 6) 配置yarn-site.xml文件, 打开该文件, 在文件末尾添加以下语句。
文件名
打开文件后, 在其末尾添加语句:
yarn-site.xml
</configuration>
<!-- Site specific YARN configuration properties -->
<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>172.19.17.102:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>172.19.17.102:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>172.19.17.102:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>172.19.17.102:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>172.19.17.102:8088</value>
</property>
</configuration>
( 7) 配置yarn-env.sh文件, 打开该文件, 检索”# export JAVA_HOME=/home/y/libexec/jdk1.6.0/”语句, 在该语句下一行添加:
export JAVA_HOME=/home/hadoop/jdk1.8.0_20
经过对上述文件的修改, 完成对Hadoop的配置。事实上, 配置过程并不复杂, 一般而言, 除了规定的端口、 IP地址、 文件的存储位置外, 其它配置都不是必须修改的, 能够根据需要决定是采用默认配置还是自行修改。还有一点需要注意的是以上配置都被默认为最终参数, 这些参数都不能够在程序中被再次修改。
2.5 Hadoop集群的部署与各节点的通信
2.5.1 安装SSH服务
经过建立SSH无密码互访, 能够实现Hadoop虚拟机群之间的无密码登录互访。在安装SSH服务之前, 首先需要更新软件源, 并保证每台机器上都安装了SSH服务器, 且都能正常启动。
更新软件源命令为: sudo apt-get update
软件源更新完毕后, 在terminal输入如下命令开始安装openssh-server:
sudo apt-get install openssh-server
输入如下命令, 检查openssh-server是否成功安装:
which ssh
如显示/usr/bin/ssh表示ssh安装成功
which sshd
如显示/usr/bin/sshd表示sshd安装成功
如果以上二者都成功显示, 表示open-server安装成功
2.5.2 克隆虚拟机作为Slave节点
将上面配置好的虚拟机作为master, 关闭作为master的ubuntu系统, 然后修改虚拟机的网络连接设置, 改为”桥接模式”, 即在master虚拟机主界面点击”虚拟机—设置—硬件—网络适配器”, 在弹出的对话的”网络连接”项目下选择”桥接模式(B)”此举的目的在于使主节点和各从节点都能连上网络, 从而使各台机器之间能够互访。
接下来对master进行克隆, 得到slave1、 slave2、 slave3的雏形, 即点击VM菜单下的”虚拟机—管理—克隆”, 进入克隆虚拟机的向导界面, 根据向导提示, 在”克隆类型”引导界面选择”创立完整克隆”, 具体设置如下图所示:
然后输入被克隆的虚拟机名称, 先暂输入slave1, 点击确认进行克隆, 将克隆好的系统复制到除master之外的三台PC节点上, 用虚拟机VMware识别并将其启动, 并在虚拟机启动界面点击”虚拟机—设置—选项—常规”设置中, 分别修改虚拟机名称为slave1、 slave2和 slave3, 如下图所示。
2.5.3 设置IP地址
在Hadoop平台上, 各个节点之间的互访是基于TCP/IP协议的, 因此要为各个节点分配IP地址。在四个PC节点上, 点击桌面右上角从左到右的第一个数据连接图标
在下拉菜单中选择最后一项”Edit Connections…”
在弹出的”Network Connections”框中选择”Edit…”, 显示”Editing Ethernet connection1”框, 点击”IPv4Settings”将弹出的Method选择框设置为Manual, 然后添加IP地址。
添加同一网关内的IP地址、 子网掩码、 默认网关, 目的是让各个节点机器能够互访。需要注意的是在设置IP地址时, 需要首先在DNS servers输入相应的IP地址, 否则无法填写”Addresses”项内容。
因此, 我们将DNS服务器( DNS servers) 地址设置为: 202.96.128.166, 接下来将master节点的IP地址( Address) 设置为: 172.19.17.102, 子网掩码(Netmask)设置为: 255.255.255.0, 默认网关( Gateway) 设置为: 172.19.17.1。
用同样的方法, 将虚拟机salve1的IP地址设置为: 202.96.128.166( DNS服务器) ; 172.19.17.104( IP地址) ; 255.255.255.0( 子网掩码) ; 172.19.17.1( 网关) , 将slave2的IP地址设置为: 202.96.128.166( DNS服务器) ; 172.19.17.105( IP地址) ; 255.255.255.0( 子网掩码) ; 172.19.17.1( 网关) , 将slave3的IP地址设置为: 202.96.128.166( DNS服务器) ; 172.19.17.106( IP地址) ; 255.255.255.0( 子网掩码) ; 172.19.17.1( 网关) 。
2.5.4 修改机器名
经过克隆得到的ubuntu系统有相同的机器名, 因此要修改加载在各虚拟机中的系统名称, 来区分不同的节点, 以便后期操作。
在master机器上打开etc/hostname文件, 命令为:
sudo gedit /etc/hostname
将etc/hostname文件内容修改为master
用同样的方法分别在刚刚克隆得到的slave1、 slave2和slave3上, 修改其机器名:
将slave1的机器名修改为slave1
将slave2的机器名修改为slave2
将slave3的机器名修改为slave3
2.5.5修改hosts文件
经过修改hosts文件能够实现机器名和IP地址之间的映射, 在master节点上, 打开文件/etc/hosts, 命令为:
sudo gedit /etc/hosts
将/etc/hosts文件修改为
172.19.17.102 master
172.19.17.104 slave1
172.19.17.105 slave2
172.19.17.106 slave3
用同样的方法, 在slave1、 slave2和slave3机器上修改如上hosts文件, 映射配置与master一致。配置完成后重启master和slave1、 slave2和slave3使其生效。
2.5.6 建立SSH无密码互访
经过建立SSH无密码互访, 能够实现Hadoop虚拟机集群之间的无密码登陆互访。首先在4台机器上均生成秘钥对, 并将slave1、 slave2和slave3分别所生成的公钥id_rsa.pub进行重命名后发送到master机器上, 由master将自身所生成的公钥与其它三台slave节点发送过来的公钥合并到一个文件中, 重新分发给三台slave节点。对于不同的机器执行对应的操作如下:
( 1) master生成密钥对
ssh-keygen -t rsa // 按提示直接回车
此时, 在目录/home/hadoop/.ssh/(隐藏的文件夹)下生成两个文件id_rsa 和 id_rsa.pub
( 2) slave1生成密钥对, 重命名公钥, 并将其发送到maser
在终端terminal输入如下命令:
ssh-keygen -t rsa // 按提示直接回车
在目录/home/hadoop/.ssh/(隐藏的文件夹)下生成两个文件id_rsa 和 id_rsa.pub, 并重命名公钥 id_rsa.pub为id_rsa_slave1.pub, 执行命令:
scp ~/.ssh/id_rsa_slave1.pub
将重命名后的文件都复制到master机, 命令如下:
scp ~/.ssh/id_rsa_slave1.pub hadoop@master:/home/hadoop/.ssh/
( 3) slave2生成密钥对, 重命名公钥, 并将其发送到maser
slave2执行与slave1类似的命令:
ssh-keygen -t rsa // 按提示直接回车
mv id_rsa.pub id_rsa_slave2.pub
scp ~/.ssh/id_rsa_slave2.pub hadoop@master:/home/hadoop/.ssh/
( 4) slave3生成密钥对, 重命名公钥, 并将其发送到maser
slave3也执行与slave1类似的操作:
ssh-keygen -t rsa // 按提示直接回车
mv id_rsa.pub id_rsa_slave3.pub
scp ~/.ssh/id_rsa_slave3.pub hadoop@master:/home/hadoop/.ssh/
( 5) master合并公钥, 重新分发给各slave节点
在master机器的/home/hadoop/.ssh/文件夹中重命名秘钥文件, 命令如下:
mv id_rsa.pub authorized_keys
然后把每台slave机器发过来的文件合并到authorized_keys, 命令如下:
cat id_rsa_slave1.pub >> authorized_keys
cat id_rsa_slave2.pub >> authorized_keys
cat id_rsa_slave3.pub >> authorized_keys
最后把合成的authorized_keys发给每台slave机器:
scp authorized_keys hadoop@slave1:/home/hadoop/.ssh/authorized_keys
scp authorized_keys hadoop@slave2:/home/hadoop/.ssh/authorized_keys
scp authorized_keys hadoop@slave3:/home/hadoop/.ssh/authorized_keys
( 6) 节点间无密码互访测试
在任意机器上输入命令访问另一台机器, 命令如下:
ssh slave1
如果返回 ”Agent admitted failure to sign using the key”, 不能连接到slave1, 此时可输入命令:
ssh-agent
使ssh-agent处于运行状态。再将id_rsa添加到ssh-agent中, 命令为:
ssh-add id_rsa
2.6启动Hadoop
2.6.1 启动HDFS
( 1) 初始化namenode
在运行Hadoop平台之前, 要在master上格式化文件系统, 建立HDFS。切换至hadoop用户, 进入/home/hadoop/hadoop-2.2.0/bin, 初始化Namenode, 执行命令如下:
cd /home/hadoop/hadoop-2.2.0/bin
hdfs namenode –format // 初始化namenode
格式化会产生多条信息, 其中倒数第三行如果出现:
……. Storage directory /home/hadoop/hdfs/name has been successfully formatted, 则说明格式化HDFS成功, 初始化完成之后会自动的在/home/hdoop/hadoop-2.2.0/创立dfs/name/目录。
( 2) 测试启动HDFS
在hadoop用户下, 启动namenode, 执行命令: hadoop-daemon.sh start namenode; 启动datanode, 执行命令: hadoop-daemon.sh start datanode。当namenode与datanode均启动之后, 可使用jps命令查看进程, 命令如下:
jps
当同时看到下列进程时, 标明hadoop正常运行:
3588 NameNode
3692 DataNode
3757 Jps
如上述进程启动过程正常, 则可启动HFS。在hadoop用户下, 切换至/home/hadoop/hadoop-2.2.0/sbin目录下, 执行命令:
cd /home/hadoop/hadoop-2.2.0/sbin
执行脚本./start-dfs.sh, 启动HDFS
在上述目录下执行脚本文件start-dfs.sh, 命令为: ./start-dfs.sh, 使用jps命令查看进程, 终端显示:
4177 SecondaryNameNode
3588 NameNode
3692 DataNode
4285 Jps
其中master产生SecondaryNameNode和NameNode进程, slave节点产生DataNode进程。
2.6.2 启动YARN
在hadoop用户下, 切换至/home/hadoop/hadoop-2.2.0/sbin目录下, 执行命令:
cd /home/hadoop/hadoop-2.2.0/sbin
执行脚本./start-yarn.sh, 启动YARN
在terminal终端输入命令: ./start-yarn.sh, 执行脚本文件start-yarn.sh, 使用jps命令查看master节点进程时, 终端显示:
4177 SecondaryNameNode
4660 Jps
3588 NameNode
4411 ResourceManager
3692 DataNode
其中master产生ResourceManager、 NameNode和SecondaryNameNode进程, 同时输入jps命令在slave节点进行进程查看时终端
展开阅读全文