- 配置网络
保证可以ping通外网,关闭防火墙,然后用xshell来操作
//配置的ip、网关等信息
vim /etc/sysconfig/network-scripts/ifcfg-eth0
//网卡
DEVICE=eth0
//是否开机启动
ONBOOT=yes
//ip地址
IPADDR=192.168.0.100
//子网掩码
NETMASK=255.255.255.0
//网关
GATEWAY=192.168.0.2
//使用静态的ip形式
BOOTPROTO=static
//关闭防火墙
service iptables stop
//永久性关闭防火墙
chkconfig iptables off
//dns解析
vim /etc/resolv.conf
nameserver 114.114.114.114
//映射
vim /etc/hosts
//追加配置内容
192.168.0.100 node01
192.168.0.101 node02
192.168.0.103 node03
//时间同步
//下载ntp命令
yum install -y ntp
//使用命令来让时间和网络、本地时间同步
ntpdate -u ntp1.aliyun.com
至此,网络部分的配置就完成了,如果在本地搭建的话,注意要配置vmware的虚拟网络编辑器,保证nat模式网络模式下的网段和子网掩码都和自己配置的一致,否则可能会导致ping不通外网。
2.免密配置
先上传jdk的tar包,将jdk的tar包上传至节点上,这里我们将所有的jar包进行一个目录规划,tar包统一放在/home/tools下,统一解压到/home/bigdata下(解压命令:tar -zxvf tar包名 -C /home/bigdata)。在其他节点我们只需要创建/home/bigdata目录,将在节点1上配置好的直接发送过去即可。
//配置环境变量
vim ~/.bash_profile(~其实就是代表/root/)
export JAVA_HOME=/home/bigdata/jdk1.8.0_151
export PATH=$PATH:$JAVA_HOME/bin
//刷新环境变量
source ~/.bash_profile
//测试
jav使用tab键,如果可以补齐java就说明配置成功
//发送到其他节点
//在/home/bigdata/下发送
scp -r jdk1.8.0_151/ node02:`pwd`
scp -r jdk1.8.0_151/ node03:`pwd`
//在/root/下发送.bash_profile到其他节点,道理一样,但要记得刷新一下(使用上述命令)
scp .bash_profile node02:`pwd`
scp .bash_profile node023:`pwd`
//刷新环境变量
source ~/.bash_pfofile
//到/root/.ssh下
cd /root/.ssh
//生成公钥和私钥
ssh-keygen
//直接回车到底
//使用ll可以看到生成的文件
//将公钥发送到其他节点上,包括本机,发送时要输入yes,下一步输出密码,密码就是你登录linux的密码
ssh-copy-id -i id_rsa.pub node01
ssh-copy-id -i id_rsa.pub node02
ssh-copy-id -i id_rsa.pub node03
//因为我们搭建的是HA,所以要在另一个namenode节点(这里是节点2)上也要免秘钥,操作同上
//到节点2的/root/.ssh下
cd /root/.ssh
//生成公钥和私钥
ssh-keygen
//直接回车到底
//使用ll可以看到生成的文件
//将公钥发送到其他节点上,包括本机
ssh-copy-id -i id_rsa.pub node01
ssh-copy-id -i id_rsa.pub node02
ssh-copy-id -i id_rsa.pub node03
//测试
ssh node02,(如果root@node01变成了root@node02,即成功,使用exit来回到原来节点)
- hadoop集群配置
hadoop的tar包上传至节点的/home/tools下,统一解压到/home/bigdata下,配置hadoop文件。
配置hadoop的环境变量,同java一样
vim ~/.bash_profile
export HADOOP_HOME=/home/bigdata/hadoop-2.8.3
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
//配置文件存储目录
cd /home/bigdata/hadoop-2.8.3/etc/hadoop/
配置hadoop-env.sh
//只需配置JAVA_HOME的路径
export JAVA_HOME=/home/bigdata/jdk1.8.0_151
配置core-site.xml
<configuration>
<!--hadoop的集群入口-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoopCluster01</value>
</property>
<!--hadoop的工作路径,会自动创建 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/bigdata/hadoop-2.8.3/hadoop2.8.3_metadata</value>
</property>
<!-- zookeeper的端口配置-->
<property>
<name>ha.zookeeper.quorum</name>
<value>node01:2181,node02:2181,node03:2181</value>
</property>
</configuration>
配置hdfs-site.xml
<configuration>
<!--hdfs集群名称:-->
<property>
<name>dfs.nameservices</name>
<value>hadoopCluster01</value>
</property>
<!--为多个注册到hdfs集群名称的NN,起别名-->
<property>
<name>dfs.ha.namenodes.hadoopCluster01</name>
<value>nn1,nn2</value>
</property>
<!--nn1 : node01的rpc访问端口,rpc(远程调用协议)-->
<property>
<name>dfs.namenode.rpc-address.hadoopCluster01.nn1</name>
<value>node01:8020</value>
</property>
<!--nn2 : node02的rpc访问端口,rpc(远程调用协议)-->
<property>
<name>dfs.namenode.rpc-address.hadoopCluster01.nn2</name>
<value>node02:8020</value>
</property>
<!--nn1 : node01的http访问端口-->
<property>
<name>dfs.namenode.http-address.hadoopCluster01.nn1</name>
<value>node01:50070</value>
</property>
<!--nn2 : node02的http访问端口-->
<property>
<name>dfs.namenode.http-address.hadoopCluster01.nn2</name>
<value>node02:50070</value>
</property>
<!--把journalnode集群整合到hadoop集群,把journalnode所在节点以及访问端口进行配置-->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node01:8485;node02:8485;node03:8485/hadoopCluster01</value>
</property>
<!--把journalnode集群的工作空间,需要手动创建-->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/bigdata/hadoop-2.8.3/journal_data</value>
</property>
<!--启动高可用的代理类-->
<property>
<name>dfs.client.failover.proxy.provider.hadoopCluster01</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!--高可用下,依赖的ssh机制(免密钥)-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!--指定免密钥后的私钥所在路径-->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<!--是否启用高可用功能服务,默认是false, 如果开启高可用需要修改为true-->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
</configuration>
配置mapred-site.xml(需要先改名字,原先是mapred-site.xml.template,是一个模板,去掉后缀)
<configuration>
<!--MapReduce运行时的资源依赖-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
</configuration>
配置yarn-site.xml
<configuration>
<!--指定yarn集群支持工作任务类型,把MapReduce指定为集群的一种任务类型-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--启用yarn的高可用服务,默认是false-->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!--指定yarn集群的集群名称,要求该名称和hdfs集群名称不一样-->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yarnCluster</value>
</property>
<!--为多个resourcemanager起别名-->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!--别名为rm1的resourcemanager进程的启动节点-->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>node01</value>
</property>
<!--别名为rm2的resourcemanager进程的启动节点-->
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>node02</value>
</property>
<!--把zk集群集成在yarn集群中:-->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>node01:2181,node02:2181,node03:2181</value>
</property>
</configuration>
配置slaves
将里面的localhost删除,添加node01、node02、node03,这是配置的datanode,可以自定义
配置masters(需要自己创建,名字必须是masters)
vim masters
内容是:node02
至此,配置文件就配置完成了,接下来将配置好的hadoop目录发送给其他节点
在/home/bigdata/目录下使用scp发送
scp -r hadoop-2.8.3/ node02:`pwd`
scp -r hadoop-2.8.3/ node03:`pwd`
将配置好的.bash_profile也发送过去,方式上面有介绍,发送完记得刷新一下,
//测试
输入had使用tab键,能补齐就说明环境配置成功
接下来我们将三个节点上的journalnode开启,命令是:hadoop-daemon.sh start journalnode
然后我们配置zookeeper
zookeeper配置
将zookeeper的tar包解压到/home/bigdata下,配置环境变量,同java和hadoop的配置一样,然后刷新环境变量,接下来在/home/bigdata/zookeeper-3.4.6目录下创建一个目录zkData,里面创建一个文件,名为myid,内容只写一个1,然后修改配置文件,在conf下,现将zoo.template.cfg文件改名为zoo.cfg,
然后再编辑文件内容
//修改配置文件
vim zoo.cfg
//将dataDir的路径改为:
dataDir=/home/bigdata/zookeeper-3.4.6/zkData
//在最后追加内容
//zookeeper集群节点列表
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888
//保存退出
同样,将文件发送到其他节点,方法如上,这里要注意的是zkData下的myid文件中的内容要变化,如果在节点2上,就改为2,节点3上,就改为3
//开启3个节点上的zookeeper服务,命令是:
zkServer.sh start
//查看那个是leader
server.sh status
//格式化zk集群,在节点1上执行命令:
hdfs zkfc -formatZK
至此,zookeeper的集群搭建完成,接下来完成hadoop集群的搭建
//开启了三个节点上的journal服务后,在节点1上执行命令:
hdfs namenode -format
//注意查看日志,看是否有错误发生,如果没错误,在节点1上开启namenode
hadoop-daemon.sh start namenode
//在节点2,即第二个namenode节点上,执行命令:
hdfs namenode -bootstrapStandby
至此,集群格式化完成,可以通过webUI上来查看信息,地址是(如果在windows本地配置了映射的话)node01:50070或者node02:50070,这是因为不清楚谁是活跃状态的节点,你可以将活跃节点使用hadoop-daemon.sh stop namenode停止,看备份状态的naemnode会不会切换至active,如果可以,说明配置成功
- HA组件的搭建过程
到这里,我们已经完成HDFS、MapReduce、yarn、journal、zookeeper的整合配置,HA框架搭建已经完成,接下来的是辅助hadoop开发的各种组件,这里我们先搭建hive、flume、sqoop、azkaban,其余的我们之后还会继续进行。
hive的搭建(我们这里只讲解hive 的本地模式搭建,远程模式之后讲解)
mysql安装:yum install -y mysql-server
//启动mysql
service mysqld start
//设置开机启动
chkconfig mysqld on
//进入mysql
mysql
//进入mysql数据库
use mysql;
//把所用权限赋予root用户
grant all privileges on *.* to 'root'@'%'identified by 'root' with grant option;
//把其他的root 用户删除,避免验证冲突
delete from user where host !='%';
//刷新权限
flush privileges;
//退出在输入mysql,无法进入,说明配置成功
进入mysql:
mysql -uroot -proot
mysql配置完成
tar包解压到/home/bigdata下,配置环境变量,刷新环境变量,进入到配置文件目录
//配置文件目录
cd /home/bigdata/hive-1.2.2/conf
//改名字,修改配置文件
mv hive-default.xml.template hive-site.xml
//hive-site.xml内容
<configuration>
<property>
<!-- hive中的表在hdfs文件系统中的数据存储位置的目录-->
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive_remote/warehouse</value>
</property>
<!-- hive中的元数据存放位置-->
<property>
<name>hive.metastore.local</name>
<value>true</value>
</property>
<!-- mysql数据库在哪一台上,hive_remote是数据库名 ,要求数据库不存在或为空-->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://node02/hive_remote?createDatabaseIfNotExist=true</value>
</property>
<!-- 数据库驱动-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<!-- 连接数据库的用户名和密码-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
</property>
</configuration>
//将mysql的驱动jar包导入到hive安装目录的lib下
//然后在/home/hadoop-2.5.1/share/hadoop/yarn/lib的目录下进行jar包替换
cp /home/hive-1.2.1/lib/jline-2.12.jar ./
//启动
hive
至此,hive配置完成
flume配置
将tar包解压到/home/bigdata下,然后配置环境变量,刷新环境变量
配置文件改名,同样是conf下的配置文件
配置flume-env.sh
//配置JAVA_HOME
export JAVA_HOME=/home/bigdata/jdk1.8.0_151
//测试
flum,使用tab键,可以补齐,配置成功
sqoop配置
将tar包解压到/home/bigdata下,然后配置环境变量,刷新环境变量
//配置文件改名,同样是conf下的配置文件
mv sqoop-env-template.sh sqoop-env.sh
//修改配置文件sqoop-env.sh
export HADOOP_COMMON_HOME=/home/bigdata/hadoop-2.8.3
export HADOOP_MAPRED_HOME=/home/bigdata/hadoop-2.8.3
export HIVE_HOME=/home/bigdata/hive-1.2.2
export ZOOCFGDIR=/home/bigdata/zookeeper-3.4.6
//将mysqljar包放到sqoop安装目录的lib下
//测试
sqoop help
azkaban配置
先在/homg/bigdata/下创建一个目录azkaban,然后将azkaban 的mysqljar包、executor包、server包解压到下面
将azkaban-web-server-2.5.0 命名为server
将azkaban-executor-server-2.5.0命名为executor
//进入mysql
//创建数据库azkaban
create database azkaban;
//进入azkaban数据库
use azkaban;
//将脚本导入数据库
source /home/bigdata/azkaban/azkaban-2.5.0/create-all-sql-2.5.0.sql
//创建ssl配置
keytool -keystore keystore -alias jetty -genkey -keyalg RSA
提示输入密码,输入123456
提示再次输入密码,123456
接下来5个全部直接回车
国家代码输入:CN
【no】后输入:y
接下来直接回车到底
//将生成的keystore复制到server下
//配置时区
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
server配置
在/home/bigdata/azkaban/server/conf下,编辑azkaban.properties,只需修改部分内容
default.timezone.id=Asia/Shanghai
database.type=mysql #数据库类型
mysql.port=3306 #端口号
mysql.host=node1 #数据库连接IP
mysql.database=azkaban #数据库实例名
mysql.user=root #数据库用户名
mysql.password=root #数据库密码
mysql.numconnections=100
jetty.keystore=keystore #SSL文件名
jetty.password=123456 #SSL文件密码
jetty.keypassword=123456 #Jetty主密码 与 keystore文件相同
jetty.truststore=keystore #SSL文件名
jetty.trustpassword=123456
保存退出,编辑azkaban-users.xml文件
追加内容
<user username="admin" password="admin" roles="admin,metrics" />
executor配置
在/home/bigdata/azkaban/executor/conf下,编辑azkaban.properties,只需修改部分内容
default.timezone.id=Asia/Shanghai
database.type=mysql #数据库类型(目前只支持mysql)
mysql.port=3306 #数据库端口号
mysql.host=node1 #数据库IP地址
mysql.database=azkaban #数据库实例名
mysql.user=root #数据库用户名
mysql.password=root #数据库密码
mysql.numconnections=100 #最大连接数
//azkaban服务启动
server服务器服务启动:
在server下执行:
bin/azkaban-web-start.sh
executor服务器执行
executor下执行:
bin/azkaban-executor-start.sh
//测试
webUI上输入:https://node01:8443,证书验证添加例外通过,来到登录页面,输入账户名密码(都是admin),配置成功。
5.大致流程介绍
大家搭建到这里,已经差不多完成了hadoop的整个工作流程所涉及到的一些组件,下面大致讲解一下各组件的作用,各个组件的详细详解,接下来都会完成。
flume:数据的采集,将从数据源采集来的数据,写到hdfs上
hdfs:看过之前文章的,肯定已经知道,hdfs其实就是负责存储数据的,将海量的数据存放在hdfs上,让hdfs来进行存储。
yarn:资源的管理和任务的调度(mrApplicationMaster),给任务分配资源
mapreduce:数据的分析、计算、汇总、清洗。
zookeeper:负责监听namenode,active的节点一旦挂机,就启动另一个standby状态的namenode,让其继续对外提供服务。
journal:管理edits文件,保证两个namenode的数据一致
hive:将结构化的数据映射成一张表,通过hql语句进行操作,本质是转换成mr程序来跑
sqoop:将hive中表的数据或者hdfs上的数据导出到web项目的本地关系型数据库。
web项目将数据做成报表的形式来展示。
这大致就是整个组件在项目中发挥的作用及流程。
6.到这里,HA的组件已经已经搭建了不少,我们可以发现,辅助组件的搭建都是基于namenode的,很方便、很快捷。不再需要三个节点上都同步上,hive的远程模式会涉及到其他两个节点,之后会讲到。我们这篇文章主旨就是搭建集群及各个组件,至于具体的组件的使用及原理,之后都会给大家说明,举例。其实这里的配置只是最基本的,大家也可以根据自己的需要,在这之上添加配置信息,都是可以的,很灵活。
本文详细介绍了如何搭建HA高可用集群,包括网络配置、免密配置和Hadoop集群的设置。已成功配置HDFS、MapReduce、YARN、Journal、Zookeeper等组件,并搭建了Hive、Flume、Sqoop、Azkaban等辅助工具。文章还概述了各组件的作用和在项目中的工作流程,为理解Hadoop生态系统提供了基础。
339

被折叠的 条评论
为什么被折叠?



