网上有很多hadoop的的教程。最近学到分布式搭建,就动手实践。(第一次做博客文章,不足之处望多多指教。)小编主要是根据课堂上老师讲授和查阅 linux公社网站、虾客博客。
环境搭建:
在VMware上搭建了Cenos7两个结点,分别用来做Master结点和Chunk存储结点。
| namenode1 | Master | 192.168.80.101/24 192.168.80.1 |
| datanode1 | 存储数据结点 | 192.168.80.102/24 192.168.80.1 |
利用工具:
1.VMware 下载安装--linux公社。
2.Centos7。CentOS-7-i386-DVD-1503.iso
3.使用xShell操作linux。
4.jdk-8u65-linux-i586.tar.gz
5.hadoop1.2.0
VMware虚拟机环境的工具。在CentOS系统的搭建过程中,可以先搭建起来一个平台,然后利用VMware的克隆技术,建立一个link版本,就可以方便的实现两个结点。
Centos7是新的linux distribution发布版本,在操作命令上会有很多不同。后面会有介绍。
xShell软件,是可以在windows平台下非常方便的操作linux。可以复制命令,从本地上传文件下载文件。尤其是操作多个虚拟机的时候很方便。前提是没有使用linux系统的桌面系统,只是使用命令行的方式。
jdk可以在官网上下载,选择这种解压的版本。
hadoop-1.2.1.tar.gz 也是在官网上下载。当时没有找到2.X的,就是用这个了。
声明:小编上面使用的虚拟机环境、jdk、hadoop都是在32系统上的。另外,不同的hadoop版本,在搭建的操作上会有所不同,可以在网上参考相应的版本部署方案,过程差不多,灵活灵用呗。
------------------------------------------正题--------------------------------------------
第一部分:搭建CentOS7系统。
在网上下载CentOS系统、VMware、XShell软件。安装搭建过程,可以参考 linux公社 网站的教程。
在安装的过程中,创建用户 boy 密码boy。也可以使用创建的命令 adduser(Ubunto)或useradd(通用)。
使用xshell要确保 虚拟主机关闭防火墙,开启SSHD服务,并且ip地址配置正确,本地主机可以在host-only模式下ping通。
第二部分:搭建CentOS网络。
使用VMware软件设置Centos的网络方式,本文试验中采用Host-only方式。虚拟机的网卡是VMnet1,192.168.80段的。
host-only方式,是把本机作为转换器,多个虚拟机可以搭建起来一个环境。虚拟机与虚拟机之间、虚拟机与本地主机之间可以建立连接。
----------------
关闭防火墙:
在Centos7中防火墙跟之前不一样。
systemctl disable firewalld.service #禁止firewall开机启动
firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)
----------------
启用/禁用sshd服务
systemctl enable sshd.service 【systemctl disable sshd.service 禁用sshd服务】
----------------
打开虚拟机开始设置虚拟机的网卡:
1.找到网卡位置:/etc/sysconfig/network-scripts/ifcfg-eno* 。如果没有看到这个文件,证明虚拟机没有正确安装或者是VMWare兼容的问题。可以尝试:
解决 没有网卡问题,是由于虚拟机不兼容的问题。在虚拟机文件*vmx
ethernet0.virtualDev = "e1000"
可以在网上搜索这个问题。虚拟机文件指的是 再用VMWare展开虚拟机的时候安装的位置。修改这个配置文件,修改里面的这个参数。
2.编辑网卡:
修改/etc/sysconfig/network-scripts/ifcfg-eno*,这个网卡文件。
vi /etc/sysconfig/network-scripts/ifcfg-eno* (在不同的目录下,路径不同。后面介绍有具体的命令解释)
#网卡地址mac地址。这个不固定,需要在VMware中查看。一定要对应正确。在克隆结点的时候就需要更改这个Mac地址。(具体的对应查看网上的介绍,里面的参数有些不是 固定死的,要灵活使用,有些是多余的)
HWADDR=00:50:56:23:51:39 #Mac地址
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
IPV4_FAILURE_TATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEEROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eno16777736
ONBOOT=yes
IPADDR0=192.168.80.101#IP
PREFIX0=24 #网络地址位数
GATEWAY0=192.168.80.1 #网关
:wq! # ESC键 保存退出
service network restart #重启网络 (root权限 sudo)如果失败 请查看网卡信息是否与VMware中分配的正确一致,还有上面内容是否填写错误。
(在这里可以看到shell的强大之处,上面文本 都可以通过xshell复制粘贴过去。)
ping 192.168.80.1#测试网络是否正常 链接网关
ip addr #查看IP地址
-----------------
修改主机名称:
1.键入命令 hostname namenode1(可以是其他名称,但是一定要区分开datanode)
2. 修改配置文件
vi /etc/hostname #编辑配置文件
namenode1 #修改localhost.localdomain为namenode1
:wq! #保存退出
3.修改配置文件,
# 例子:127.0.0.1 localhost www #修改localhost.localdomain为www
192.168.80.101 namenode1
192.168.80.102 datanode1
127.0.0.1 localhost #本机
:wq! #保存退出
shutdown -r now #重启系统
查看防火前是否关闭,IP地址是否正确,是否ping通网关
第三部分:搭建Java
--------解压jdk
需要使用xshell的上传,在xshell界面中找到 新建文件传输,打开sftp窗口。
在/home/boy/目录中创建 Java文件夹
mkdir java
在Java目录中 键入命令put 就会打开本地软件,将本地的jdk 传到Java文件夹中(利用相似的方法,把hadoop文件上传到hadoop中)
tar zxvf jdk-8u60-linux-x64.tar.gz #(linux中可以使用 键入一部分文件名称或命令 然后按 Tab键 可以补全相应的命令或名称)。
--------配置jdk
1.执行命令 sudo vi /etc/profile 编辑profile文件
2.在/etc/profile底部加入如下内容:
export JAVA_HOME=/home/boy/java/jdk1.6.0_14
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
#注意路径是跟自己解压位置一致,不是固定的额
source profile #更新文件
第四部分:配置SSH加密验证
(下面只是小编个人的通俗看法,专业解释请查看相应文档)
私钥加密原理:首先拥有者有一个私钥,它发布给接收方一个公钥。然后它的加密信息,接收方可以通过 公钥解密。当然接收方不一定是一个。
数字签名:签名方 自己的公钥给需要验证的另一方,然后每次访问链接另一方的时候,发送信息摘要加密信息和摘要原文,然后接收方通过 公钥解密信息一致即可断定是签名方的请求。
证书:就是上面提到的 信息摘要的加密和信息摘要原文。接收方拥有签名的证书,就证明可以识别该用户。同意该用户的链接操作。
在这里的解释是:例如节点 node1拥有私钥private-key和公钥public-key,它把public-key给其他结点,那么每次当它访问其它结点的时候,其他节点就可以通过公钥识别出node1,可以实现无密码访问。因此在这里 namenode1要想无密码访问datanode1,它需要把公钥给datanode1,同样 datanode1要访问namenode1就需要以同样的方式发送自己的公钥给namenode1。具体下面:
首先确定 当前的用户 boy拥有管理员权限。(没有配置好 请参考前面或后面命令解释)
1.确认本机sshd的配置文件 /etc/ssh/sshd_config
2.修改配置文件 vi /etc/ssh/sshd_config
找到以下内容,并去掉注释符"#"
RSAAuthentication yes #
PubkeyAuthentication yes #
AuthorizedKeysFile .ssh/authorized_keys#
3.重启服务 service sshd restart
4. 执行测试命令
$ ssh localhost
回车会提示你输入密码,因为此时我们还没有生成证书
5.ssh-keygen -t rsa(如果这里不是管理员权限,那么这里命令不起作用)
遇到所有选项 回车默认值即可
结果:
Your identification has been saved in /home/boy/.ssh/id_rsa. #私钥
Your public key has been saved in /home/boy/.ssh/id_rsa.pub. #公钥证书
6.首先为了实现本机的验证,需要把证书复制到本地相应位置 ~/.ssh/***
cat ~/.ssh/id_rsa.pub>>~/.ssh/authorized_keys
然后查看是否可以自动登录
ssh localhost 测试----
如果出现上述问题 解决:见文档
.ssh目录的访问权限是否为“700”;authorized_keys文件的权限,可以修改为600或644都可
chmod 700 .ssh
chkmod 600 authorized_keys
在这里很容易出错,如果实在不理解或者出错,请删除相应文件,然后再重新执行命令。可以通过查看文件authorized_keys的权限和.shh的文件夹权限查看。
使用 dir -la
读写权限对应的数字关系参考后面。
在这部分 如果ssh 本机 通过无密码,才算达到目标。
第五部分:克隆不同的主机
利用VMware软件特性,克隆出另一个节点 datanode1。当然这一步可以放到hadoop平台搭建完成后,由于小编克隆早了,就这样解释了。
克隆出另一个结点后需要修改网卡地址,ip地址,主机名称,当然包括 ssh验证。
修改网卡地址,需要VMware软件在打开虚拟系统的时候 选择网络设置里面 生成一个新的网卡,然后修改虚拟系统的网卡地址,上面有介绍。下面直接介绍SSH验证。
参考第四部分,重新操作,把当前的datanode1 可以无密码访问本地
然后 xshell里面 文件传输窗口打开,利用复制命令 把namenode1的证书写入到datanode1相应文件中,同时datanode1的证书写入到namenode1里面。
-------datanode1中
scp ~/.ssh/id_rsa.pub boy@192.168.80.101:/home/boy/.ssh/authorized_keys
-----namenode1中
scp ~/.ssh/id_rsa.pub boy@192.168.80.102:/home/boy/.ssh/authorized_keys
测试 ssh 192.168.80.102(不同的ip)
目标实现上面的测试,namenode1可以无密码访问datanode1.
-----------------------------------------------------
在上面的过程中,可以在不同结点的 /.ssh/authorized_keys 文件打开,可以看到对应的 公钥加密数据
cat authorized_keys
---内容------
ssh-rsa ******* boy@datanode1
ssh-rsa ******* boy@namenode1
-----------------------------------------------------
第六部分:解压配置hadoop
其实上 该部分才是hadoop的搭建过程,上面所有操作都是基础的环境搭建。
----------解压
在/home/boy/hadoop/ 文件夹下
tar -zxf hadoop-2.2.0.tar.gz
rm -zxf hadoop-2.2.0.tar.gz #解压后 移除
---------配置---下面只是针对1.2版本的hadoop,在2.0+版本中稍微不同
6.1 环境变量文件----
sudo vi /etc/profile #(root权限)
#set hadoop_home
#hadoop
export HADOOP_HOME=/home/boy/hadoop/hadoop-1.2.1
export PATH=$PATH:$HADOOP_HOME/bin
source /etc/profile 重启
6.2 进入hadoop-1.2.0/conf/hadoop-env.sh文件,设置java_home
sudo vi hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.6.0_31
6.3 修改Hadoop核心配置文件core-site.xml,这里配置的是HDFS的地址和端口号
备注:请先在 /home/boy/hadoop 目录下建立 tmp 文件夹
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://namenode1:49000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/boy/hadoop/temp</value>
</property>
</configuration>
fs.default.name是NameNode的URI。hdfs://主机名:端口/
hadoop.tmp.dir :Hadoop的默认临时路径,这个最好配置,如果在新增节点或者其他情况下莫名其妙的DataNode启动不了,就删除此文
件中的tmp目录即可。不过如果删除了NameNode机器的此目录,那么就需要重新执行NameNode格式化的命令。
6.4配置/conf/mapred-site.xml
<property>
<name>mapred.job.tracker</name>
<value>namenode1:49001</value>
</property>
<property>
<name>mapred.local.dir</name>
<value>/home/boy/hadoop/temp</value>
</property>
6.5配置/conf/hdfs-site.xml
<property>
<name>dfs.name.dir</name>
<value>/home/boy/hadoop/name1</value> #hadoop的name目录路径
<description> </description>
</property>
<property>
<name>dfs.data.dir</name>
<value>/home/boy/hadoop/data1</value>
<description> </description>
</property>
<property>
<name>dfs.replication</name>
<!-- 我们的集群有两个结点,所以rep两份 -->
<value>1</value>
</property>
dfs.name.dir是NameNode持久存储名字空间及事务日志的本地文件系统路径。 当这个值是一个逗号分割的目录列表时,nametable数据
将会被复制到所有目录中做冗余备份。
dfs.replication是数据需要备份的数量,默认是3,如果此数大于集群的机器数会出错。
此处的name1和data1等目录不能提前创建,如果提前创建会出问题
6.6 配置master和slaves主从节点
配置conf/masters和conf/slaves来设置主从结点,注意最好使用主机名,并且保证机器之间通过主机名可以互相访问,每个主机名一行
。
vi masters:
输入:
namenode1
vi slaves:
输入:
datanode1
6.7 配置文件移动到其他节点,
配置结束,把配置好的hadoop文件夹拷贝到其他集群的机器中,并且保证上面的配置对于其他机器而言正确。
(因为已经解压了 所以不能在这样做了 只需要复制相应的配置文件 记得要创建 temp文件。按照下面命令的格式 把相应的五个配置文件复制过去。)
安装结束
scp -r /home/hadoop/hadoop-1.2.1 root@node2:/home/hadoop/ #输入node2的root密码即可传输,如果java安装路径不一样,需要修改conf/hadoop-env.sh
---------------
scp -r /home/hadoop/hadoop-1.2.1/conf/hadoop-env.sh root@node2:/home/hadoop/hadoop-1.2.1/conf/
core-site.xml
mapred-site.xml
hdfs-site.xml
masters
slaves
---------------
第七部分:Hadoop启动与测试
1、格式化一个新的分布式文件系统
cd hadoop-1.2.1
bin/hadoop namenode -format #格式化文件系统
成功的情况下输入一下(我的hadoop已经使用,不想重新格式化选择了No)
2、启动所有节点
bin/start-all.sh
3、查看集群的状态:
hadoop dfsadmin -report
4 Hadoop测试
在本地电脑主机(不是虚拟机,是本机),浏览器中输入相应地址,查看各节点情况。前提是,本地主机可以ping通虚拟机。
浏览NameNode和JobTracker的网络接口,它们的地址默认为:
NameNode - http://node1:50070/
JobTracker - http://node1:50030/
http://192.168.80.101:50070/dfshealth.jsp
第八部分:
从上面可以看到 hadoop搭建过程分为三部分:
第一:环境的搭建
第二:hadoop搭建
第三:hadoop使用测试。
搭建的过程其实不是很复杂,有非常多或弄错的地方。多多实践从实践中获取知识,学以致用。
另外,对于hadoop使用来说,搭建过程仅仅是第一步。
关于hadoop的使用部分,小编也没有用过,所以以后用到会及时发布出来。实战部分 请参考 刘鹏遍的《云计算》和《hadoop实战》。
上面内容,小编经过实际配置后写的。关于疏漏或错误的地方请指正。
第九部分:参考网址
http://www.linuxidc.com/Linux/2013-09/90600p4.htm
http://www.cnblogs.com/xia520pi/archive/2012/05/16/2503949.html
-------------------------------------------Tip---------------------------
1.本文中的操作用户是boy,注意到很多时候进入的文件夹是/home/boy/。一定要注意文中的路径。另外,尽量不要使用root用户。
-----------------------------------------命令解释-------------------------------------------
这里的命令指示提供参考,具体需要在网上搜索相关的文档。
1.编辑文件 vi
打开:
方式 vi 文件名称。如果文件不存在那么打开的是一个新文件。
使用键盘左右箭头移动光标位置。
键入 a 从当前字符开始修改。
键入 o 从下一行开始修改
......
关闭:
按ESC键 跳到命令模式,然后:
:w 保存文件但不退出vi
:w file 将修改另外保存到file中,不退出vi
:w! 强制保存,不推出vi
:wq 保存文件并退出vi
:wq! 强制保存文件,并退出vi
q: 不保存文件,退出vi
:q! 不保存文件,强制退出vi
:e! 放弃所有修改,从上次保存文件开始再编辑
在上面操作中有时候会涉及权限不足的操作,需要使用root。
sudo vi filename。这需要用户拥有这个权限下面。
2.普通用户获得管理员权限
/etc/sudoers文件 boy ALL=(ALL) ALL 再操作 前面ALL表示权限 后面是用户用户组。
3.Cenos7中的查看目录命令
dir -l 查看文件详细信息
dir -la 包括隐藏文件
4.网络命令(CentOS)
ip addr 查看ip 地址
ping ip地址。ping测试命令
hostname name.主机名修改 同时需要修改/etc/hostname
如果需要通过名称 访问其他节点而不是使用ip地址,就需要再修改
vi /etc/hosts #编辑配置文件
# 例子:127.0.0.1 localhost www #修改localhost.localdomain为www
192.168.80.101 namenode1
192.168.80.102 datanode1
127.0.0.1 localhost #本机
:wq! #保存退出
shutdown -r now #重启系统
5.使用xshell
关于如何在Linux与linux,以及linux与windows之前传输文件,如下
sftp:/home/test> help
1)、get
从远程服务器上下载一个文件存放到本地,如下:
先通过lcd切换到本地那个目录下,然后通过get file
>> lcd d:\ //表示切换到本地的d盘下
>> get ./test.sql //这样就将当前文件下载本地的d盘下
2)、put
是将本地的文件上传到远程服务器上,如下:
>> put //在windows下弹出选择文件的窗口
3)、lcd
先通过lcd切换到本地那个目录下
>> lcd d:\ //表示切换到本地的d盘下
4)、lls
显示当前目录下的所有文件
5)、pwd
显示当前目录
6.创建文件夹 删除
mkdir dirname
rmdir delete_dirname
rm filename(关于权限的操作文章中涉及之处有介绍)
7.解压命令
tar zxvf file
8.展开文件夹命令centos7中:
dir -l #详细信息
dir -a #隐藏文件也出来
dir -la
9.文件权限
-wrx------ 共十位。
第一位是文件类型
然后后面九位表示分别对于 创建用户 创建用户组 从其他用户组的用户三种的 读 写 修改权限。
对应的十进制解释:后面九位 每三位二进制表示一个十进制数,不会超过8 。例如 w-- --- ---:600 wrx --- ---:700
修改的命令是:
chmod 600 filename
10.显示当前文件夹命令
pwd
11.关机 shutdown now
重启 shutdown -r now
12.
13.