1.下载安装包(http://hadoop.apache.org/releases.html#Download)
这里用的是:hadoop-2.7.4.tar.gz
2.1将安装包解压到指定目录文件夹(这里用的是普通用户进行安装:hadoop用户)
[hadoop@localhost ~]$tar -zxcf hadoop-2.7.4.tar.gz -C apps/ 将安装包解压到apps目录下
2.2.配置集群所有服务器的 /etc/hosts 文件完成主机名和ip的映射
添加下面三行:(这里是用三台服务器做集群)
192.168.0.210 mini1
192.168.0.211 mini2
192.168.0.212 mini3
(要保证修改完主机之间可以用主机名相互ping通,否则后面的配置会导致dataNode无法找到nameNode)
3.进入配置文件目录修改配置文件:
/home/hadoop/apps/hadoop-2.7.4/etc/hadoop
4.获取本地的JAVA_HOME
[root@localhost hadoop]#echo $JAVA_HOME
/usr/java/jdk1.8.0_91
5.将JAVA_HOME添加到配置文件 hadoop-env.sh
修改里面的:(配置java环境) 因为是通过ssh启动,用${JAVA_HOME} 在启动线程中得不到JVM
export JAVA_HOME=/usr/java/jdk1.8.0_91
6.配置core-site.xml
[root@localhost hadoop]# vim core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://mini1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hdpdata</value>
</property>
</configuration>
(注意:这里的nane node 主机要是写的是ip则会造成dataNode无法连接到nameNode)
7.修改hdfs-site.xml (都有默认参数,可以选择不配)
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
8.配置mapred-site.xml.template
(1)重命名为:mapred-site.xml
mv mapred-site.xml.template mapred-site.xml
(2)添加内容:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
9.配置 yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>192.168.0.210</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
这里就已经将所有hadoop配置文件修改完了,直接讲修改完的hadoop安装包复制到其他服务器上就行了
10.配置hadoop命令作用域为全局(hadoop_home 和 path)
[hadoop@localhost apps]$sudo vim /etc/profile
export HADOOP_HOME=/home/hadoop/apps/hadoop-2.7.4
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
(修改完记得 source /etc/profile 否则修改无效)
11.格式化文件系统(即:生成文件系统中需要的文件目录)
(注意:这里是定192.168.0.210 (即:mini1) 主机为namenode节点,所以该命令在192.168.0.210主机执行)
[hadoop@localhost ~]$hadoop namenode -format
(出现下面信息表上初始化成功)
12.启动namenode和datanode:
apps/hadoop-2.7.4/sbin/hadoop-daemon.sh 这是启动问价
(1)在192.168.0.210 (mini1)主机启动nameNode :
[hadoop@localhost ~]$hadoop-daemon.sh start namenode
(2)在192.168.0.211和192.168.0.212服务器启动datanode:
[hadoop@localhost apps]$hadoop-daemon.sh start datanode
13.测试hadoop
【 通过浏览器访问(namenode主机): http://192.168.0.210:50070 查看节点活动情况】
(若无法访问可能是因为防火墙,关闭防火墙:[hadoop@localhost ~]$ systemctl stop firewalld.service)
14.启动失败原因:
当在启动datannode时用jps命令发现datanode进程不存在且在该目录中没有生成hdpdata文件夹
表明该服务器上hadoop中的mapred-site.xml.template配置文件没有修改,用的是默认的localhost,即操作8没有完成,按步骤8重新配置就行(这时namenode的文件系统就需要重新格式化,即步骤11重新执行一次)。
成功:
15.实现自动启动所有节点:
(1).实现SSH免密登录
当然要实现上面方式从一台服务器同时启动另外两太服务器的zookeeper服务,则首先需要实现对另外两条服务器的免密登录:
(实现192.168.0.210免密登录 192.168.0.210、192.168.0.211和192.168.0.212)
在192.168.0.210主机上执行下面命令:
[hadoop@mini1 ~]$ssh-keygen
[hadoop@mini1 ~]# ssh-copy-id 192.168.0.210
[hadoop@mini1 ~]# ssh-copy-id 192.168.0.211
[hadoop@mini1 ~]# ssh-copy-id 192.168.0.212
第一行命令是生成210主机的秘钥对(一直点回车就行),第二条命令是将公钥复制一份给211主机、第三条命令是将公钥复制一份给212主机
(2)修改slaves文件(路径:/home/hadoop/apps/hadoop-2.7.4/etc/hadoop/)
在文件中只写dataNode主机的主机名,nameNode不用写,(原有的localhost删除了,否则nameNode主机同时也是dataNode主机)这里dataNode只有mini2和mini3所以就写下面两行:
mini2
mini3
(3)脚本目录 /home/hadoop/apps/hadoop-2.7.4/sbin
1>.启动全部:[hadoop@mini1 sbin]$start-all.sh
(可以分成两步启动 [hadoop@mini1 sbin]$start-dfs.sh 和 [hadoop@mini1 sbin]$ start-yarn.sh
2>. 关闭全部:[hadoop@mini1 sbin]$stop-all.sh (同样也可以分成两步执行)
hdfs文件系统中常见命令:
创建文件夹:
[hadoop@localhost ~]$ hadoop fs -mkdir -p /wordcount/input 在更目录下建立 /wordcount/input 两级目录
文件上传:
[hadoop@localhost ~]$ hadoop fs -put a.txt b.txt /wordcount/input 将a.txt和b.txt文件上传到 /wordcount/input目录
16.执行一个mapredue程序
测试一个文件夹下所有文件单词数量:
[hadoop@localhost mapreduce]$ hadoop jar hadoop-mapreduce-examples-2.7.4.jar wordcount /wordcount/input /wordcount/output
(这是执行一个mapreduce函数,wordcount是计算单词量的函数名 ,扫描/woedcount/input目录写所有文件, 将结果保存到 /wordcount/output 目录下且output目录必须是不存在的不然报错;hadoop-mapreduce-examples-2.7.4.jar这个jar 包路径是:/home/hadoop/apps/hadoop-2.7.4/share/hadoop/mapreduce)
异常 1 、如果出现报错信息:
需要检查集群服务器上 /etc/hosts 文件中hostname和IP的映射关系配置:
同时检查防火墙是否关闭,将防火墙关闭应该就没有问题了。
异常 2、如果出现报错:
说明运行程序导出结果文件夹已经存在,执行该程序需要保证结果输出文件夹是不存在的,否则报错!
17.datanode不被识别问题
datanode在formate初始化时会生成两个标识(blockPollId 和 clusterId)
新的datanode加入是会获取这两个表示作为自己工作目录中的标识,(注意:)一旦namenode重新formate后namenode的身份标识已变,而datanoded如果还是原来的标识的话就无法被namenode识别(需要将datanode的工作空间 'hdpdata' 删除重新启动datanode就行)
执行成功:
生成的part-r-00000文件就是程序运行结果保存的文件!
命令方式查看结果:
[hadoop@mini1 ~]$ hadoop fs -cat /wordcount/output/part-r-00000
【Linux配置普通用戶(hadoop)的sudo hostname命令:[ 到 /etc/sudoers 文件中添加一行 hadoopALL=(ALL)ALL 】