您的位置:首页 > 运维架构 > Linux

CentOS6.0+Hadoop2.6.0搭建完全分布式环境

2015-12-28 12:01 573 查看
写在前面的话:

我用了3台VMware虚拟机成功配置了Hadoop2.6.0版本,采用的系统是CentOS6.0。在配置的过程中,我遇到了大大小小、各式各样的问题。比如一定要注意虚拟机系统和软件位数的一致(要全64bit或全32bit)

现在我将我的配置过程分享如下,也是为了巩固学习的过程。如对您有帮助,不甚荣幸;若有失偏颇,还望您多多指导。

CentOS6.0+Hadoop2.6.0搭建完全分布式环境

一、实验环境

1.VMware10;2.CentOS-6.7-x864-bin-DV6_D1.iso;3.hadoop版本:hadoop-2.6.0;4.jdk-8u45-linux-x64.rpm;5.hadoop64bit本地库

这些东西网上都可以免费下载,如实在找不到可以私信我。

二、网络参数和虚拟机配置

1.IP地址表
host name

ip address

os

1

master

192.168.230.128

CentOS6.0

2

slave1

192.168.230.129

CentOS6.0

3

slave2

192.168.230.130

CentOS6.0

2.VM->Setting->Network Adapter->设置网络链接方式为:桥接;这样虚拟机之间就可以互相通信。



3.安装VMtools工具(作用:可以从windows和linux之间互相移动文件)

注:本Centos镜像文件在安装的过程中就已经默认安装了tools,比较方便。

若有需要,可以参考:http://wenku.baidu.com/link?url=Qz5yGTROVvEKdkg7oDv67XJ-o0r7ls2eCUJnNpIIH6jmpJvq50-quS4hwL7RQmUGHd4SfKLaSuFlycwSQQlMG9iKKnVBUyx3UAO2K1blsgq

三、网络配置

1.关闭linux系统的防火墙(作用:使各个虚拟机之间可以互相通信,否则容易提示错误)

关掉SELINUX:vi /etc/selinux/config ,设置SELINUX=disabled,保存退出。

关闭防火墙:/sbin/service iptables stop;chkconfig --level 35 iptables off

2.设置网络参数。

(1)修改IP地址为静态地址:vi /etc/sysconfig/network-scripts/ifcfg-eth0

比照IP表,在master和slave上都进行设置,如下图所示。注意:HWADDR为标识机器的硬件地址,不要修改!

(2)修改主机名称。(作用:使访问通过主机名而非IP地址访问,更便捷)

比照IP表,在master和slave上都进行设置,这里以master为例。

(3)修改hosts映射,vi /etc/hosts,将其内容改为如下图所示。

(4)执行:service
network restart 以重启网络。

注:网络配置最好几台机器同步执行,这样不容易出错。

四、安装JDK

这一步其实非常简单,只需要将rpm包移动到linux文件目录中,傻瓜式安装。然后根据具体位置配置环境变量即可。

1.安装RPM包

下载jdk-8u45-linux-x64.rpm,我将它移动到/tmp目录下,分别在namenode和datanode节点上安装

命令:cd /opt ->rpm -ivh jdk-8u45-linux-x64.rpm 系统将自动安装jdk到/usr/java下

2.配置环境变量

执行vi /etc/profile,配置如下图所示。配置完之后保存退出,执行source
/etc/profile 使生效。



3.在终端输入java –version
查看java配置情况,成功。

五、配置所有节点之间的SSH无密码访问

SSH是通过提前验证双方秘钥,而免去通过密码访问的一种访问方式。

(1)所有节点执行以下命令,生成rsa密钥对:ssh-keygen -t rsa

这将在/root/.ssh/目录下生成一个私钥id_rsa和一个公钥id_rsa.pub。

(2)将所有datanode节点的公钥id_rsa.pub传送到namenode上:

cp id_rsa.pub datanode01.id_rsa.pub //复制一份id_rsa.pub

scp datanode01.id_rsa.pub namenode节点ip地址:/root/.ssh/ //将公钥文件传送到namenode

(3)namenode节点上综合所有公钥(包括自身)并传送到所有节点上

cp id_rsa.pub authorized_keys //authorized_keys名字不能错!

cat datanode01.id_rsa.pub >> authorized_keys

然后使用SSH协议将所有公钥信息authorized_keys复制到所有DataNode的.ssh目录下

scp authorized_keys data节点ip地址: /root/.ssh/

这样配置过后,所有节点之间可以相互SSH无密码登陆,可以通过命令“ssh 节点ip地址”来验证。

配置完毕,在namenode上执行“ssh 本机,所有数据节点”命令,因为ssh执行一次之后将不会再询问。至此配置SSH成功。

六、安装hadoop2.6.0

1.设置环境变量

在namenode和datanode节点上的/usr/etc/目录下新建hadoop文件夹,将hadoop-2.6.0解压到namenode节点的hadoop文件夹下

(对于datanode节点上的hadoop,将用scp指令直接从namenode节点拷贝过去,这样更方便),

修改namenode节点的/etc/profile文件,在后面添加环境变量,如下图所示:

保存并退出,执行以下命令使配置生效

source /etc/profile

2.解压hadoop-2.6.0.tar.gz

cd/usr/etc/hadoop/
-> tar -zxf hadoop-2.6.0.tar.gz 默认解压缩到当前目录下面

3.修改hadoop配置文件

这里所有的配置文件都在:/usr/etc/hadoop/hadoop-2.6.0/etc/hadoop/,下面我们一次配置里面的文件

(a)修改hadoop-env.sh和 yarn-env.sh,找到里面的JAVA_HOME,改为实际地址,这里设置为JAVA_HOME=/usr/java/jdk1.8.0_45

(b)修改slave
。它配置所有datanode节点,以便namenode搜索,本例配置的内容如下:slave1 slave2

(c) core-site.xml。修改Hadoop核心配置文件core-site.xml,这里配置的是HDFS的地址和端口号,其中,fs.defaultFS表示要配置的默认文件系统,io.file.buffer.size表示设置buffer的大小。

<configuration>
<property>
<name>hadoop.native.lib</name>
<value>true</value>
<description>Should native hadoop libraries, if present, be used.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/etc/hadoop/hadoopp-2.6.0/mytmp</value>
<description>A base for other temporarydirectories.</description>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>master</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
</configuration>
(d)hdfs-site.xml

修改Hadoop中HDFS的配置,配置的备份方式默认为1。

<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/etc/hadoop/name</value>
<final>true</final>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/etc/hadoop/data</value>
<final>true</final>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>


(e) mapred-site.xml.template(或者mapred-site.xml,这两个名字都可以)

<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>

<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>

<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>/mr-history/tmp</value>
</property>

<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>/mr-history/done</value>
</property>

</configuration>
(f)yarn-site.xml

<span style="font-family:Times New Roman;font-size:14px;"><configuration>

<property>

<name>yarn.resourcemanager.address</name>

<value>master:18040</value>

</property>

<property>

<name>yarn.resourcemanager.scheduler.address</name>

<value>master:18030</value>

</property>

<property>

<name>yarn.resourcemanager.resource-tracker.address</name>

<value>master:18025</value>

</property>

<property>

<name>yarn.resourcemanager.admin.address</name>

<value>master:18041</value>

</property>

<property>

<name>yarn.resourcemanager.webapp.address</name>

<value>master:8088</value>

</property>

<property>

<name>yarn.nodemanager.local-dirs</name>

<value>/usr/etc/hadoop/mynode/my</value>

</property>

<property>

<name>yarn.nodemanager.log-dirs</name>

<value>/usr/etc/hadoop/mynode/logs</value>

</property>

<property>

<name>yarn.nodemanager.log.retain-seconds</name>

<value>10800</value>

</property>

<property>

<name>yarn.nodemanager.remote-app-log-dir</name>

<value>/logs</value>

</property>

<property>

<name>yarn.nodemanager.remote-app-log-dir-suffix</name>

<value>logs</value>

</property>

<property>

<name>yarn.log-aggregation.retain-seconds</name>

<value>-1</value>

</property>

<property>

<name>yarn.log-aggregation.retain-check-interval-seconds</name>

<value>-1</value>

</property>

<property>

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

</property>

</configuration></span>


4.复制配置文件

将上述文件配置好后,将hadoop-2.6.0文件复制到其余datanode机器上的相同路径下。

scp -r /usr/etc/hadoop/hadoop-2.6.0 slave1: /usr/etc/hadoop

scp -r /usr/etc/hadoop/hadoop-2.6.0 slave2: /usr/etc/hadoop

切换到root用户,修改/etc/profile文件 设置hadoop环境变量。如下图所示。

修改后保存,执行命令使生效:source /etc/profile。

5.所有配置完成之后需要重启电脑,所有datanode节点也需要对环境变量增加上面配置,配置完成之后重启电脑。

重启电脑命令:reboot

七、hadoop的启动和验证

(1)hadoop namenode的初始化,只需要第一次的时候格式化,之后就不需要了

cd /usr/etc/hadoop/hadoop-2.2.0/bin

hdfs namenode -format

注:若对namenode又一次初始化,必须首先删除dfs.data.dir所配置文件中的data文件夹下的所有内容(data文件夹在slave节点里:slave:/usr/etc/hadoop/data/*),否则datanode起不来

(2)启动

启动:在namenode机器上,进入/usr/etc/hadoop/hadoop-2.2.0/sbin

执行脚本start-all.sh

(3) 关闭

在namenode节点上,进入/usr/etc/hadoop/hadoop-2.2.0/sbin

stop-all.sh

(4)验证

在master和slave上执行jps命令,可以看到name节点和slave节点配置成功

查看集群状态:[root@master
bin]# hdfs dfsadmin -report

查看文件块组成:[root@master
bin]# hdfs fsck / -files -blocks

八、Web接口测试

启动hadoop后,在主节点的浏览器中输入地址查看
http://master:50070 http://master:8088
至此,hadoop平台的搭建全部结束。

在环境搭建的过程中,如果出现任何问题,都要去查看日志

日志路径是:/home/hadoop/hadoop2.2/logs

九、wordcount测试

1.在/目录下 ->创建一个空文件input,输入内容为

My name is MengZhengYU!

My major is Computer Science!

I am a very luck man!

I love you NEU!

并将文件上传到hdfs。执行[root@master
/]# hadoop fs -put /input /input

2.执行测试

在hadoop的bin目录cd
/usr/etc/hadoop/hadoop-2.6.0/bin 下执行,

[root@masterbin]#./yarn jar ../share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount /input /output

执行完毕之后可以看到:output文件夹下有两个文件

[root@master ~]# hadoop fs -ls /output

Found 2 items

-rw-r--r-- 1 root supergroup 0 2014-11-06 21:21 /output/_SUCCESS

-rw-r--r-- 1 root supergroup 64 2014-11-06 21:21 /output/part-r-00000

3.查看结果

[root@master bin]# hadoop fs -cat /output/part-r-00000

最后,我想谈谈我遇到的很多问题。

第一个,我安装了VM-TOOLS工具后间歇性的出现无法移动文件的现象,极为纳闷,最后解决的方法是重启主机(非虚拟机)。

第二个,在成功配置完环境之后,在运行wordcount程序时,出现了本地库无法读取的错误,通过网上查阅资料,我下载了64位naive库函数,将其移到根目录(/usr/etc/hadoop/hadoop-2.6.0/lib/native)下,配置core-site.xml文件和环境变量并重启虚拟机,问题终于解决。

第三个,输入hadoop dfsadmin -report查不到集群中文件系统的信息,得到的信息全是0,后来发现格式化了hdfs多次,导致namenode产生的新的namespaceID与datanode所持有的namespaceID不一致。因此,在格式化namenode前,应首先删除slave中的dfs.data.dir所配置文件中的data文件夹下的所有内容,否则怎么也通不了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: