搭建Hadoop集群是进行大数据技术基础学习的第一步,因此,把本身搭建Hadoop集群的过程记录下来。java
使用CentOS 7 64位,Hadoop2.7.7node
使用的系统是Linux的CentOS7的系统版本,是在阿里镜像站(连接:https://opsx.alibaba.com/mirror)下载的。须要注意的是,用阿里的镜像,在安装好虚拟机系统后,要在root用户里执行如下三步操做。web
一、mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 二、wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 或者 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 三、运行yum makecache生成缓存
能够在阿里镜像站, 点击centos那栏右边的帮助来获取这三步操做。shell
具体的虚拟机安装,在这里就不介绍了。apache
建立Hadoop用户,通常在第一次启动虚拟机的时候,就建立了Hadoop用户了。vim
登录Hadoop用户后,经过su - 命令切换到root用户中。centos
执行 visudo缓存
找到 root ALL=(ALL) ALL
这行,而后在这行下面增长一行内容:hadoop ALL=(ALL) ALL
(当中的间隔为tab),以下图所示:bash
保存并退出,vi的插入保存退出,就不用说了吧?!网络
首先检验系统上有没有ssh,执行
rpm -qa | grep ssh
若是已经安装好ssh了,会有如下出现
若没有以上的信息出现,则须要安装ssh服务,执行如下两行代码(若是已经安装过ssh服务的能够跳过这一步)
sudo yum install openssh-clients sudo yum install openssh-server
接着登录ssh查看是否安装成功。
ssh localhost
此时会有以下提示(SSH首次登录提示),输入 yes 。而后按提示输入密码 hadoop,这样就登录到本机了。
接着执行
exit # 退出刚才的 ssh localhost cd ~/.ssh/ # 若没有该目录,请先执行一次ssh localhost ssh-keygen -t rsa # 会有提示,都按回车就能够 cat id_rsa.pub >> authorized_keys # 加入受权 chmod 600 ./authorized_keys # 修改文件权限
这样ssh的免密登录就设置成功了。能够重复试一次ssh localhost,记得exit退出。
sudo yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel
接着须要配置一下 JAVA_HOME 环境变量,为方便,咱们在 ~/.bashrc 中进行设置
vim ~/.bashrc
在文件最后面添加以下单独一行(指向 JDK 的安装位置),并保存:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
接着还须要让该环境变量生效,执行以下代码:
source ~/.bashrc
设置好后咱们来检验一下是否设置正确:
echo $JAVA_HOME # 检验变量值 java -version $JAVA_HOME/bin/java -version # 与直接执行 java -version 同样
首先经过Xshell把hadoop-2.7.7.tar.gz,压缩包传到虚拟机里。经过Xshell链接虚拟机后,直接输入rz,选择文件,就能够完成上传了。链接的是Hadoop用户的话,文件直接被传送到/home/hadoop/目录下了。ls显示目录列表。
解压压缩包。执行
sudo tar -zxf ~/hadoop-2.7.7.tar.gz -C /usr/local # 解压到/usr/local中 cd /usr/local/ sudo mv ./hadoop-2.7.7/ ./hadoop # 将文件夹名改成hadoop sudo chown -R hadoop:hadoop ./hadoop # 修改文件权限
Hadoop 解压后便可使用。输入以下命令来检查 Hadoop 是否可用,成功则会显示 Hadoop 版本信息:
cd /usr/local/hadoop ./bin/hadoop version
明天再写关于集群配置的具体操做步骤吧!安装Hadoop集群的时候参考的是厦门大学大数据实验室的信息(连接:http://dblab.xmu.edu.cn/blog/install-hadoop-in-centos/)。
配置好一台的Hadoop后,在虚拟机选择克隆,将虚拟机克隆两份。要配置一个具备两个节点的Hadoop集群。
克隆完成后,首先我们改变三台的主机名,便于辨识。执行
sudo vim /etc/hostname
把原来的主机名删除,第一台改名为Master,第2、三台命名为Slave一、Slave2。重启后,就能够看到更改的主机名了。
接下来,咱们设置三台机子的IP映射。在每一台执行
ifconfig #查看此虚拟机的ip
查看IP,或者在虚拟机桌面的右上角,点击 应用程序——系统工具——设置——网络设置 ,点击“优先链接”右下边那个齿轮状的图标,也能够查看IP。
而后执行
sudo vim /etc/hosts
在最下边,输入三台的IP还有主机名,IP与主机名之间的Tab键。在Slave一、2上边也要执行。
配置好后须要在各个节点上执行以下命令,测试是否相互 ping 得通,若是 ping 不通,后面就没法顺利配置成功:
ping Master -c 3 # 只ping 3次,不然要按 Ctrl+c 中断 ping Slave1 -c 3 ping Slave2 -c 3
例如,我链接Master,若是能成功,就是下边的样子
继续下一步配置前,请先完成全部节点的网络配置,修改过主机名的话需重启才能生效。
这个操做是要让 Master 节点能够无密码 SSH 登录到各个 Slave 节点上。首先生成 Master 节点的公匙,在 Master 节点的终端中执行(由于改过主机名,因此还须要删掉原有的再从新生成一次):
cd ~/.ssh # 若是没有该目录,先执行一次ssh localhost rm ./id_rsa* # 删除以前生成的公匙(若是有) ssh-keygen -t rsa # 一直按回车就能够
让 Master 节点需能无密码 SSH 本机,在 Master 节点上执行:
cat ./id_rsa.pub >> ./authorized_keys
完成后可执行 ssh Master
验证一下(可能须要输入 yes,成功后执行 exit
返回原来的终端)。接着在 Master 节点将上公匙传输到 Slave1 节点(有多的节点,也须要上传的别的节点上):
scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/
scp 是 secure copy 的简写,用于在 Linux 下进行远程拷贝文件,相似于 cp 命令,不过 cp 只能在本机中拷贝。执行 scp 时会要求输入 Slave1 上 hadoop 用户的密码(hadoop),输入完成后会提示传输完毕,出现100%。
接着在 Slave1 节点上,将 ssh 公匙加入受权:
mkdir ~/.ssh # 若是不存在该文件夹需先建立,若已存在则忽略 cat ~/id_rsa.pub >> ~/.ssh/authorized_keys rm ~/id_rsa.pub # 用完就能够删掉了
在Slave2节点上,也进行相同的操做。
这样,在 Master 节点上就能够无密码 SSH 到各个 Slave 节点了,可在 Master 节点上执行以下命令进行检验,以下图所示:
将 Hadoop 安装目录加入 PATH 变量中,这样就能够在任意目录中直接使用 hadoo、hdfs 等命令了,须要在 Master 节点上进行配置。首先执行
vim ~/.bashrc
加入一行:
export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin
以下图所示:
保存后执行 source ~/.bashrc
使配置生效。在后边的相关程序的安装过程当中,要屡次配置环境变量,因此能记住vim ~/.bashrc和source ~/.bashrc仍是比较方便的。
集群/分布式模式须要修改 /usr/local/hadoop/etc/hadoop 中的5个配置文件,更多设置项可点击查看官方说明,这里仅设置了正常启动所必须的设置项: slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml 。
1, 文件 slaves,将做为 DataNode 的主机名写入该文件,每行一个,默认为 localhost,因此在伪分布式配置时,节点即做为 NameNode 也做为 DataNode。分布式配置能够保留 localhost,也能够删掉,让 Master 节点仅做为 NameNode 使用。
本教程让 Master 节点仅做为 NameNode 使用,所以将文件中原来的 localhost 删除,只添加两行内容:Slave一、Slaver2。
2, 文件 core-site.xml 改成下面的配置:
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://Master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/usr/local/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> </configuration>
3, 文件 hdfs-site.xml,dfs.replication 通常设为 3,但咱们有两个 Slave 节点,因此 dfs.replication 的值仍是设为 2:
<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:/usr/local/hadoop/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/data</value> </property> </configuration>
4, 文件 mapred-site.xml (可能须要先重命名,默认文件名为 mapred-site.xml.template),而后配置修改以下:
修改文件名执行
mv mapred-site.xml.template mapred-site.xml
<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>
配置好后,将 Master 上的 /usr/local/Hadoop 文件夹复制到各个节点上。由于以前有跑过伪分布式模式,建议在切换到集群模式前先删除以前的临时文件。在 Master 节点上执行:
cd /usr/local sudo rm -r ./hadoop/tmp # 删除 Hadoop 临时文件 sudo rm -r ./hadoop/logs/* # 删除日志文件 tar -zcf ~/hadoop.master.tar.gz ./hadoop # 先压缩再复制 cd ~ scp ./hadoop.master.tar.gz Slave1:/home/hadoop scp ./hadoop.master.tar.gz Slave2:/home/hadoop
在 Slave1 、Slave2节点上分别执行下边的几条命令:
sudo rm -r /usr/local/hadoop # 删掉旧的(若是存在) sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local sudo chown -R hadoop /usr/local/hadoop
首次启动须要先在 Master 节点执行 NameNode 的格式化:
hdfs namenode -format # 首次运行须要执行初始化,以后不须要
CentOS系统默认开启了防火墙,在开启 Hadoop 集群以前,须要关闭集群中每一个节点的防火墙。有防火墙会致使 ping 得通但 telnet 端口不通,从而致使 DataNode 启动了,但 Live datanodes 为 0 的状况。
由于,我们使用的是CentOS7系统,须要执行:
systemctl stop firewalld.service # 关闭firewall systemctl disable firewalld.service # 禁止firewall开机启动
这时会出现,须要认证的提示,须要输入用户的密码就好了。
接着能够启动 hadoop 了,启动须要在 Master 节点上进行:
start-dfs.sh start-yarn.sh mr-jobhistory-daemon.sh start historyserver
或者执行
start-all.sh mr-jobhistory-daemon.sh start historyserver
都是能够开启Hadoop集群的,须要注意的是,开启Hadoop集群的时候,全部的节点都要处于开机状态。
经过命令 jps
能够查看各个节点所启动的进程。正确的话,在 Master 节点上能够看到 NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer 进程,以下图所示:
缺乏任一进程都表示出错。这里,会出现IP变动,致使Hadoop集群启动不成功的问题,这就须要查看IP与/etc/hosts 里的IP映射是否一致,若不一致,更改成一致就能够了。
也能够经过 Web 页面看到查看 DataNode 和 NameNode 的状态:http://master:50070/。若是不成功,能够经过启动日志排查缘由。
至此,Hadoop集群的搭建,就是所有完成了!
请参考厦门大学大数据实验室博客,连接:http://dblab.xmu.edu.cn/blog/install-hadoop-cluster/,在这一页的后半部分,是关于“执行分布式实例”的演示,按照作,都能作出来。关于Hadoop集群的搭建,我第一次也是参考的这里(http://dblab.xmu.edu.cn/blog/install-hadoop-cluster/)。