最最最详细的Hadoop+HBase+Zookeeper+Hive完全分布式环境搭建教程

文章目录

        • 一、准备工作
        • 二、hadoop搭建
          • 1.配置主机名和主机列表
          • 2.配置免密登录
          • 3.配置环境变量
          • 4.配置hadoop配置文件
        • 三、HBase配置
          • 1.配置hbase-site.xml文件
          • 2.配置hbase-env.sh文件
          • 3.配置log4j.properties文件
          • 4.配置regionservers
        • 四、集群搭建
          • 1.修改hdfs-site.xml文件
          • 2.修改slaves文件
          • 3.复制到另外两台机器上
        • 五、Zookeeper搭建
          • 1.配置zoo.cfg文件
          • 2.创建myid文件并启动zookeeper
          • 3.启动hbase
          • 4.测试hbase
          • 5.最常见的异常
            • (1).zookeeper不稳定
            • (2).三台机器的网络时间不同步
        • 六、Hive搭建
          • 1.Mysql配置和创建用户和数据库
          • 2.修改hive-env.sh文件
          • 3.修改hive-site.xml文件
          • 4.修改hive-log4j-properties文件
          • 5.上传Mysql的connecter的jar包
          • 6.创建hdfs文件夹,并赋予权限
          • 7.初始化hive并启动hive
        • 七、总结

一、准备工作

虽然前面已经给出了Hadoop搭建的教程,但是因为这里要将Hadoop、HBase和Hive三者一起搭建,所以这里还是从头开始搭建一遍,需要准备的材料如下:
最最最详细的Hadoop+HBase+Zookeeper+Hive完全分布式环境搭建教程_第1张图片
材料地址:https://pan.baidu.com/s/19s05T_aVTOi2i1Cpi_uQ1w 提取码:tzrm
下面开始解压这些压缩包,我这里事先在根目录新建一个临时存放压缩包的目录software,将上面8个文件全都拖进去,然后逐个解压到opt目录下,在对其简化一些解压后的名字,这里我就不做详细说明,相信你们都已经熟练操作解压步骤了,我只展示一下我修改后的目录名称:

[root@hadoop1 opt]# ll
total 40
drwxr-xr-x. 17 1106 4001  4096 Jun 26 18:22 hadoop
drwxr-xr-x. 32 1106 4001  4096 Jun 26 14:36 hbase
drwxr-xr-x. 11 1106 4001   197 Mar 28  2018 hive
drwxr-xr-x.  7   10  143   245 Jul  4  2019 java8
drwxr-xr-x. 10 1000 1000  4096 Jun 28 22:50 zookeeper

其中Mysql的两个压缩包我们先不管他们,后面配到Hive再来对它们进行解压。

二、hadoop搭建

1.配置主机名和主机列表

首先就是新建好一台虚拟机,配置好网络地址,我这里配置的是:192.168.234.111。下面开始修改hostname和hosts,以便后面远程连接时比较方便。下面我就简化步骤了,详细的可以看我之前写的hadoop环境搭建。

vi /etc/hostname

第一台的主机名就叫hadoop1。
然后配置主机列表:

vi /etc/hosts

我这里提前增加了三个主机名:hadoop1、hadoop2、hadoop3,为后面集群搭建要三台虚拟机做准备。

2.配置免密登录

这里我们可以先将私钥和免密登录设置好:

 ssh-keygen -t rsa -P ""    --生成私钥
cat .ssh/id_rsa.pub > .ssh/authorized_keys   复制成公钥
3.配置环境变量

因为我们后面需要用到jdk、hadoop、hbase、hive,所以这里配置环境变量就直接一次性配置完成,后面的复制虚拟机就可以不需要再对另外两台机器再次配置了。

export JAVA_HOME=/opt/java8
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/dt.jar:$JAVA_HOME/tools.jar:$JAVA_HOME/rt.jar
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
export HADOOP_HOME=/opt/hadoop
export HIVE_HOME=/opt/hive
export HBASE_HOME=/opt/hbase
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$JAVA_HOME/bin:$JRE_HOME/bin:$HBASE_HOME/bin:$HIVE_HOME/bin

就这么几个,相信你们能记得下来,我这里每一个名称的使用都是我改过后的名字,注意一下。

4.配置hadoop配置文件

这里我就不在赘述了,相信你们已经搭了几百遍了,不清楚的可以继续参考我之前的hadoop环境搭建。然后就可以尝试启动hadoop,也可以用连接网页测试。

三、HBase配置

这里直接切到/opt/hbase/conf/下,然后开始配置相关文件。

1.配置hbase-site.xml文件

下面的配置信息可能很长,需要修改的部分我已经在后面加了注释,一共有两个地方。



hbase.rootdir
hdfs://hadoop1:9000/hbase             ----修改成自己的主机名
The directory shared by region servers.


  hbase.cluster.distributed
  true


  hbase.master.port
  60000


  hbase.zookeeper.quorum
  hadoop1,hadoop2,hadoop3    ----集群的每一个主机名,这里可以提前写好,因为集群我们还没有配置


  hbase.regionserver.handler.count
  300


  hbase.hstore.blockingStoreFiles
  70


  zookeeper.session.timeout
  60000


hbase.regionserver.restart.on.zk.expire
true

Zookeeper session expired will force regionserver exit.
Enable this will make the regionserver restart.



  hbase.replication
  false


  hfile.block.cache.size
  0.4


  hbase.regionserver.global.memstore.upperLimit
  0.35


  hbase.hregion.memstore.block.multiplier
  8


  hbase.server.thread.wakefrequency
  100


  hbase.master.distributed.log.splitting
  false


  hbase.regionserver.hlog.splitlog.writer.threads
  3


  hbase.hstore.blockingStoreFiles
  20


hbase.hregion.memstore.flush.size
134217728


  hbase.hregion.memstore.mslab.enabled
  true


2.配置hbase-env.sh文件
export HBASE_HEAPSIZE=4000
export HBASE_OFFHEAPSIZE=1G
export JAVA_HOME=/opt/java8
export HBASE_OPTS="-Xmx4g -Xms4g -Xmn128m -XX:+UseParNewGC  -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -verbose:gc  -XX:+PrintGCDetails -XX:+PrintGCTimeStamps  -Xloggc:$HBASE_HOME/logs/gc-$(hostname)-hbase.log"     ----这里的Xmx4g -Xms4g是基于自己虚拟机设置的内存来配置的,因为我配置的是4096M(4G),所以这里写的是4G。
export HBASE_MANAGES_ZK=false
export HBASE_CLASSPATH=/opt/hadoop     ----hadoop配置文件位置

这些参数文件里应该都是注释掉的,可以直接添加在文件的最后,但还是要看仔细,防止名称一样,路径不一样。

3.配置log4j.properties文件
hbase.root.logger=WARN,console
log4j.logger.org.apache.hadoop.hbase=WARN

这里需要自己找一下这两个配置,原本都是INFO,需要改成WARN。只对WARN以上级别的日志进行保存。

4.配置regionservers

这里就是加上集群的所有节点名就可以了。配置完后这里先不启动,先去搭建集群和配置zookeeper后再启动。

四、集群搭建

这里前面和之前hadoop集群搭建一样,只要注意修改主机地址、再次生成MAC地址、修改主机名。
完成后开始配置三台机器的远程连接。
另外两台机器也要配置好私钥、免密登录。然后实现远程连接:

 ssh-copy-id -i .ssh/id_rsa.pub -p22 [email protected]
 ssh-copy-id -i .ssh/id_rsa.pub -p22 [email protected]

然后另外两台也对其他两台进行连接。

1.修改hdfs-site.xml文件


  dfs.replication
  3   --改成3个副本


  dfs.namenode.secondary.http-address
  hadoop2:50090   ----hadoop2作为namenode的从元数据节点,合并NameNode的edit logs到fsimage文件中,
  辅助NameNode将内存中元数据信息持久化


2.修改slaves文件
hadoop1
hadoop2
hadoop2
3.复制到另外两台机器上
[root@hadoop01 hadoop]# scp /opt/hadoop/etc/hadoop/hdfs-site.xml root@hadoop2:/opt/hadoop/etc/hadoop/hdfs-site.xml
[root@hadoop01 hadoop]# scp /opt/hadoop/etc/hadoop/hdfs-site.xml root@hadoop3:/opt/hadoop/etc/hadoop/hdfs-site.xml
[root@hadoop01 hadoop]# scp /opt/hadoop/etc/hadoop/slaves root@hadoop2:/opt/hadoop/etc/hadoop/slaves
[root@hadoop01 hadoop]# scp /opt/hadoop/etc/hadoop/slaves root@hadoop3:/opt/hadoop/etc/hadoop/slaves

这样我们集群就搭建完毕,下面可以开始配置zookeeper。

五、Zookeeper搭建

zookeeper是hadoop和hbase的一个重要组件。直接切到zookeeper目录下的conf目录。可以看到其目录下有一个zoo.cfg文件(如果不叫这个名字,可能是zoo.xxx.cfg,直接改成zoo.cfg就可以)。然后开始配置这个文件。

1.配置zoo.cfg文件
# The number of milliseconds of each tick
tickTime=2000    --时间单元
maxClientCnxns=0     ----这里是指单个客户端和单个服务器之间连接数的限制,我们将其设置成0,不作任何限制。
# The number of ticks that the initial
# synchronization phase can take
initLimit=50   ----集群中的服务器和主服务器之间的初始化连接时间,50表示50个tickTime时间
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5    ----主节点和分节点请求和应答时间
# the directory where the snapshot is stored.
dataDir=/opt/hadoop/zookeeperdata    ----存储快照文件snapshot的目录
# the port at which the clients will connect
clientPort=2181    ----客户端连接server的端口号,一般设置为2181
server.1=hadoop1:2888:3888
server.2=hadoop2:2888:3888
server.3=hadoop3:2888:3888    ----每台机器的服务器要与主机名对应
2.创建myid文件并启动zookeeper

配置完后,将这个文件复制到另外两台机器上,完成之后,在刚刚配置存储快照目录下面新建一个myid文件,里面写上对应的server号,例如hadoop1下的myid文件就要填入1。另外两台重复此步骤。配置完成后就可以启动zookeeper了:

[root@hadoop1 zookeeper]# ./bin/zkServer.sh start
3.启动hbase

成功启动zookeeper后,便可以开始启动hbase了,切到hbase目录下,输入命令启动hbase:

start-hbase.sh

能够成功启动就可以jps查看所有启动的进程,有下面几个:

[root@hadoop1 hbase]# jps
6626 Jps
3242 NameNode
4186 HMaster
3371 DataNode
2700 QuorumPeerMain
3612 ResourceManager
3710 NodeManager
4334 HRegionServer

zookeeper成功启动的进程是:2700 QuorumPeerMain
hbase成功启动的进程是:4186 HMaster 和 4334 HRegionServer
如果不能成功显示这些,因为报错的问题太不统一,这里如果有问题,需要自己去解决了qaq。

4.测试hbase

成功启动hbase后,我们可以测试一下hbase,输入命令:

hbase shell

跳出hbase编辑命令行,类似于mysql:

[root@hadoop1 hbase]# hbase shell
2020-06-29 00:58:03,948 INFO  [main] Configuration.deprecation: hadoop.native.lib is deprecated. Instead, use io.native.lib.available
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/hbase/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
HBase Shell; enter 'help' for list of supported commands.
Type "exit" to leave the HBase Shell
Version 1.2.0-cdh5.14.2, rUnknown, Tue Mar 27 13:31:54 PDT 2018
hbase(main):001:0>

能够成功跳出此信息的,可以先查看一下当前的list信息,直接输入list回车,应该显示的是0rows,然后可以使用命令创建一个table:

create 'stu','name','age'  ----table名stu,列字段名name 和age

然后回车,再次输入list查看一下,会显示table名:

hbase(main):001:0> create 'stu','name','age'
0 row(s) in 1.4660 seconds

=> Hbase::Table - stu
hbase(main):002:0> list
TABLE
aaa
hello1
stu
3 row(s) in 0.0150 seconds
=> ["aaa", "hello1", "stu"]
hbase(main):003:0>

我这里之前已经建了两个table了。所以一共是3rows。

5.最常见的异常

异常:Can’t get master address from ZooKeeper; znode data == null
这个问题会在hbase shell 跳出命令行后输入list产生,出现此问题,有一下两种可能

(1).zookeeper不稳定

这里的解决办法就是重启hbase,先stop掉,然后再start。

(2).三台机器的网络时间不同步

参考博客:ntp同步时间

六、Hive搭建

1.Mysql配置和创建用户和数据库

配置hive之前,先将两个Mysql的rpm文件进行解压,这里我就不多做说明,你们已经做烂了。
解压完之后,在mysql命令行输入:

use mysql;
create user 'bigdata'@'hadoop1' IDENTIFIED BY ’ok‘;    ----创建用户
create database hive_metadata    ----创建数据库
grant all privileges on "." to  'bigdata'@'hadoop1'      ----给hadoop1的bigdata用户赋所有权限
flush privileges    ----使赋权即时生效

ok之后开始配置hive配置文件。

2.修改hive-env.sh文件

切花到/opt/hive/conf目录下,修改hive-env.sh文件(这里可能是hive-env.sh.template文件,修改成hive-env.sh文件):

export HADOOP_HOME=/opt/hadoop
export HIVE_CONF_DIR=/opt/hive/conf
export HIVE_AUX_JARS_PATH=/opt/hive/lib
export JAVA_HOME=/opt/java8

添加这四个路径信息。

3.修改hive-site.xml文件

hive-site.xml文件是根据hive-default.xml.template 修改过后的,如果没有这个文件,需要自己写一个hive-site.xml文件:





hive.metastore.warehouse.dir
/opt/hive/warehouse    ----hive目录


hive.metastore.local
true     ----是否是本地的hive库



javax.jdo.option.ConnectionURL      ----URL
jdbc:mysql://127.0.0.1:3306/hive_metadata?createDatabaseIfNotExist=true


javax.jdo.option.ConnectionDriverName    ----DRIVER
com.mysql.jdbc.Driver


javax.jdo.option.ConnectionUserName     ----USERNAME
root


javax.jdo.option.ConnectionPassword     ----PASSWORD
ok   


4.修改hive-log4j-properties文件
hive.log.threshold=ALL
hive.root.logger=WARN,DRFA
hive.log.dir=/opt/soft/hive/logs
hive.log.file=hive.log
5.上传Mysql的connecter的jar包

将mysql-connector-java-5.1.38.jar上传到/opt/hive/lib下。
资料链接:jar文件地址 提取码:2do2

6.创建hdfs文件夹,并赋予权限
hadoop fs -mkdir -p /opt/hive/warehouse   ----创建warehouse目录
hadoop fs -chmod 777 /user/opt/warehouse   ----赋权
hadoop fs -chmod -R 777 /opt/hive    ----给hive也赋权
7.初始化hive并启动hive
schematool -dbType mysql -initSchema     ----初始化

初始化成功后,直接输入:hive,然后就可以跳出hive命令行:

hive> show tables;
OK
aaa
Time taken: 3.888 seconds, Fetched: 1 row(s)
hive>

这里的aaa是我之前在Mysql那边建的一个aaa表,下面就可以使用mysql命令进行一系列操作了。

七、总结

讲实话,这么多操作,不练习个几十遍,怎么能记得住。这里面有太多的坑,需要自己一步一步百度搜答案,总之,加油吧!

你可能感兴趣的:(hadoop,hbase,hive,hadoop,hbase,hive,zookeeper)