在搭建hadoop集群前需要实现搭建平台间的免密码登录以及配置好相应的jdk环境,这里不再给出详细配置过程,请自行进行相关配置,配置完成后进行hadoop集群的搭建
hadoop平台的搭建:
1,安装zookeeper
启动四台节点,三台作为zookeeper搭建的基础环境,以root用户登录其中的一台(server1),将zookeeper的压缩包上传
到server1并解压,新建/usr/apps/zookeeper目录,将解压后的目录移到新建目录下,切换到/usr/apps/zookeeper/zookeeper-3.4.6/conf目录下,由于只提供了模板文件,复制模板文件并做修改
mkdir /usr/apps/zookeeper
tar -zxf zookeeper-3.4.6.tar.gz
mv zookeeper-3.4.6 /usr/apps/zookeeper/
cd /usr/apps/zookeeper/zookeeper-3.4.6/conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg添加:
dataDir=/opt/zookeeper
dataLogDir=/opt/zookeeper/datalog
在clientport=2181下添加集群节点,奇数个
server.1=hadoop01:2888:3888
server.2=hadoop02:2888:3888
server.3=hadoop03:2888:3888
新建dataDir以及dataLogDir所指向的目录
mkdir /opt/zookeeper
mkdir /opt/zookeeper/datalog
在DataDir目录(/opt/zookeeper )下新建myid文件,myid文件写入的数值即在配置zoo.cfg所指定的数值即server1为1,server2为2,server3为3
vi /opt/zookeeper/myid(server1):
1
同步各个节点数据:
scp -r /usr/apps/zookeeper root@hadoop02:/usr/apps
scp -r /opt/zookeeper root@hadoop02:/opt
scp -r /usr/apps/zookeeper root@hadoop03:/usr/apps
scp -r /opt/zookeeper root@hadoop03:/opt
注意:这里需要修改myid文件,否则后续的启动将失败
设置环境变量,修改/etc/profile文件,添加
export ZOOKEEPER_HOME=/usr/apps/zookeeper/zookeeper-3.4.6
export PATH=$ZOOKEEPER_HOME/bin:$PATH
配置完成后需要使其生效
source /etc/profile
注意:设置环境变量需要在三台主机上都做,否则无法加载zookeeper的安装目录,在后续的启动过程中将找不到zookeeper服务所在的安装路径
设置hadoop用户权限
chmod -R 777 /usr/apps
chmod -R 777 /opt/zookeeper
因为在使用的过程中为避免出现失误操作,故不会以root用户进行登录,权限过大导致安全性级别降低,这需要在三台zookeeper集群中都做
在三个节点上启动zookeeper集群并查看其状态,注意:使用hadoop用户启动
zkServer.sh start
zkServer.sh status
2,安装hadoop
将hadoop安装压缩包上传到虚拟机(server1)中,并新建/usr/apps/hadoop目录然后将上传的压缩包解压并移入到新建的/usr/apps/hadoop目录下
mkdir /usr/apps/hadoop
tar -zxf cenos-6.6-hadoop-2.6.4.tar.gz
mv hadoop-2.6.4/ /usr/apps/hadoop/
将hadoop解压目录添加到环境变量中
vi /etc/profile:
export HADOOP_HOME=/usr/apps/hadoop/hadoop-2.6.4
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
配置完成后需要使其生效
source /etc/profile
接下来切换到hadoop配置文件所在目录修改hadoop的相关配置文件
cd /usr/apps/hadoop/hadoop-2.6.4/etc/hadoop
修改hadoop-env.sh文件
vi hadoop-env.sh:
export JAVA_HOME=/usr/apps/java/jdk1.7.0_80
修改core-site.xml
vi core-site.xml:
<configuration>
<!-- 指定hdfs的nameservice为rjxy -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://rjxy/</value>
</property>
<!-- 指定hadoop临时目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/apps/hadoop/hdpdata/</value>
</property>
<!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
</configuration>
修改hdfs-site.xml文件:
vi hdfs-site.xml:
<configuration>
<!--指定hdfs的nameservice为rjxy,需要和core-site.xml中的一致 -->
<property>
<name>dfs.nameservices</name>
<value>rjxy</value>
</property>
<!--rjxy下面有两个NameNode,分别是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.rjxy</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.rjxy.nn1</name>
<value>hadoop01:9000</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.rjxy.nn1</name>
<value>hadoop01:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.rjxy.nn2</name>
<value>hadoop02:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.rjxy.nn2</name>
<value>hadoop02:50070</value>
</property>
<!-- 指定NameNode的edits元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/rjxy</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/apps/hadoop/journaldata</value>
</property>
<!-- 开启NameNode失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.rjxy</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<!-- 使用sshfence隔离机制时需要ssh免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<!-- 配置sshfence隔离机制超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
修改mapred-site.xml复制一份mapred-site.xml.template命名为mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
vi mapred-site.xml
<configuration>
<!-- 指定mr框架为yarn方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!—历史服务器通常可以启动在一台独立的机器上 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop03:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop03:19888</value>
</property>
</configuration>
E.修改yarn-site.xml
<configuration>
<!-- 开启RM高可用 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
` <!-- 指定RM的cluster id -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value>
</property>
<!-- 指定RM的名字 -->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!-- 分别指定RM的地址 -->
<property>
name>yarn.resourcemanager.hostname.rm1</name>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop02</value>
</property>
<!-- 指定zk集群地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
配置完成后,修改slave文件,因为,因为要在hadoop01上启动HDFS、在hadoop02启动yarn,所以hadoop01上的slaves文件指定的是datanode的位置,hadoop02上的slaves文件指定的是nodemanager的位置。
vi /usr/apps/hadoop/hadoop-2.6.4/etc/hadoop/slaves
hadoop02
hadoop03
hadoop04
修改slaves文件后,修改windows主机的hosts文件
192.168.10.101 hadoop01
192.168.10.102 hadoop02
192.168.10.103 hadoop03
192.168.10.104 hadoop04
设置hadoop安装路径的权限(server1):
chmod -R 777 /usr/apps/hadoop
将配置好的hadoop拷贝到其它节点
scp -r /usr/apps/hadoop/ hadoop@hadoop02:/usr/apps
scp -r /usr/apps/hadoop/ hadoop@hadoop03:/usr/apps
scp -r /usr/apps/hadoop/ hadoop@hadoop04:/usr/apps
scp -r /etc/profile root@hadoop02:/etc
scp -r /etc/profile root@hadoop03:/etc
scp -r /etc/profile root@hadoop04:/etc
由于前面没有为server4赋予权限故在server4上为其hadoop用户设置权限
chmod -R 777 /usr/apps
各个节点:source /etc/profile使配置的环境变量生效
启动zookeeper集群(分别在hadoop01、hadoop02、hadoop03上启动zk)
注意:启动zookeeper集群时要以hadoop用户启动
zkServer.sh
注意:此命令在哪个目录下执行,则在该目录下产生out日志
启动journalnode(分别在hadoop01、hadoop02、hadoop03上执行)
同样启动journalnode以hadoop用户启动
cd /usr/apps/hadoop/hadoop-2.6.4
sbin/hadoop-daemon.sh start journalnode
启动完成后接下来格式化hdfs
hdfs namenode -format注意:格式化须小心,若格式化失败,则集群搭建失败,不可重复格式化
将hadoop01中初始化内容复制到hadoop2中在已经格式化的hadoop01中启动namenode
sbin/hadoop-daemon.sh start namenode
hdfs namenode –bootstrapStandby
格式化ZKFC(在hadoop01上执行一次即可)
hdfs zkfc –formatZK
启动HDFS(在hadoop01上执行)
start-dfs.sh
启动YARN(在hadoop01和hadoop02上开启yarn框架)
start-yarn.sh
启动历史服务器(hadoop03)
mr-jobhistory-daemon.sh start historyserver
Hive的搭建
在1个节点完成MySQL的安装,在2个节点完成Hive的安装与配置,启动Hive和MySQL,验证Hive与MySQL的关系。
首先启动俩个节点,在其中一个节点上搭建mysql,在另一台节点上搭建hive,这里选hadoop01作为搭建mysql的节点,在hadoop02上搭建hive
hadoop01:
首先将安装mysql需要用到的压缩包上传到Hadoop01中的/usr/apps目录下
MySQL-client-5.6.24-1.linux_glibc2.5.x86_64.rpm
MySQL-server-5.6.24-1.linux_glibc2.5.x86_64.rpm
上传完成后继续上传perl相关的rpm包用于安装perl依赖
libaio-0.3.107-10.el6.x86_64.rpm
perl-5.10.1-136.el6.x86_64.rpm
perl-libs-5.10.1-136.el6.x86_64.rpm
perl-Module-Pluggable-3.90-136.el6.x86_64.rpm
perl-Pod-Escapes-1.04-136.el6.x86_64.rpm
perl-Pod-Simple-3.13-136.el6.x86_64.rpm
perl-version-0.77-136.el6.x86_64.rpm
上传完成后,以root用户卸载原有的mysql
rpm -qa |grep -i mysql
rpm -e --nodeps mysql-libs-5.1.73-3.el6_5.x86_64
删除mysql相关目录
#whereis mysql
# rm -rf /usr/lib64/mysql/
# rm -rf /usr/share/mysql/
安装perl依赖
rpm -ivh perl*
rpm -ivh libaio-0.3.107-10.el6_5.x86_64.rpm
安装Mysql-client和Mysql-server,因为mysql安装包在/usr/apps下,故要首先切换到/usr/apps下,然后再进行安装
cd /usr/apps/
rpm -ivh MySQL*
安装完成后修改配置文件位置
cp /usr/share/mysql/my-default.cnf /etc/my.cnf
初始化Mysql及设置密码
/usr/bin/mysql_install_db
/sbin/service mysql restart
查看root账户的密码
cat /root/.mysql_secret
The random password set for the root user at Sun May 26 15:59:24 2019 (local time): Adt2RFh9Cohb3i5Y
mysqladmin -u root -p password "root"
Enter password: Adt2RFh9Cohb3i5Y
如果多次输入密码无效可以试试下面的方法:
mysqld_safe --skip-grant-tables &
再输入mysql -u root -p进入数据库
use mysql;
select host,user,password from user;
update user set password=password('hadoop') where user='root';
update user set host='%' where user='root' and host='localhost';
flush privileges;
设置开机自启动:
chkconfig mysql on
安装Hive:
新建hive目录:
mkdir /usr/apps/hive/hive-1.2.1
将hive安装包上传到hadoop01并解压
tar -zxf apache-hive-1.2.1-bin.tar.gz
将解压后的目录移到新建的hive目录下:
mv apache-hive-1.2.1-bin /usr/apps/hive/hive-1.2.1/
配置环境变量:
export HIVE_HOME=/usr/apps/hive/hive-1.2.1
export PATH=$PATH:$HIVE_HOME/bin
让配置文件生效:
source /etc/profile
配置环境变量成功后,修改配置文件
1,hive-site.xml
cd /usr/apps/hive/hive-1.2.1/conf/
touch hive-site.xml
vi hive-site.xml:
<configuration>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hadoop</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop01:3306/hivedb?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>mysql
<value>com.mysql.jdbc.Driver</value>
</property>
</configuration>
2,hive-env.sh
cp hive-env.sh.template hive-env.sh
vi hive-env.sh:
export JAVA_HOME=/usr/apps/java/jdk_1.7.0_80
export HADOOP_HOME=/usr/apps/hadoop/hadoop-2.6.4
export HIVE_HOME=/usr/apps/hive/hive-1.2.1
3,log4j
cp hive-log4j.properties.template hive-log4j.properties
vi hive-log4j.properties:
修改
#log4j.appender.EventCounter=org.apache.hadoop.hive.shims.HiveEventCounter
为
log4j.appender.EventCounter=org.apache.hadoop.log.metrics.EventCounter
安装,ysql JDBCConnector
上传mysql-connector-java-5.1.31-bin.jar到hadoop01
将mysql-connector-java-5.1.31-bin.jar移到/usr/apps/hive/hive-1.2.1/lib下
mv /root/mysql-connector-java-5.1.31-bin.jar /usr/apps/hive/hive-1.2.1/lib/
删除原jline版本:
rm -rf /usr/apps/hadoop/hadoop-2.6.4/share/hadoop/yarn/lib/jline-0.9.94.jar
拷贝lib目录下的jline的包替换原来的jline包
cp /usr/apps/hive/hive-1.2.1/lib/jline-2.12.jar /usr/apps/hadoop/hadoop-2.6.4/share/hadoop/yarn/lib
配置hive元数据库:
对元数据库进行赋权,开放远程连接,开放localhost连接:
grant all privileges on *.* to 'root'@'hadoop01' IDENTIFIED BY 'hadoop' WITH GRANT OPTION;
grant all privileges on *.* to 'root'@'%' IDENTIFIED BY 'hadoop' WITH GRANT OPTION;
flush privileges;
将/usr/apps/hive复制到hadoop02:
scp -r /usr/apps/hive/ hadoop@hadoop02:/usr/apps/
将/etc/profile复制到hadoop02:
scp -r /etc/profile root@hadoop02:/etc
切换到hadoop02虚拟机进行操作
使配置文件生效:
source /etc/profile
删除原jline版本:
rm -rf /usr/apps/hadoop/hadoop-2.6.4/share/hadoop/yarn/lib/jline-0.9.94.jar
拷贝lib目录下的jline的包替换原来的jline包
cp /usr/apps/hive/hive-1.2.1/lib/jline-2.12.jar /usr/apps/hadoop/hadoop-2.6.4/share/hadoop/yarn/lib
Hbase的搭建:
首先将所需要的hbase的压缩包上传到整个集群的master节点上然后新建/usr/apps/hbase目录
解压上传的压缩包将其移到新建的/usr/apps/hbase目录下
tar -zxf hbase-0.99.2-bin.tar.gz
mv hbase-0.99.2 /usr/apps/hbase/
移动操作完成后修改环境变量文件
vi /etc/profile:
export HBASE_HOME=/usr/apps/hbase/hbase-0.99.2
export PATH=$PATH:$HBASE_HOME/bin
修改完成后让配置的环境变量生效
source /etc/profile
环境变量配置完成后,修改hbase的相关配置文件首先修改hbase-env.sh文件:
vi /usr/apps/hbase/hbase-0.99.2/conf/hbase-env.sh
export JAVA_HOME=/usr/apps/java/jdk1.7.0_80
export HBASE_MANAGES_ZK=false
export HBASE_CLASS=/usr/apps/hadoop/hadoop-2.6.4/etc/hadoop
接着修改hbase-site.xml文件
vi /usr/apps/hbase/hbase-0.99.2/conf/hbase-site.xml:
<property>
<name>hbase.master.maxclockskew</name>#时间同步允许的时间差
<value>180000</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://rjxy/hbase</value>#hbase共享目录,持久化hbase数据
</property>
<property>
<name>hbase.cluster.distributed</name>#是否分布式运行,false即为单机
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>#zookeeper地址
<value>hadoop01,hadoop02,hadoop03</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>#与安装zookeepere的datadir保持一致
<value>/opt/zookeeper</value>
</property>
修改regionservers文件:
vi /usr/apps/hbase/hbase-0.99.2/conf/regionservers
把hadoop的hdfs-site.xml和core-site.xml 放到hbase/conf下:
cp /usr/apps/hadoop/hadoop-2.6.4/etc/hadoop/hdfs-site.xml /usr/apps/hbase/hbase-0.99.2/conf/
cp /usr/apps/hadoop/hadoop-2.6.4/etc/hadoop/core-site.xml /usr/apps/hbasehbase-0.99.2/conf/
将配置好的hbase-0.99.2发送到hadoop02、03、04:
scp -r /usr/apps/hbase hadoop@hadoop02:/usr/apps/
scp -r /usr/apps/hbase hadoop@hadoop03:/usr/apps/
scp -r /usr/apps/hbase hadoop@hadoop04:/usr/apps/
将/etc/profile发送到hadoop02,03,04
scp -r /etc/profile root@hadoop02:/etc/
scp -r /etc/profile root@hadoop03:/etc/
scp -r /etc/profile root@hadoop04:/etc/
在02,03,04上让配置的环境变量生效
source /etc/profile
启动集群,验证hbase:
zkServer.sh start
start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh?start?historyserver
start-hbase.sh
hbase shell