dasheng-maritime

网上有很多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.

分类:

技术点:

相关文章: