零基础搭建hadoop集群,目标 1(master)+2(slaves)
工具准备:
- vmware 12
- centos 7 mini版
- xshell用于远程主机
- xftp5文件传输
- centos 安装小工具 sz rz ;yum install lrzsz
- hadoop 2.6.0
- spark1.6.1 (暂时没用)
jdk-7u79-linux-x64
- vm及centos 安装过程忽略,参考 https://jingyan.baidu.com/article/eae0782787b4c01fec548535.html
先安装一台centos, 修改centos源为中科大源,参考 http://mirrors.ustc.edu.cn/help/centos.html - 网络配置可以使用桥接模式 , 尤其注意 之后复制的 centos mac需修改为不同。
- 查看网络 使用: ip addr 命令
步骤
1 安装jdk,配置jdk环境变量
参考 : http://www.linuxidc.com/Linux/2016-09/135556.htm
2 修改hostname 。我们在 Master 节点上执行如下命令修改主机名(即改为 Master,注意是区分大小写的)- vm及centos 安装过程忽略,参考 https://jingyan.baidu.com/article/eae0782787b4c01fec548535.html
$ vi /etc/hostname
3 克隆2台机器,分别为 Slave1 Slave2 。之间的文件传输可使用命令
$ scp 源文件 -r(如果是文件夹) root@Slave1://目标文件地址
4 然后执行如下命令修改自己所用节点的IP映射。修改完后重启(shutdown -r now)
$ vi /etc/hosts
$ source /etc/hosts
192.168.3.234 Master
192.168.3.231 Slave1
192.168.3.232 Slave2
$ ping Master -c 3 # 只ping 3次,否则要按 Ctrl+c 中断
5 ssh无密码验证配置
(1) 首先生成 Master 节点的公匙,在 Master 节点的终端中执行
$ cd ~/.ssh # 如果没有该目录,先执行一次ssh localhost
$ rm ./id_rsa* # 删除之前生成的公匙(如果有)
$ ssh-keygen -t rsa # 一直按回车就可以
(2)让 Master 节点需能无密码 SSH 本机,在 Master 节点上执行
$ cat ./id_rsa.pub >> ./authorized_keys
(3)完成后可执行 ssh Master 验证一下(可能需要输入 yes,成功后执行 exit 返回原来的终端)。接着在 Master 节点将上公匙传输到 Slave1 节点:
$ scp ~/.ssh/id_rsa.pub root@Slave1:/root/
(4)接着在 Slave1 节点上,将 ssh 公匙加入授权
$ mkdir ~/.ssh # 如果不存在该文件夹需先创建,若已存在则忽略
$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
$ rm ~/id_rsa.pub # 用完就可以删掉了
(5)测试
$ ssh Slave1
$ exit
6 将hadoop2.6.0 拷贝至 /usr 目录下 并解压
7 配置 PATH变量
$ vi /etc/profile
export JAVA_HOME=/usr/jdk1.7.0_79
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
export PATH=$PATH:/usr/hadoop-2.6.0/bin:/usr/hadoop-2.6.0/sbin
最后,$ source /etc/profile
8 配置集群/分布式环境 (/hadoop-2.6.0/etc/hadoop 目录下)
(1) 修改 slaves
Msater
Slave1
Slave2
(2) 修改 core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://Master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/root/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
</configuration>
(3) 文件 hdfs-site.xml,dfs.replication 一般设为 slave数量。此处需要新建 dfs和tmp文件目录
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>Master:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/root/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/root/dfs/data</value>
</property>
</configuration>
(4) mapred-site.xml (需要先重命名,默认文件名为 mapred-site.xml.template , $ cp mapred-site.xml.template mapred-sit
<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>
</configuration>
(5) yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>Master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
9 将文件复制到其它机器
(1) Master节点
$ cd /usr/local
$ sudo rm -r ./hadoop/tmp # 删除 Hadoop 临时文件
$ sudo rm -r ./hadoop/logs/* # 删除日志文件
$ scp -r /hadoop-2.6.0 root@Slave1:/usr/
(2) 在 Slave1 节点上执行
$sudo chmod -R /usr/hadoop-2.6.0
(3) 第一次启动前需要先对 Master 节点执行 NameNode 的格式化
$hdfs namenode -format
如果 权限不够,查看hdfs权限,并给予权限
$ ll /usr/hadoop-2.6.0/bin/hdfs
10 CentOS系统需要关闭防火墙
$ systemctl stop firewalld.service # 关闭firewall
$ systemctl disable firewalld.service # 禁止firewall开机启动
11 Master上启动hadoop
$ start-dfs.sh
$ start-yarn.sh
$ mr-jobhistory-daemon.sh start historyserver
12 查看 各进程 $ jps
(1)在 Master 节点上可以看到 NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer 进程
(2)在 Slave 节点可以看到 DataNode 和 NodeManager 进程
(3)另外还需要在 Master 节点上通过命令 hdfs dfsadmin -report 查看 DataNode 是否正常启动,如果 Live datanodes 不为 0 ,则说明集群启动成功
(4)也可以通过 Web 页面看到查看 DataNode 和 NameNode 的状态:http://master:50070/。如果不成功,可以通过启动日志排查原因。
13. 执行分布式实例
(1) 首先创建 HDFS 上的用户目录
$ hdfs dfs -mkdir -p /user/hadoop
(2) 将 /usr/hadoop-2.6.0/etc/hadoop 中的配置文件作为输入文件复制到分布式文件系统中
$ hdfs dfs -mkdir /input
$ hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml /input
(3) 通过查看 DataNode 的状态(占用大小有改变),输入文件确实复制到了 DataNode 中
(4)运行 MapReduce 作业
$ hadoop jar /usr/hadoop-2.6.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep /input /output 'dfs[a-z.]+'
(5) 同样可以通过 Web 界面查看任务进度 http://master:8088/cluster,在 Web 界面点击 “Tracking UI” 这一列的 History 连接,可以看到任务的运行信息
(6) 关闭 Hadoop 集群也是在 Master 节点上执行的
$ stop-yarn.sh
$ stop-dfs.sh
$ mr-jobhistory-daemon.sh stop historyserver
参考:
http://dblab.xmu.edu.cn/blog/install-hadoop-cluster/
http://www.cnblogs.com/zengxiaoliang/p/6478859.html
http://blog.sina.com.cn/s/blog_95b63fc90102vrvy.html
http://dblab.xmu.edu.cn/post/7586/#userconsent#