首先,要说明的一点的是,我不想重复发明轮子。如果想要搭建hadoop环境,网上有很多详细的步骤和命令代码,我不想再重复记录。
其次,我要说的是我也是新手,对于hadoop也不是很熟悉。但是就是想实际搭建好环境,看看他的庐山真面目,还好,还好,最好看到了。当运行wordcount词频统计的时候,实在是感叹hadoop已经把分布式做的如此之好,即使没有分布式相关经验的人,也只需要做一些配置即可运行分布式集群环境。
好了,言归真传。
在搭建hadoop环境中你要知道的一些事儿:
1.hadoop运行于linux系统之上,你要安装linux操作系统
2.你需要搭建一个运行hadoop的集群,例如局域网内能互相访问的linux系统
3.为了实现集群之间的相互访问,你需要做到ssh无密钥登录
4.hadoop的运行在jvm上的,也就是说你需要安装java的jdk,并配置好java_home
5.hadoop的各个组件是通过xml来配置的。在官网上下载好hadoop之后解压缩,修改/etc/hadoop中相应的配置文件
工欲善其事,必先利其器。这里也要说一下,在搭建hadoop环境中使用到的相关软件和工具:
1.virtualbox——毕竟要模拟几台linux,条件有限,就在virtualbox中创建几台虚拟机楼
2.centos——下载的centos7的iso镜像,加载到virtualbox中,安装运行
3.securecrt——可以ssh远程访问linux的软件
4.winscp——实现windows和linux的通信
5.jdk for linux——oracle官网上下载,解压缩之后配置一下即可
6.hadoop2.7.1——可在apache官网上下载
好了,下面分三个步骤来讲解
linux环境准备
配置ip
为了实现本机和虚拟机以及虚拟机和虚拟机之间的通信,virtualbox中设置centos的连接模式为host-only模式,并且手动设置ip,注意虚拟机的网关和本机中host-only network 的ip地址相同。配置ip完成后还要重启网络服务以使得配置有效。这里搭建了三台linux,如下图所示




配置主机名字
对于192.168.56.101设置主机名字hadoop01。并在hosts文件中配置集群的ip和主机名。其余两个主机的操作与此类似
|
1
2
3
4
5
6
7
8
9
10
|
[root@hadoop01 ~]# cat /etc/sysconfig/network
# created by anaconda
networking = yes
hostname= hadoop01
[root@hadoop01 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.56.101 hadoop01
192.168.56.102 hadoop02
192.168.56.103 hadoop03
|
永久关闭防火墙
service iptables stop(1.下次重启机器后,防火墙又会启动,故需要永久关闭防火墙的命令;2由于用的是centos 7,关闭防火墙的命令如下)
|
1
2
|
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
|
关闭selinux防护系统
改为disabled 。reboot重启机器,使配置生效
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[root@hadoop02 ~]# cat /etc/sysconfig/selinux
# this file controls the state of selinux on the system
# selinux= can take one of these three values:
# enforcing - selinux security policy is enforced
# permissive - selinux prints warnings instead of enforcing
# disabled - no selinux policy is loaded
selinux=disabled
# selinuxtype= can take one of three two values:
# targeted - targeted processes are protected,
# minimum - modification of targeted policy only selected processes are protected
# mls - multi level security protection
selinuxtype=targeted
|
集群ssh免密码登录
首先设置ssh密钥
|
1
|
ssh-keygen -t rsa
|
拷贝ssh密钥到三台机器
|
1
2
|
ssh-copy-id192.168.56.101
<pre name="code"class="plain">ssh-copy-id192.168.56.102
|
|
1
|
ssh-copy-id192.168.56.103
|
这样如果hadoop01的机器想要登录hadoop02,直接输入ssh hadoop02
|
1
|
<pre name="code"class="plain">sshhadoop02
|
配置jdk
这里在/home忠诚创建三个文件夹中
tools——存放工具包
softwares——存放软件
data——存放数据
通过winscp将下载好的linux jdk上传到hadoop01的/home/tools中
解压缩jdk到softwares中
|
1
|
<pre name="code"class="plain">tar-zxf jdk-7u76-linux-x64.tar.gz -c /home/softwares
|
可见jdk的家在/home/softwares/jdk.x.x.x,将该拷贝粘贴到/etc/profile文件中,并且在文件中设置java_home
|
1
2
|
exportjava_home=/home/softwares/jdk0_111
exportpath=$path:$java_home/bin
|
保存修改,执行source /etc/profile使配置生效
查看java jdk是否安装成功:
|
1
|
java -version
|
可以将当前节点中设置的文件拷贝到其他节点
|
1
|
scp-r /home/* root@192.168.56.10x:/home
|
hadoop集群安装
集群的规划如下:
101节点作为hdfs的namenode ,其余作为datanode;102作为yarn的resourcemanager,其余作为nodemanager。103作为secondarynamenode。分别在101和102节点启动jobhistoryserver和webappproxyserver
下载hadoop-2.7.3
并将其放在/home/softwares文件夹中。由于hadoop需要jdk的安装环境,所以首先配置/etc/hadoop/hadoop-env.sh的java_home
(ps:感觉我用的jdk版本过高了)
接下来依次修改hadoop相应组件对应的xml
修改core-site.xml :
指定namenode地址
修改hadoop的缓存
hadoop的垃圾回收机制
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<configuration>
<property>
<name>fsdefaultfs</name>
<value>hdfs://101:8020</value>
</property>
<property>
<name>hadooptmpdir</name>
<value>/home/softwares/hadoop-3/data/tmp</value>
</property>
<property>
<name>fstrashinterval</name>
<value>10080</value>
</property>
</configuration>
|
hdfs-site.xml
设置备份数目
关闭权限
设置http访问接口
设置secondary namenode 的ip地址
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<configuration>
<property>
<name>dfsreplication</name>
<value>3</value>
</property>
<property>
<name>dfspermissionsenabled</name>
<value>false</value>
</property>
<property>
<name>dfsnamenodehttp-address</name>
<value>101:50070</value>
</property>
<property>
<name>dfsnamenodesecondaryhttp-address</name>
<value>103:50090</value>
</property>
</configuration>
|
修改mapred-site.xml.template名字为mapred-site.xml
指定mapreduce的框架为yarn,通过yarn来调度
指定jobhitory
指定jobhitory的web端口
开启uber模式——这是针对mapreduce的优化
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<configuration>
<property>
<name>mapreduceframeworkname</name>
<value>yarn</value>
</property>
<property>
<name>mapreducejobhistoryaddress</name>
<value>101:10020</value>
</property>
<property>
<name>mapreducejobhistorywebappaddress</name>
<value>101:19888</value>
</property>
<property>
<name>mapreducejobubertaskenable</name>
<value>true</value>
</property>
</configuration>
|
修改yarn-site.xml
指定mapreduce为shuffle
指定102节点为resourcemanager
指定102节点的安全代理
开启yarn的日志
指定yarn日志删除时间
指定nodemanager的内存:8g
指定nodemanager的cpu:8核
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
<configuration>
<!-- site specific yarn configuration properties -->
<property>
<name>yarnnodemanageraux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarnresourcemanagerhostname</name>
<value>102</value>
</property>
<property>
<name>yarnweb-proxyaddress</name>
<value>102:8888</value>
</property>
<property>
<name>yarnlog-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarnlog-aggregationretain-seconds</name>
<value>604800</value>
</property>
<property>
<name>yarnnodemanagerresourcememory-mb</name>
<value>8192</value>
</property>
<property>
<name>yarnnodemanagerresourcecpu-vcores</name>
<value>8</value>
</property>
</configuration>
|
配置slaves
指定计算节点,即运行datanode和nodemanager的节点
192.168.56.101
192.168.56.102
192.168.56.103
先在namenode节点格式化,即101节点上执行:
进入到hadoop主: cd /home/softwares/hadoop-3
执行bin下的hadoop脚本: bin/hadoop namenode -format
出现successful format才算是执行成功(ps,这里是盗用别人的图,不要介意哈) 
以上配置完成后,将其拷贝到其他的机器
hadoop环境测试
进入hadoop主下执行相应的脚







