一、Linux环境配置
1.这里准备三台虚拟机用来搭建hadoop集群。
10.118.213.211 secms-tomcat211
10.118.213.212 secms-tomcat212
10.118.213.216 secms-tomcat216
其中211作为master。
2.安装JDK,这里版本为1.8。
vim /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_151
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$PATH:$JAVA_HOME/bin
3.配置hosts文件
vim /etc/hosts
192.168.1.111 master01
192.168.1.112 slaveone02
192.168.1.113 slaveone03
4.建立hadoop账号
useradd hadoop 创建用户hadoop
passwd hadoop 给已创建的用户设置密码
5.设置ssh免密码登录
通过hadoop账号登陆到secms-tomcat211上,在/home/hadoop目录下执行命令:
ssh-keygen -t rsa
多次回车之后在/home/hadoop/.ssh目录下产生id_rsa和id_rsa.pub文件。在其他主机上面使用同样方式产生秘钥文件。
在secms-tomcat211上面使用如下命令
cat id_rsa.pub >> authorized_keys
将id_rsa.pub公钥内容拷贝到authorized_keys文件中。
登录其他主机,将其他主机的公钥文件内容都拷贝到secms-tomcat211主机上的authorized_keys文件中。
命令如下:
ssh-copy-id -i secms-tomcat211
查看secms-tomcat211主机上的authorized_keys文件内容
cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwioob4cnpLc+OyqE3i4gX718HNf80c7gQcA+Kpmta4Rk/n/kbmYT83h4XoeMVMBZ9h5/t5uvmetF+/dMIa7DJKz0cTXvwa4XYH0rV7vnL+Kpx57pWbiLNGI1SogG6sp85xlTZ8Se8Fxr3V77to6VoonU5aUa6nWY4SPhCf7iBcSFnnEwC0H98UQpRmajZyYZrenLrlHtGkA1X5fEcTiRGeQsPzkHDQ6Vjkc24HDfLH1ojDLIh+M4CcFiixxyEeTxBLuRHM0DQqPT0oIeT066bnzmPEXLjfHueiTQJqg9lpFxOP+1GUtBHhvgzszRjscH0S9EiRl1ZgBl7tRFZoDKIw== hadoop@secms-tomcat211
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAs/YEWUC5/TIIHEMvD3LlpQXAiBPhX3LIsjl4lKKuLduyzhhiRy93T5htCToldoXgeIzDD8T0/eOg9ATm/MJ2FJ6lS56RpI5eCuq/QKxz0b+ocKsOfnaYEXsx6V4O1x5dgU/5h+yeNR+hLJjyTm5Frh8LKUJYj0kx+WgL37Yv/0WTf9wtdF8htjIu5hupSqXyi7eK/wRqyKzNChG78YMKXCmjJyMML+s1BnOLwcU/rYIiICdDJi8g44C3H8qQMCEQFfVySOvWFHYW2MCpIARC2jaemabYRkgInekNu+EYgKo9HtKbbMVCU9X+tPcxw+NWx/TAtHVbWghIuO2rJJW+Tw== hadoop@secms-tomcat212
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArsOs0oMen1oUPz6cSZfV79EaMBIJr3P3R6Ju2ooYNFO3qx212Zz1kCtcmIsBs/qLksU1mtak35o4hdR4H4KBWLZ2E6jBj09rDapt0Z6vJsCkTtR+YC/+olrybaGNkRJn5WlzIh+MSZY+6MTlzX/YHrnjJH6D0LV+vALi4MrxtOflBPG+xJTCQ3df0eEIaYFw9xYZDjhsttzJHl6N7KyQf1qYWIEwaN8CmKYhPD1NwP/5xKnRTuEVwiQN5PXkzAw9hgdvkKRUOsDfePxJrkJVpIzktS84IeiwxcefEanqLOmoB+lSCpaJpXfzs7Zew7girFxUE/ORpO64bTRyr2LsNQ== hadoop@secms-tomcat216
授权authorized_keys文件
chmod 600 authorized_keys
将authorized_keys拷贝到secms-tomcat212和secms-tomcat216上面。
scp /home/hadoop/.ssh/authorized_keys secms-tomcat212:/home/hadoop/.ssh/
scp /home/hadoop/.ssh/authorized_keys secms-tomcat216:/home/hadoop/.ssh/
至此,免密码登录已经设定完成,注意第一次ssh登录时需要输入密码,再次访问时即可免密码登录。
二、hadoop安装
1.下载hadoop压缩包hadoop-2.7.5.tar.gz,拷贝到/home/hadoop/目录下进行解压。
2.配置hadoop环境变量
export HADOOP_HOME=/home/hadoop/hadoop-2.7.5
export JAVA_HOME=/usr/java/jdk1.8.0_151
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
3.创建文件目录
给Master上面hdfs的NameNode、DataNode及临时文件。并使用scp命令将新建的文件夹目录拷贝到其他主机上面。
/home/hadoop/hdfs/data
/home/hadoop/hdfs/name
/home/hadoop/hdfs/tmp
4.配置slaves文件
slaves文件中指定Datanode的节点
secms-tomcat212
secms-tomcat216
5.配置core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml
core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://secms-tomcat211:8020</value>//这里配置主节点
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/hdfs/tmp</value>//运行产生的临时数据文件存放位置
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>//备份2分
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/hdfs/data</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name> //mapreduce使用yarn来调度
<value>yarn</value>
</property>
</configuration>
yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>secms-tomcat211</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
将配置文件拷贝到其他主机上面
//拷贝到secms-tomcat216
scp core-site.xml hadoop@secms-tomcat212:/home/hadoop/hadoop-2.7.5/etc/hadoop/
scp hdfs-site.xml hadoop@secms-tomcat212:/home/hadoop/hadoop-2.7.5/etc/hadoop/
scp mapred-site.xml hadoop@secms-tomcat212:/home/hadoop/hadoop-2.7.5/etc/hadoop/
scp yarn-site.xml hadoop@secms-tomcat212:/home/hadoop/hadoop-2.7.5/etc/hadoop/
//拷贝到secms-tomcat216
scp core-site.xml hadoop@secms-tomcat216:/home/hadoop/hadoop-2.7.5/etc/hadoop/
scp hdfs-site.xml hadoop@secms-tomcat216:/home/hadoop/hadoop-2.7.5/etc/hadoop/
scp mapred-site.xml hadoop@secms-tomcat216:/home/hadoop/hadoop-2.7.5/etc/hadoop/
scp yarn-site.xml hadoop@secms-tomcat216:/home/hadoop/hadoop-2.7.5/etc/hadoop/
6.修改hadoop-env.sh中jdk路径
export JAVA_HOME=/usr/java/jdk1.8.0_151
7.关闭主机上面的防火墙
service iptables stop
8.格式化namenode
在secms-tomcat211上面执行
bin/hdfs namenode -format
提示(成功的话,会看到 “successfully formatted” 和 “Exitting with status 0” 的提示,若为 “Exitting with status 1” 则是出错)。
9.启动NameNode 和 DataNode进程
在master节点执行启动命令:
sbin/start-dfs.sh
执行jps查看启动情况
29121 SecondaryNameNode
28914 NameNode
30681 Jps
分别在secms-tomcat212、secms-tomcat216执行jps查看启动情况
6474 DataNode
8250 Jps
hdfs监控界面:http://10.118.213.211:50070/
10.启动ResourceManager 和 NodeManager 进程
ResourceManager管理总资源分配
NodeManager管理该台节点资源
在master上面执行命令:
sbin/start-yarn.sh
sbin/mr-jobhistory-daemon.sh start historyserver # 开启历史服务器,才能在Web中查看任务运行
yarn界面:http://10.118.213.211:8088
注:关闭yarn时执行命令
sbin/stop-yarn.sh
sbin/mr-jobhistory-daemon.sh stop historyserver
如果不想启动 YARN,务必把配置文件 mapred-site.xml 重命名,改成 mapred-site.xml.template,
需要用时改回来就行。否则在该配置文件存在,而未开启 YARN 的情况下,
运行程序会提示 “Retrying connect to server: 0.0.0.0/0.0.0.0:8032” 的错误,
这也是为何该配置文件初始文件名为 mapred-site.xml.template。
三、测试
1.测试文件
新建测试文件vim words
hello a
world b
hello c
jiafeng b
sean a
2.上传文件到hdfs中
//上传命令 //文件路径 //hdfs中文件路径
bin/hadoop fs -put /home/hadoop/words /words
3.运行测试文件
//程序所在jar包 //统计词频例子 //数据路径
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.5.jar wordcount /words /words_out (输出路径)
4.查看结果
bin/hadoop fs -ls /
bin/hadoop fs -ls /words_out
bin/hadoop fs -cat /words_out/part-r-00000
结果显示
a 2
b 2
c 1
hello 2
jiafeng 1
sean 1
world 1