注:本文的主要目的是为了记录自己的学习过程,方便与大家做交流。转载请注明出处
http://blog.csdn.net/kokjuis/article/details/59523427
最近在搭建文件系统,用的是hadoop2.7.3,在Linux下做了集群。在这里做个记录,方便自己以后查看,同时希望对大家有一些帮助。
先介绍一下我目前使用的集群环境。我这里用的是虚拟环境。先介绍下硬件条件和系统环境吧。
CPU:Inter Core I7-6700 3.4Ghz 四核心八线程
内存 :16G
硬盘 :128G ssd+1T hdd
系统 :win10
总的来说,我现在这台机子的性能是相当不错的。运行3个虚拟机还是很轻松的。
一、安装hadoop之前准备的条件:
1、安装虚拟机环境
因为我这里是用虚拟机模拟集群环境的,所以要安装个虚拟机。我这里用的是 Oracle VM VirtualBox。你也可以用Vmware WorkStation,我用VirtualBox相对体积小巧,更加简易一点,Vmware WorkStation功能丰富点,不过都没有问题的,都能满足需要。至于怎么安装就不多说了,跟普通软件一样,直接下载下来安装就可以了。
2、在虚拟机上安装Linux系统。
hadoop一般是运行在Linux平台之上的,也可以运行在windows下,但是在linux上实施比较稳定,不易出错,在windows安装hadoop集群会相对麻烦一些。我这里用虚拟机安装的系统是 ubantu 16.04 LTS ,ubantu的桌面操作舒服一些,你可以用centos, redhat, fedora这些版本的Linux系统,都没有问题的。这里就简单说一下怎么安装,具体也可以百度上搜一下,有很多。安装过程很简单。需要照这步骤创建3个虚拟系统
点新建
会弹出一个选项,选择Linux系统 ubantu 64位,自己先下载好64位版本的ubantu安装包。内存可以自己设置,内存多的可以设置大一点,少的可以设置小一点,这个以后也可以改的。然后选择现在创建虚拟硬盘。
选择虚拟硬盘放在哪个路径,分配大小,这里的虚拟硬盘就是你虚拟系统里面的硬盘大小,然后选VDI类型,固定大小,点创建。
创建完以后就会出来一个虚拟机了,此时还没有系统,还需要为虚拟机安装Ubantu系统。
先做一些设置,其实也不用怎么设置了,主要把显存放到最大,这样流畅一点,最后是添加一个IDE光驱,选择下载好的ubantu系统文件安装就可以了。很简单。
这里需要注意的是要把网络连接方式设置成桥接网卡,这样是最接近真实网络环境的,如果用NAT的话,是无法做到集群的。因为NAT网络只能访问外部,外部不能访问虚拟机,所以不行。
二、集群规划
主机名 | ip | 安装的软件 | 进程 |
---|---|---|---|
master | 192.168.10.184 | jdk1.7.0_79、hadoop 2.3.7 | namenode ressourcemanager |
slave1 | 192.168.10.185 | jdk1.7.0_79、hadoop 2.3.7 | datanode secondnamenode |
slave2 | 192.168.10.186 | jdk1.7.0_79、hadoop 2.3.7 | datanade |
1、配置ubantu网络。
先将ubantu网络设置成静态IP。
2、取消dash。
在终端输入命令:sudo dpkg-reconfigure dash 在选择项中选No。
因为Ubuntu/Debian为了加快开机速度,用dash代替了传统的bash,如果不关闭。启动时hadoop时会报“Syntax error: “(” unexpected”错误。
3、修改/etc/hosts 文件
终端输入命令 sudo gedit /etc/hosts
配置好各个节点的信息,前面是节点的ip。后面是节点的名称,名称就是你的主机名称。
注意:每个节点都做上面的步骤。
三、安装JDK
下载jdk1.7.0_79。其他版本也没有问题。然后解压到 /opt/ 目录下。配置好环境变量
# 修改配置文件,在终端输入 sudo gedit /etc/profile
# 在最后下添加
export JAVA_HOME=/opt/jdk1.7.0_79
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
# 刷新配置文件source /etc/profile
注意:JDK每个节点都要安装。
四、建立hadoop运行帐号
即为hadoop集群专门设置一个用户组及用户,这部分比较简单,参考示例如下:
sudo groupadd hadoop //设置hadoop用户组
sudo useradd –s /bin/bash –d /home/had –m had –g hadoop –G admin //添加一个had用户,此用户属于hadoop用户组,且具有admin权限。
sudo passwd 123456 //设置用户had登录密码
su had//切换到had用户中
如果没有 admin组,可以自己添加一个 sudo groupadd admin
上述3个虚机结点均需要进行以上步骤来完成hadoop运行帐号的建立。
五、配置ssh免密码登录
1、注意将防火墙关掉:
#关闭防火墙
sudo systemctl stop firewalld.service
#关闭开机启动
sudo systemctl disable firewalld.service
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
2、免密码登录:
SSH主要通过RSA算法来产生公钥与私钥,在数据传输过程中对数据进行加密来保障数
据的安全性和可靠性,公钥部分是公共部分,网络上任一结点均可以访问,私钥主要用于对数据进行加密,以防他人盗取数据。总而言之,这是一种非对称算法,想要破解还是非常有难度的。Hadoop集群的各个结点之间需要进行数据的访问,被访问的结点对于访问用户结点的可靠性必须进行验证,hadoop采用的是ssh的方法通过密钥验证及数据加解密的方式进行远程安全登录操作,当然,如果hadoop对每个结点的访问均需要进行验证,其效率将会大大降低,所以才需要配置SSH免密码的方法直接远程连入被访问结点,这样将大大提高访问效率。
cd ~/.ssh
ssh-keygen -t rsa
- 1
- 2
- 1
- 2
这里上个回车就ok,会在当前目录生成两个文件,一个公钥一个私钥
将公钥拷贝到其它机器上,实现免密码登录
ssh-copy-id 192.168.10.184
ssh-copy-id 192.168.10.185
ssh-copy-id 192.168.10.186
- 1
- 2
- 3
- 1
- 2
- 3
这样会在slave1 的~/.ssh/目录下生成一个authorized_keys 就可以实现master免登录到slave1,如下:
ssh 192.168.10.185
在单机结点上用ssh进行登录,看能否登录成功。能登录成功后注销退出,过程如下:
如果出现 ssh: connect to host localhost port 22: Connection refused 这个问题,解决方法如下:
错误原因:
1.sshd 未安装
2.sshd 未启动
3.防火墙
4需重新启动ssh 服务
解决方法:
1.确定安装sshd:
- $ sudo apt-get install openssh-server
2.启动sshd:
- $ sudo net start sshd
3.检查防火墙设置,关闭防火墙:
- $ sudo ufw disable
检验方法:
输入命令:
- $ ssh localhost
若成功,则表示安装成功,且连接通过;
六、安装hadoop:
1、解压下载好的hadoop安装包到 /home/had/ 目录下
2、修改配置文件,这些配置文件全部位于 /home/had/hadoop-2.7.3/etc/hadoop 文件夹下:
hadoop-env.sh
core-site.xml
<configuration>
<!-- 指定HDFS老大(namenode)的通信地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.10.184:9000</value>
</property>
<!-- 指定hadoop运行时产生文件的存储路径 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/had/hadoop-2.7.3/tmp</value>
</property>
</configuration>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
hdfs-site.xml
<configuration>
<!-- 设置namenode的http通讯地址 -->
<property>
<name>dfs.namenode.http-address</name>
<value>192.168.10.184:50070</value>
</property>
<!-- 设置secondarynamenode的http通讯地址 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>192.168.10.185:50090</value>
</property>
<!-- 设置namenode存放的路径 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/had/hadoop-2.7.3/data/namenode</value>
</property>
<!-- 设置hdfs副本数量 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- 设置datanode存放的路径 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/had/hadoop-2.7.3/data/datanode</value>
</property>
</configuration>
- 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
- 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
mapred-site.xml
必须先创建mapred-site.xml,因为目录下并没有mapred-site.xml ,手动创建也可以,用下面的命令也可以。
mv mapred-site.xml.template mapred-site.xml
- 1
- 1
<configuration>
<!-- 通知框架MR使用YARN -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
yarn-site.xml
<configuration>
<!-- 设置 resourcemanager 在哪个节点-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<!-- reducer取数据的方式是mapreduce_shuffle -->
<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>
</configuration>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
masters
新建一个masters的文件,这里指定的是secondary namenode 的主机
192.168.10.185
- 1
- 1
slaves
192.168.10.185
192.168.10.186
2、第一次得格式化
./bin/hdfs namenode -format
3、然后复制hadoop到其他主机
scp -r hadoop-2.7.3 192.168.10.185:~
scp -r hadoop-2.7.3192.168.10.186:~
通过上面的命令,其他节点也都安装好了hadoop。不用每个节点都手动安装
七、启动hadoop
1、启动dfs
./sbin/start-dfs.sh
- 1
- 1
2、启动yarn
./sbin/start-yarn.sh
3、查看
在终端输入命令 jps 查看进程。
master
slave1
slave2
4、通过浏览器测试hdfs:
192.168.10.184:50070
- 1
- 1
注意这里有数据才是成功。
5、通过浏览器测试yarn:
192.168.10.184:8088
- 1
- 1
可以看到一切正常。2个节点。