Hadoop Hive Spark Metabase集成

###################################

本文全部为单节点部署配置,不涉及任何集群。

###################################

 

前提

安装JDK1.8

配置ssh免密登录

mongoDB导出CSV格式的数据文件

mongoexport导出文件格式支持csv和json,不同的是csv格式必须显示的指定要导出的字段:

mongoexport -d rbac -c rbacs -o d:/web/rbac.csv --type csv -f name,type

举例:导出消息中心的message_ali集合下的日志记录
./mongoexport -d message_center -c message_ali -o message_center.message_ali.json --type csv -f _id,_class,appId,method,apiKey,messageType,createTime,bizContent

Hadoop安装配置:

1.Hadoop官网下载压缩包,解压后如下图

2.万年不变的配置环境变量:

vim /etc/profile

export HADOOP_HOME=/mnt/xvdb/hadoop/hadoop-2.7.7

export PATH=$PATH:$HADOOP_HOME/bin

3.万年不变的配置Hive的配置文件:

主要修改core-site.xml和hdfs-site.xml这两个配置文件,修改内容如下:

core-site.xml

 

hdfs-site.xml

 

4.HDFS格式化

./bin/hdfs namenode -format

5.HDFS创建目录

创建目录主要服务于hive

hdfs dfs -mkdir /user

hdfs dfs -mkdir /user/hive

hdfs dfs -mkdir /user/hive/warehouse

修改读写权限

hdfs dfs -chmod g+w /user/hive/warehouse

6.启动Hadoop

./sbin/start-dfs.sh

启动后可以用jps看下是否有DataNode和NameNode两个服务,如果没有或者是缺一,表示启动有问题,需要检查。

 

Hive安装配置:

1.Hive官网下载压缩包,解压后如下图

2.驱动配置:

用mysql存储Hive相关的元数据,默认的derby不能同时保持多个连接,所以直接上mysql。

如果需要替换hive默认数据库的话需要下载相应的数据库驱动,这里替换为mysql,所以需要额外下载mysql驱动:mysql-connector-java-5.1.46.jar

注意如果最新的mysql驱动可能导致不兼容,如mysql-connector-java-6.0.6.jar,会导致后续功能无法正常使用。

将下载后的驱动jar放到hive目录下的lib下:/mnt/xvdb/hive/apache-hive-2.3.4-bin/lib

3.万年不变的配置环境变量:

vim /etc/profile

export HIVE_HOME=/mnt/xvdb/hive/apache-hive-2.3.4-bin

export PATH=$PATH:$HIVE_HOME/bin

4.万年不变的配置Hive的配置文件:

conf目录下的配置文件多以.template结尾,这是官方提供的配置样例,我们这里目前只用到hive-default.xml.template

执行下面命令复制一个hive-site.xml的配置文件,注意名称不要用hive-default.xml,否则不生效(至少在2.3.4这个版本是这样)

cp hive-default.xml.template hive-site.xml

5.然后对hive-site.xml进行修改:

路径修改,否则后续会启动使用会报错。

默认数据库修改为mysql

 

非必须配置,看是否会报相关方面的错误。

 

6.mysql准备工作:

mysql中新建一个hive的schema,之后需要修改字符编码(alter database hive character set latin1;),否则默认的可能是UTF-8,后面在spark-sql中执行show databases或者类似的脚本时会报下图的错误

如果你已经遇到了上面的错误,去mysql中执行下show create table hive.partitions看下随便一个表的创建脚本,如果如下图中一样显示charset=utf8而非charset=latin1,你就需要修改默认字符编码来解决这个问题了。

修改hive这个schema的默认字符编码,不影响其他schema,脚本如下

alter database hive character set latin1;

执行完毕后需要将之前创建过的表全部清空,或者直接删除schema后创建新的schema再执行上述脚本也行,视具体情况决定。

 

重新建表后再次执行

show create table hive.partitions;

查看编码是否修正,如果修正的话如下图:(恭喜你编码至少没问题了)

 

7.Hive启动

hive metastore 服务端启动命令:
hive --service metastore -p <port_num>
如果不加端口默认启动:hive --service metastore,则默认监听端口是:9083 。

加&后端启动

 

8.Hive测试

运行./bin/hive

在命令窗口中输入以下脚本进行简单测试:

show databases;

如果没有创建任何DB的话默认只有default。

 

Spark安装配置

1.Spark官网下载压缩包,解压后如下图

2.驱动配置:

因为Spark要访问Hive的数据库,而Spark的数据库被我们替换为了mysql,所以Spark也同样要依赖mysql的驱动jar,将mysql-connector-java-5.1.46.jar放到/mnt/xvdb/spark/spark-2.4.0-bin-hadoop2.7/jars目录下。

3.万年不变的配置环境变量:

vim /etc/profile

export SPARK_HOME=/mnt/xvdb/spark/spark-2.4.0-bin-hadoop2.7

export PATH=$PATH:$SPARK_HOME/bin

4.万年不变的配置Spark的配置文件:

因为Spark要访问Hive的数据库,这里要把Hive的配置文件hive-site.xml拷贝至Spark的配置文件目录下

/mnt/xvdb/spark/spark-2.4.0-bin-hadoop2.7/conf

 

 

5.启动spark

 ./sbin/start-all.sh

6.Spark测试

运行./bin/spark-sql

启动上述命令后在控制台输入show databases;

成功的情况下可以看到Hive中创建的database

7.Spark加载数据

运行./bin/spark-shell

输入import org.apache.spark.sql.hive.HiveContext看下你的spark版本是否支持hive,如果显示

import org.apache.spark.sql.hive.HiveContext的话说明你的spark版本是支持hive的,否则你就要换版本或者自行编译带hive的spark版本,否则没法正常对接Hive。

 

依次执行下面脚本

//创建HiveContext

val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)

//加载csv或者json格式的文本数据,因为mongoDB中的一些特殊字段类型(如下图)会导致数据导入失败,所以这里推荐用csv格式。

val df = sqlContext.read.format("csv").option("header", "true").load("/mnt/xvdb/druid/slf_data/message_center.message_ali_test.csv")

JSON数据的特殊格式会导致spark导入数据的时候有问题

//打印数据(可以不执行,只是验证是否加载的数据正确与否)

df.show

//保存数据到表,注意要用hive中创建的schema,否则hadoop中找不到数据文件,原因不详
df.write.saveAsTable("hive_test.message_ali_csv_test2");

 

执行完成后可以在hadoop中看到对应的数据文件

 

 

Metabase对接Spark

Metabase对接Spark的配置如下:

如果配置信息正确无误,但是保存时候提示超时或者是吧,很有可能是因为你没有开启thriftserver服务,该服务开启后方能对外提供JDBC式的访问,启动脚本如下:

 ./sbin/start-thriftserver.sh

 

性能简单对比

获取以下截图的时候的数据情况如下:

message_ali_csv位于hive,数据记录数为750万+

message_ali位于mongodb,数据记录数为800万+

查询spark

 

查询mongdb

通过以上对比可以看出,数仓的性能优势还是很明显的

 

Attachments:

image2019-3-2_13-5-28.png
image2019-3-2_13-10-31.png
image2019-3-2_13-16-25.png
image2019-3-2_13-17-42.png
image2019-3-2_13-17-50.png
image2019-3-2_13-22-24.png
image2019-3-2_13-36-5.png
image2019-3-2_13-37-13.png
image2019-3-2_13-38-50.png
image2019-3-2_13-41-52.png
image2019-3-2_13-42-17.png
image2019-3-2_14-12-18.png
image2019-3-2_15-42-34.png
image2019-3-2_15-53-9.png
image2019-3-2_16-2-32.png
image2019-3-2_16-18-12.png
image2019-3-2_16-20-11.png
image2019-3-2_16-23-7.png
image2019-3-2_16-33-0.png
image2019-3-2_16-36-6.png
image2019-3-2_16-36-49.png
image2019-3-2_17-8-0.png
image2019-3-2_17-9-36.png
image2019-3-2_17-12-19.png
image2019-3-2_17-14-46.png
image2019-3-2_17-17-3.png
image2019-3-2_17-25-36.png
image2019-3-2_17-26-38.png
image2019-3-2_17-34-45.png
image2019-3-2_17-39-43.png
image2019-3-2_17-42-41.png
image2019-3-2_17-43-23.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值