Hive数据仓库安装

mapreduce 程序编写

1-1Hive与传统结构化查询语言对比

HiveQLSQL(结构化查询语言)
ANSI SQL不完全支持支持
更新insert OVERWRITE\INTO TABLEUPDATE\INSERT\DELETE
事务不支持支持
模式读模式写模式
数据保存HDFS块设备、本地文件系统
延时高低
多表插入支持不支持
子查询完全支持只能用在From子句中
视图Read-onlyUpdatable
可扩展性高低
数据规模大小

1-2 Hive在Hadoop生态系统所处位置

hive1.png
环境准备

组件 进程 master node1 node2
HDFS NameNode √
SecondaryNameNode √
DataNode √ √
Yarn(MapReduce2.0) ResourceManager √
NodeManager √ √
HIVE Hive Client √
Hive Server √
Mysqlserver √

安装所需要软件包如下所示:

1.apache-hive-2.3.6-bin.tar.gz:Hive组件安装包

下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/hive/

2.mysql-connector-java-5.1.5-bin.jar:Mysql数据库的连接器包

下载地址:https://dev.mysql.com/downloads/connector/j/

需要将apache-hive-2.3.6-bin.tar.gz上传到master 节点

准备好软件包node2节点执行

(1)安装 EPEL 源和mariadb:

[root@node2 ~\]#yum -y install epel-release mariadb mariadb-server wget

(2)安装 MySQL server 包,下载源安装包:

wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm

(3)安装源:

[root@node2 ~\]#rpm -ivh mysql57-community-release-el7-8.noarch.rpm

查看是否安装成功:

[root@node2 ~\]#cd /etc/yum.repos.d

目录下会有文件:

Centos-Vault.repo epel-testing.repo mysql-community-source.repo epel.repo mysql-community.repo

(4)启动MySql服务

#重载所有修改过的配置文件:
[root@node2 ~\]#systemctl daemon-reload
#开启MySql服务:
[root@node2 ~\]#systemctl start mysqld
#开机MySql自启:
[root@node2 ~\]#systemctl enable mysqld
#获取初始密码:
[root@node2 ~\]#grep password /var/log/mysqld.log
#登陆 MySQL:
[root@node2 ~\]#mysql -uroot -p

(5)更改数据库安全策略

#设置密码强度为低级:
[root@node2 ~\]#set global validate_password_policy= 0;
#设置密码长度:
[root@node2 ~\]#set global validate_password_length=4;
#修改本地密码:
[root@node2 ~\]#alter user 'root'@'localhost' identified by '000000';
#退出:
Exit
#以新密码登录 MySQL:
mysql -uroot -p000000
#创建用户:
create user 'root'@'%' identified by '000000';
#允许远程连接:
grant all privileges on *.* to 'root'@'%' with grant option;
#刷新权限:f
lush privileges;

(7)Node1 上安装 hive

master 中操作如下:

mkdir -p /usr/hive

tar -zxvf /opt/soft/apache-hive-2.3.6-bin.tar.gz -C /usr/hive/

然后再node1节点也创建hive文件夹

scp -r /usr/hive/apache-hive-2.3.6-bin root@node1:/usr/hive/

(8)修改环境变量

修改/etc/profile 文件设置 hive 环境变量。(master 和 node1的值 )。

vi /etc/profile

export HIVE_HOME=/usr/hive/apache-hive-2.3.6-bin

export PATH=\$PATH:\$HIVE_HOME/bin

验证环境变量

source /etc/profile

(9)修改配置文件

将上传到lib的mysql-connector-java-5.1.5-bin.jar分发到node1

scp /lib/mysql-connector-java-5.1.5-bin.jar

root@node1:/usr/hive/apache-hive-2.3.6-bin/lib

然后修改node1 的配置文件hive-env.sh(在/usr/hive/apache-hive-2.3.6-bin/conf文件)

生成配置文件 

cp hive-env.sh.template hive-env.sh

 在配置文件添加:

HADOOP_HOME=/opt/bigdata/hadoop-3.0.0(根据自己设置来)

创建hive-site.xml文件

[root@node1 conf]# vi hive-site.xml 
<configuration> 
        <property>
                <name>hive.metastore.warehouse.dir</name>
                <value>/user/hive_remote/warehouse</value>
        </property> 
        <property> 
                <name>javax.jdo.option.ConnectionURL</name> 
                <value>jdbc:mysql://node2:3306/hive?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>123456</value> 
        </property> 
        <property>
                <name>hive.metastore.schema.verification</name> 
                <value>false</value> 
        </property>
        <property> 
                <name>datanucleus.schema.autoCreateAll</name>
                <value>true</value> 
        </property>

在master节点配置客户端

由于客户端需要和 Hadoop 通信,所以需要更改 Hadoop 中 jline 的版本。即 保留一个高版本的 jline jar 包,从 hive 的 lib 包中拷贝到 Hadoop 中 lib 位置为/opt/bigdata/hadoop-3.0.0/share/hadoop/yarn/lib。

cp /usr/hive/apache-hive-2.3.6-bin/lib/jline-2.12.jar  /opt/bigdata/hadoop-3.0.0/share/hadoop/yarn/lib/

同样修改 hive-env.sh

[root@master conf]# vi hive-site.xml 
<configuration>
        <property>
                <name>hive.metastore.warehouse.dir</name>
                <value>/user/hive_remote/warehouse</value> 
        </property> 
        <property>
                <name>hive.metastore.local</name> 
                <value>false</value> 
        </property>
        <property>
                <name>hive.metastore.uris</name> 
                <value>thrift://node1:9083</value> 
        </property>
</configuration> 

启动hive

在node1节点输入bin/hive(在/usr/hive/apache-hive-2.3.6-bin目录下输入)

同样在master输入  bin/hive

成功进入hive它会显示 hive>

在hive内输入: hive>show databases;

查看是否返回数据库列表,返回则成功。

同时输入jps查看进程会显示RunJar

HBase分布式数据库安装

HBASE优势:

1.线性扩展,随着数据量增多可以通过节点扩展进行支撑

2.数据存储在hdfs上,备份机制健全

3.通过zookeeper协调查找数据,访问速度快。

4.写入性能高,且几乎可以无限扩展。

5.海量数据下(100TB级别表)的查询依然能保持在5ms级别。

6.存储容量大,不需要做分库分表,切勿维护简单。

7.表的列可以灵活配置,1行可以有多个非固定的列。

HBase与关系型数据库的区别
HBaseRDBMS(关系型数据库)
硬件架构类似于Hadoop的分布式集群,硬件成本低廉传统的多核系统,硬件成本昂贵
容错性由软件架构实现,由于采用多节点,所以不存在一点或几点宕机一般需要额外硬件设备实现HA
数据库大小PBGB、TB
数据排布方式稀疏的、分布的多维的Map以行和列组织
数据类型Bytes丰富的数据类型
事务支持ACID只支持单个Row级别全面的ACID支持,对Row和表
查询语言只支持Java API(除非与其他框架一起使用,如Phoenix、Hive)SQL
索引只支持Row-Key(除非与其他框架一起使用,如Phoenix、Hive)支持
吞吐量百万查询/每秒数千查询/每秒

表1.4.2 HBase在Hadoop生态系统所处位置

1.环境准备

增加HBase组件

组件 进程 master node1 node2
HDFS NameNode √
SecondaryNameNode √
DataNode √ √
Yarn(MapReduce2.0) ResourceManager √
NodeManager √ √
HIVE Hive Client √
Hive Server √
Mysqlserver √
HIVE HBase Server √
HBase Client √

在表中我们可以看出,我们把HBase Server安装在node1节点,HBase Client安装在了master节点,MySql Server安装在node2节点。

本次安装需要软件包如下所示:

1.hbase-1.2.4-bin.tar.gz:HBase安装包

下载地址:https://hbase.apache.org/

2.jdk-8u171-linux-x64.tar.gz

下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

2.基础环境搭建

首先我们需要将java包解压并配置生效java环境变量(前面章节有)

然后我们配置hbase环境变量

vi /etc/profile

export HBASE_HOME=/usr/hbase/hbase-1.2.4

export PATH=\$PATH:\$HBASE_HOME/bin

生效下环境变量

source /etc/profile

然后创建hbase安装目录/usr/hbase,然后将hbase压缩包解压到安装目录

tar -zxvf hbase-1.2.4-bin.tar.gz -C /usr/hbase/

3.hbase配置 

修改配置文件hbase-env.sh

vi /usr/hbase/hbase-2.2.2/conf/hbase-env.sh 

export HBASE_MANAGES_ZK=false

export JAVA_HOME=/usr/java/jdk1.8.0_171

export HBASE_CLASSPATH=/opt/bigdata/hadoop-3.0.0/etc/hadoop/

配置hbase-site.xml

vi /usr/hbase/hbase-2.2.2/conf/hbase-site.xml
<configuration>
        <property>
                <name>hbase.rootdir</name>
                <value>hdfs://master:9000/hbase</value>
        </property>
        <property>
                <name>hbase.cluster.distributed</name>
                <value>true</value>
        </property>
        <property>
                <name>hbase.master</name>
                <value>hdfs://master:6000</value>
        </property>
        <property>
                <name>hbase.zookeeper.quorum</name>
                <value>master,node1,node2</value>
        </property>
        <property>
                <name>hbase.zookeeper.property.dataDir</name>
                <value>/usr/zookeeper/zookeeper-3.4.10</value>
        </property>
</configuration>

 配置regionservers

vi /usr/hbase/hbase-2.2.2/conf/regionservers

node1

node2

拷贝文件到hdfs

cp /opt/bigdata/hadoop-3.0.0/etc/hadoop/hdfs-site.xml /usr/hbase/hbase-2.2.2/conf/

cp /opt/bigdata/hadoop-3.0.0/etc/hadoop/core-site.xml /usr/hbase/hbase-2.2.2/conf/

分发hbase包到其他节点

scp -r /usr/hbase/ node1:/usr/

scp -r /usr/hbase/ node2:/usr/

4.启动hbase

在保证hadoop和zookeeper启动的情况下我们输入

/usr/hbase/hbase-2.2.2/bin/start-hbase.sh

我们的hbase就启动了

使用jps查看进程

master节点出现HMaster

node1节点出现HRegionServer