Hadoop-centos7 安装配置


1.下载安装包(http://hadoop.apache.org/releases.html#Download)

这里用的是:hadoop-2.7.4.tar.gz


2.1将安装包解压到指定目录文件夹(这里用的是普通用户进行安装:hadoop用户)


[[email protected] ~]$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

[[email protected] 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 

[[email protected] 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)

[[email protected] 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主机执行)

[[email protected] ~]$hadoop namenode -format

(出现下面信息表上初始化成功)



12.启动namenode和datanode:

apps/hadoop-2.7.4/sbin/hadoop-daemon.sh  这是启动问价

(1)在192.168.0.210 (mini1)主机启动nameNode :

[[email protected] ~]$hadoop-daemon.sh start namenode


(2)在192.168.0.211和192.168.0.212服务器启动datanode:

[[email protected] apps]$hadoop-daemon.sh start datanode


13.测试hadoop

【 通过浏览器访问(namenode主机): http://192.168.0.210:50070  查看节点活动情况】

(若无法访问可能是因为防火墙,关闭防火墙:[[email protected] ~]$ 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主机上执行下面命令:

[[email protected] ~]$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>.启动全部:[[email protected] sbin]$start-all.sh  

(可以分成两步启动  [[email protected] sbin]$start-dfs.sh 和  [[email protected] sbin]$ start-yarn.sh

    2>. 关闭全部:[[email protected] sbin]$stop-all.sh   (同样也可以分成两步执行)



hdfs文件系统中常见命令:

创建文件夹:

[[email protected] ~]$ hadoop fs -mkdir -p /wordcount/input   在更目录下建立 /wordcount/input 两级目录


文件上传:

[[email protected] ~]$ hadoop fs -put a.txt b.txt /wordcount/input   将a.txt和b.txt文件上传到  /wordcount/input目录


16.执行一个mapredue程序

测试一个文件夹下所有文件单词数量:

[[email protected] 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文件就是程序运行结果保存的文件!

命令方式查看结果:

[[email protected] ~]$ hadoop fs -cat /wordcount/output/part-r-00000


【Linux配置普通用戶(hadoop)的sudo hostname命令:[ 到  /etc/sudoers 文件中添加一行   hadoopALL=(ALL)ALL 】