Hadoop分布式集群搭建方法(Version: java 1.8+CentOS 6.3)
夏天小厨
前言
大数据这个概念,说的通俗点就是对海量数据的处理分析。据不完全统计,世界百分之九十的数据都由近几年产生,且不说海量数据的ETL,单从数据的存储和数据展现的实时性,传统的单机就已经无法满足实际场景的需要例如很多OLAP系统。由此引出了Hadoop,Hadoop是一个开源框架,它允许在整个集群使用简单编程模型计算机的分布式环境存储并处理大数据。它的目的是从单一的服务器到上千台机器的扩展,每一个台机都可以提供本地计算和存储。简单说Hadoop提供了两个功能:提供海量数据的存储服务;提供分析海量数据的编程框架及运行平台,我们在研究Hadoop时应重点关注HDFS、MapReduce以及新一代的资源调度管理集群YARN。
本博文属于Hadoop入门教程,读者如对Hadoop生态圈其他技术感兴趣,可查看夏天小厨的其他博文。此次搭建的Hadoop集群所采用的组件为Java 1.8 + CentOS 6.3 + Hadoop 2.6.5。
Hadoop集群搭建
1、设置三台虚拟机,一台为master,另外两台为slave1、slave3。这样做的目的即在于,master是主节点,两台slave为子节点。实现主从分离,分布式结构。
2、保证三台虚拟机的网络互通。通过ifconfig命令,检查各本机的IP地址;su命令切换到root用户下 su root。
需要将三台机器IP配置到主机名列表里面,输入命令: vi /etc/hosts
192.168.83.131 master
192.168.83.130 slave1
192.168.83.133 slave3
3、为保证三台虚拟机能够通信,关闭防火墙。有两种方式,第一种setup命令;输入命令:setup
第二种方式通过iptables关闭。输入关闭命令: service iptables stop
永久关闭防火墙:chkconfig iptables off
运行完成后查看防火墙关闭状态 输入命令:service iptables status
4、第四步,为了容易分辨哪台集群是master,哪台机器是slave,把hostname更改一下,输入命令: vi /etc/sysconfig/network 重启终端即可,将本来例如由 [email protected] ===》 [email protected] 的更改;
5、安装jdk, 本例中安装jdk1.8; 切换到root 用户; su命令 su root
创建目录 mkdir /usr/java
将通过winSCP从Windows拷到linux系统的jdk拷贝到创建的目录下,cp jdk-8u161-linux-x64.tar.gz /usr/java
linux系统中解压即安装,tar -zvxf jdk-8u161-linux-x64.tar.gz
6、同样的配置需要在slave中再操作一遍,在两台机器上创建目录 mkdir /usr/java
创建目录完成之后,在master机器上操作:
scp -r jdk1.8.0_161/ [email protected]:~/usr/java (将jdk1.8.0_161/ 目录下的所有文件从操作机上复制到[email protected]:~这台机器的/usr/java目录下)
此时,出现的正确情况,应该是提示输入yes,第二步提示输入slave1机器的密码;完成之后继续在master节点上scp -r jdk1.8.0_161/ [email protected]:~/usr/java 将文件发送到slave3节点上。
du -sh java1.8.1_161/ 查看安装文件的大小
7、配置环境变量。需要在root权限下生效,输入命令 vi /etc/profile 更改配置文件,加入以下代码:
JAVA_HOME=/usr/java/jdk1.8.0_161/
PATH=$PATH:$JAVA_HOME/bin
再执行命令 1、source /etc/profile
2、java -version
此时java环境变量已配置成功,对于slave1 slave3机器也是同样的操作
8、配置 免秘钥登录SSH免秘钥登录(需要在root权限下)
(1)、首先,在master节点上执行$ vi /etc/ssh/sshd_config
去掉以下文件的注释,在文件中找到以下几行,在开头出加上 # 即可, 输入 : 在输入wq!保存退出
RSAAuthentication yes #开启私钥验证
PubkeyAuthentication yes #开启公钥验证
AuthorizedKeysFile .ssh/authorized_keys
(2)、在master机器上输入 ssh-****** -t rsa -P '' -f ~/.ssh/id_rsa 创建一个无密码的公钥,-t是类型的意思,
rsa是生成的**类型,-P是密码,’’表示无密码,-f后是秘钥生成后保存的位置
(3)在master机器上输入 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 将公钥id_dsa.pub添加进keys,这样就可以实现无密登陆ssh
(注意:本来.ssh文件夹下是没有authorized_keys文件,并chmod 600 authorized_keys 重要,请不要忽略 )
(4)在master机器上输入 ssh master 测试免密码登录,会有询问,回答yes(如果出现Last login:XXXXXXXXX)则是正确。
(5)在slave1节点上执行 mkdir ~/.ssh
(6)在slave2节点上执行 mkdir ~/.ssh
(7)在master主机上输入 scp ~/.ssh/authorized_keys [email protected]:~/.ssh/authorized_keys 将主节点的公钥信息导入slave1节点,
导入时要输入一下slave1机器的登陆密码:~
(8)在master主机上输入 scp ~/.ssh/authorized_keys [email protected]:~/.ssh/authorized_keys 将主节点的公钥信息导入slave3节点,
导入时要输入一下slave3机器的登陆密码:
(9) 在三台机器上分别执行chmod 600 ~/.ssh/authorized_keys 赋予秘钥文件权限
(10)在master节点上 分别输入ssh slave1 ssh slave2 测试是否ssh免秘钥登陆成功
9、Hadoop安装包解压 安装部署(http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.6.5/hadoop-2.6.5.tar.gz 下载binary包)
将通过winSCP从Windows拷到linux系统的hadoop压缩包拷贝到 的家目录下,cp hadoop-2.6.5.tar.gz ~/ usr/hadoop (此操作需要在文件本来所在的文件夹 的 目录下操作)
linux系统中解压即安装,tar -zvxf hadoop-2.6.5.tar.gz
cd hadoop-2.6.5 再通过ll命令 查看hadoop的目录结构
10、更改hadoop的配置问题 cd /etc/hadoop/ 再ll查看目录结构(本系统中准确的目录为 cd hadoop-2.6.3/etc/hadoop)
第一步:先修改 hadoop-env.sh文件: 将JAVA_HOME 更改为 JAVA_HOME=/usr/java/jdk1.8.0_161/
第二步:修改 yarn-env.sh 文件, jia一句 export JAVA_HOME=/usr/java/jdk1.8.0_161/
第三步: 修改core-site.xml
<property>
<name>fs.defaultFS</name> //配置一个命名空间
<value>hdfs://master:9000</value> //master是主节点
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/hadoop/tmp</value>
</property>
第四步: 修改 hdfs-site.xml:
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/hadoop/hdfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.permission</name>
<value>false</value>
</property>
</configuration>
第五步: 修改mapred-site.xml.template: 复制一份为mapred-site.xml并修改
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value> //资源调度管理 MapReduce运行在yarn框架上
</property>
</configuration>
第六步: 修改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>
<property>
<name>yarn.resourcemanafer.address</name>
<value>master:18040</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:18030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:18025</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:18141</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:18088</value>
</property>
<!-- Site specific YARN configuration properties -->
</configuration>
第七步: 修改slave 为 slave1 slave2 输入命令: vi slaves
11、配置完环境变量之后,cd回主目录。运行scp -r hadoop-2.6.5 [email protected]:~/usr/hadoop 将配置完成的hadoop文件完全复制到另外两台从节点机器上
12、scp -r hadoop-2.6.5 [email protected]:~/usr/hadoop 复制到slave3节点
测试,启动Hadoop集群
为了测试hadoop集群是否搭建成功,经常通过jps命令查看相关的进程是否启动。
1、首先在没有启动任何操作时,运行jps命令,从下图可以看出,目前集群中没有任何进程
2、进入hadoop的安装目录:cd /usr/hadoop/hadoop-2.6.5/sbin/
运行以下命令 ./start-all.sh 同时可以启动HDFS 和YARN 也可以单步启动,使用命令:./start-dfs.sh ./start-yarn.sh
再运行jps命令查看: 可以看到主节点的HDFS的NameNode和SNN 以及YARN的RM均已启动
结语
至此,Hadoop分布式集群以及搭建成功,可以在平台上挥洒汗水啦。
夏天小厨做的第一道菜。