本教程适合 虚拟机/实体机 的 centos6/7 hadoop 2.X 分布式搭建,以虚拟机centos6 为例搭建。
#虚拟机和实体机的系统安装就略过了,不过不过实体机还是虚拟机,内存要>2GB
#最好设置一个统一的用户用相相同的密码,这样配置起来方便,我这里创建了hadoop用户
1、网络配置
(1)要配置系统的ip为静态ip:
如果是实体机,通过路由器分配static ip 然后改配置
下面说虚拟机:
1)设置虚拟机网卡位NAT模式
2)查看NAT网段:可以通过 编辑>虚拟网络编辑器里面的NAT虚拟网卡查看所在网段(即子网ip,比如我的:192.168.33.0),或者ipconfig查看ip,比如192.168.33.156。说明网段位192.168.33.0,这样就可以分配静态ip了。
3)打开网络设置:里面默认有eth0,可以直接编辑(edit):设置网卡模式:manual ip:192.168.33.180 子网掩码:255.255.255.0 网关:192.168.33.2
用这种方式修改多台机器ip为:180,181,182; 180作为master 其他两个作为slave节点
4)修改hostname:/etc/sysconfig/network 把三台机器HOSTNAME分别改为master slave0 slave1
5)修改每台机器的hosts,hosts是为了对应host和ip的关系:vim /etc/hosts
改为:192.168.33.180 Master
192.168.33.181slave0
192.168.33.182slave1
2、设置多台机器ssh无密码连接(这里是打通特定用户的ssh连接,我要打通用户hadoop 的ssh连接,所以接下载的操作用的是hadoop用户)
1)linux默认不允许ssh无密码连接,修改配置(需要root权限)打开ssh无密码连接:vim /etc/ssh/sshd_config,找到下面两行,去掉前面的注释#
#RSAAuthentication yes
#PubkeyAuthentication yes
2)用hadoop账户运行ssh-keygen -t rsa,一直回车,生成公私钥
3)合并公钥到authorized_keys:cat ~/.ssh/id_rsa.pub>> ~/.ssh/authorized_keys
4)合并多台机器的公钥:
scp ~/.ssh/authorized_keyshadoop@slave0:~/.ssh/authorized_keys
然后合并slave0上的公钥,在slave0上执行(hadoop账户下):cat ~/.ssh/id_rsa.pub>> ~/.ssh/authorized_keys
然后把合并了两个公钥的authorized_keys拷贝到slave1,并合并公钥:
在slave0上:
scp ~/.ssh/authorized_keyshadoop@slave1:~/.ssh/authorized_keys
然后再slave1上:
cat ~/.ssh/id_rsa.pub>> ~/.ssh/authorized_keys
现在slave1上的authorized_keys已经合并了三台机器公钥了,把它拷贝到其他两台机器就可以了:
在slave1上:
scp ~/.ssh/authorized_keyshadoop@master:~/.ssh/authorized_keys
scp ~/.ssh/authorized_keyshadoop@slave0:~/.ssh/authorized_keys
然后可以互相ssh hadoop账户试试,让机器互相识别,或者用master连接其他两个,然后拷贝~/.ssh/know_hosts到其他两台也行。
#java和hadoop每台机器都要配置
3、jdk安装与配置:
1)下载jdk:http://www.oracle.com/technetwork/java/javase/downloads/
下载的是jdk-8u77-linux-x64.gz
/home下新建java文件夹,拷贝jdk-8u77-linux-x64.gz到java文件夹并解压:tar -zxvf jdk-8u77-linux-x64.gz
2)添加到环境变量:
vim /etc/profile 在文件最后添加:
export JAVA_HOME=/home/java/jdk1.8.0_77
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
3)source /etc/profile ,使配置生效
4)java -version ,看是否配置成功
4、安装hadoop(可以用root用户来操作)
1)下载“hadoop-2.7.0.tar.gz”,放到/home/hadoop目录下
2)解压,输入命令,tar -xzvf hadoop-2.7.0.tar.gz
3)在/home/hadoop目录下创建数据存放的文件夹,tmp、dfs、dfs/data、dfs/name
4)更改配置文件,更改/home/hadoop/hadoop-2.7.0/etc/hadoop下的配置文件
core-site.xml:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.33.180:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131702</value>
</property>
</configuration>
在hadoop-env.sh里面修改JAVA_HOME:
export JAVA_HOME=/home/java/jdk1.8.0_77
hdfs-site.xml:
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>192.168.33.181:9001</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>192.168.33.182:9001</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
mapred-site.xml:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>192.168.33.180:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>192.168.33.180:19888</value>
</property>
</configuration>
更改yarn-env.sh里面的JAVA_HOME:
export JAVA_HOME=/home/java/jdk1.8.0_77
yarn-site.xml:
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>192.168.33.180:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>192.168.33.180:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>192.168.33.180:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>192.168.33.180:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>192.168.33.180:8088</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
</configuration>
#如果没有上述的xml文件的话,复制相应的template文件即可。
5)如果这些步骤是用root用户操作的,需要更改hadoop文件夹的所有者chown hadoop -R /home/hadoop/hadoop-2.7.0
6)更改本地库,这里不配置的话,会有警告:util.NativeCodeLoader: Unable to load native-hadoop library for your platform。
下载本地库
hadoop-native-64-2.7.0.tarhttp://dl.bintray.com/sequenceiq/sequenceiq-bin/
更新本地库:
解压tar包后用里面的文件替换掉/home/hadoop/hadoop-2.7.0/lib/native里面的文件
5、关闭防火墙和selinux
1)chkconfig iptables off
2)vim /etc/selinux/config 更改SELINUX=enforcing为SELINUX=disabled
6、至此,hadoop安装完毕,接下来需要格式化hadoop文件:
1)将路径调整到hadoop-2.7.0:bin/hdfs namenode -format
2)sbin/start-all.sh
3)添加hadoop环境变量 vim /etc/profile 添加export PATH=/home/hadoop/hadoop-2.7.0/bin:$PATH
4)所有程序启动完毕后可以通过master:50070来查看集群状态
或者hadoop dfsadmin -report 查看状态
常见问题及解答:
1、util.NativeCodeLoader: Unable to load native-hadoop library for your platform
解决办法参考:4-6
2、safe mode is on
hadoop目录下 bin/hadoop dfsadmin -safemode leave 可以关闭safe mode
3、hadoop dfsadmin -report 查看不到叶子节点的信息:
重新格式化文件系统时,namenode产生的新的namespaceID与datanode所持有的namespaceID不一致造成的
在我们格式化namenode前,应首先删除dfs.data.dir所配置文件中的data,name文件夹下的所有内容,最好日志也删除了
其他问题可以参考:
http://www.bubuko.com/infodetail-1179879.html
附本博文参考链接:
http://www.open-open.com/lib/view/open1435761287778.html
http://www.linuxidc.com/Linux/2015-11/124800.htm
http://www.secdoctor.com/html/yyjs/31101.html
http://blog.csdn.net/hadoop_/article/details/9269933
关于wordcount的例子的运行后期会补上