前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >06-PDI(Kettle)读取Hive写入HDFS,读取HDFS写入HBase中

06-PDI(Kettle)读取Hive写入HDFS,读取HDFS写入HBase中

作者头像
用户2225445
发布2022-11-12 15:57:02
1.4K0
发布2022-11-12 15:57:02
举报
文章被收录于专栏:IT从业者张某某IT从业者张某某

文章目录

06-PDI(Kettle)读取Hive写入HDFS,读取HDFS写入HBase中

本文主要通过Kettle完成对Hive和HBase中数据的读写工作,为了便于按照文档即可实现Kettle的读写Hive和HBase,文本前面也介绍下Hive的安装过程,如何Hive已经完成安装,可跳过前面即可。 实验环境: cetnos7.4

环境准备

1.安装MySQL

1.1mysql安装参考:

centos7下使用mysql安装包安装mysql5.7 https://www.cnblogs.com/wpnr/p/14072634.html

CentOS7安装MySQL https://www.cnblogs.com/bigbrotherer/p/7241845.html

1.2安装过程

在CentOS中默认安装有MariaDB,这个是MySQL的分支,但为了需要,还是要在系统中安装MySQL,而且安装完成之后可以直接覆盖掉MariaDB。 1) 下载并安装MySQL 安装官方的 Yum Repository

[root@localhost ~]# wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm

使用上面的命令就直接下载了安装用的Yum Repository,大概25KB的样子,然后就可以直接yum安装了。

[root@localhost ~]# yum -y install mysql57-community-release-el7-10.noarch.rpm

之后就开始安装MySQL服务器。

[root@localhost ~]# yum -y install mysql-community-server

这步可能会花些时间,安装完成后就会覆盖掉之前的mariadb。

在这里插入图片描述
在这里插入图片描述

2) MySQL数据库设置

首先启动MySQL

[root@localhost ~]# systemctl start  mysqld.service

查看MySQL运行状态,运行状态如图:

[root@localhost ~]# systemctl status mysqld.service
在这里插入图片描述
在这里插入图片描述

此时MySQL已经开始正常运行,不过要想进入MySQL还得先找出此时root用户的密码,通过如下命令可以在日志文件中找出密码:

[root@localhost ~]# grep "password" /var/log/mysqld.log
在这里插入图片描述
在这里插入图片描述

如下命令进入数据库:

[root@localhost ~]# mysql -uroot -p

输入初始密码,此时不能做任何事情,因为MySQL默认必须修改密码之后才能操作数据库:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';

这里有个问题,新密码设置的时候如果设置的过于简单会报错:

在这里插入图片描述
在这里插入图片描述

原因是因为MySQL有密码设置的规范,具体是与validate_password_policy的值有关:

在这里插入图片描述
在这里插入图片描述

MySQL完整的初始密码规则可以通过如下命令查看:

mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password_check_user_name    | OFF   |
| validate_password_dictionary_file    |       |
| validate_password_length             | 4     |
| validate_password_mixed_case_count   | 1     |
| validate_password_number_count       | 1     |
| validate_password_policy             | LOW   |
| validate_password_special_char_count | 1     |
+--------------------------------------+-------+
7 rows in set (0.01 sec)

密码的长度是由validate_password_length决定的,而validate_password_length的计算公式是:

validate_password_length = validate_password_number_count + validate_password_special_char_count + (2 * validate_password_mixed_case_count)

我的是已经修改过的,初始情况下第一个的值是ON,validate_password_length是8。可以通过如下命令修改:

mysql> set global validate_password_policy=0;
mysql> set global validate_password_length=1;

设置之后就是我上面查出来的那几个值了,此时密码就可以设置的很简单,例如1234之类的。到此数据库的密码设置就完成了。

但此时还有一个问题,就是因为安装了Yum Repository,以后每次yum操作都会自动更新,需要把这个卸载掉:

[root@localhost ~]# yum -y remove mysql57-community-release-el7-10.noarch

此时才算真的完成了。

2.安装HIVE

2.1参考:

https://blog.csdn.net/qq_44870331/article/details/116733919

2.2hadoop配置:

mapred-site.xml

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

yarn-site.xml

<configuration>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>cm-cdh20</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>
2.3hive安装过程

1)下载hive:

1.下载HIVE:

yum -y install wget
wget https://dlcdn.apache.org/hive/stable-2/apache-hive-2.3.9-bin.tar.gz 

2.解压安装hive:

tar -zxvf apache-hive-2.3.9-bin.tar.gz

3 重命名hive

mv apache-hive-2.3.9-bin /opt/apps/hive

4 配置hive环境变量

vi ~/.bash_profile 
or
vi /etc/profile

vi用法:

输入v+ j/k/h/l   进行文本选中
 对于选中的文本进行如下按键:
  (1.1)d   ------ 剪切操作
  (1.2)y   -------复制操作
  (1.3)p   -------粘贴操作
  (1.4)^  --------选中当前行,光标位置到行首(或者使用键盘的HOME键)
  (1.5)$  --------选中当前行,光标位置到行尾(或者使用键盘的END键)
(2)Visual Line模式  按键V可以进入
    按键V之后,进入Visual Line模式,使用 j/k键可以选中一行或者多行
(3)Visual Block模式,按键Ctrl + V可以进入
    按键Ctrl+V之后,进入Visual Block模式,使用 j/k/h/l键可以选中一块

5 添加

export HIVE_HOME=/opt/apps/hive
export PATH=$HIVE_HOME/bin:$PATH

6 刷新配置文件

source ~/.bash_profile
or
source /etc/profile

7 文件移动到 hive的lib

将mysql-connector-java-5.1.49.jar 文件移动到 hive的lib文件夹下

find / -name mysql-connectors-java*
cp mysql-connector-java-5.1.49.jar $HIVE_HOME/lib

8 创建数据库,配置用户和权限

(1)创建数据库

mysql>create database metastore;

(2)创建MySQL的 用户hive,密码new_passwd 并赋予权限*

mysql>grant all on metastore.* to hive@'%' identified by 'new_passwd';
mysql>grant all on metastore.* to hive@'localhost' identified by 'new_passwd';
mysql>grant all on *.* to root@'%' identified by 'new_passwd';

(3)刷新MySQL权限

mysql>flush privileges;

用命令创建:hive数据库

[root@master ~]# mysql -u root -p
mysql>create database hive;

2)hive配置文件

1 进入Hive的配置文件所在路径

cd $HIVE_HOME/conf
cp hive-env.sh.template hive-env.sh
cp hive-default.xml.template hive-site.xml
cp hive-log4j2.properties.template hive-log4j2.properties
cp hive-exec-log4j2.properties.template hive-exec-log4j2.properties  

2.修改hive-env.sh

vi hive-env.sh

如果没有配置以下环境变量/或是系统有jdk,hadoop多个环境, 可以手动指定想要版本的地址

export JAVA_HOME=/opt/apps/jdk
export HADOOP_HOME=/opt/apps/hadoop

3.增加hive-site.xml

vi hive-site.xml

用于配置MySQL的关联

注意:下面xml里的ConnectionUserName和ConnectionPassword配置的是mysql的用户名密码,

上文已经设置过都是hive,如果上文自己设置别的用户名密码,请自行修改.

 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <configuration>
    <property>
      <name>hive.exec.scratchdir</name>
      <value>/opt/apps/hive/tmp</value>
    </property>
    <!--默认的存储地址-->
    <property>
      <name>hive.metastore.warehouse.dir</name>
      <value>hdfs://cm-cdh20:9000/user/hive/warehouse</value>
      <!--
      <value>/opt/apps/hive/warehouse</value>
      -->
    </property>
    
    <property>
      <name>hive.querylog.location</name>
      <value>/opt/hive/log</value>
    </property>
    <!-- 配置 MySQL 数据库连接信息 -->
    <property>
      <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://192.168.33.200:3306/hive?createDatabaseIfNotExist=true&amp;characterEncoding=UTF-8&amp;useSSL=false</value>
     </property>
     
     <property>
      <name>javax.jdo.option
      .ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value><!-- jdbc驱动 -->
     </property>
     
     <property>
      <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value><!-- mysql账号 --> 
     </property>
    
     <property>
      <name>javax.jdo.option.ConnectionPassword</name>
        <value>111111</value><!-- mysql密码 -->  
     </property>
    
    
     <property>  
      <name>hive.server2.authentication</name>  
      <value>NONE</value>
     </property>
     <property>
        <name>hive.server2.thrift.client.user</name>
        <value>root</value>
        <description>Username to use against thrift client</description>
     </property>
     <property>
        <name>hive.server2.thrift.client.password</name>
        <value>111111</value>
     <description>Password to use against thrift client</description>
      </property>
     
     <property>  
      <name>hive.server2.enable.doAs</name>  
      <value>false</value>
     </property>
     <property>
      <name>hive.server2.logging.operation.log.location</name>
      <value>/opt/apps/hive/logs/hive/hiveserver2</value>
     </property>
     <!-- 这是hiveserver2 -->
     <property>
       <name>hive.server2.thrift.port</name>
       <value>10000</value>
     </property>
     <property>
       <name>hive.server2.thrift.bind.host</name>
      <value>192.168.33.200</value>
     </property>
    </configuration>

4.创建hive的hdfs工作目录

 $HADOOP_HOME/bin/hadoop fs -mkdir -p   /tmp
 $HADOOP_HOME/bin/hadoop fs -mkdir -p   /user/hive/warehouse
 $HADOOP_HOME/bin/hadoop fs -chmod g+w  /tmp
 $HADOOP_HOME/bin/hadoop fs -chmod g+w  /user/hive/warehouse

3)初始化hive

同上,下面 命令最后结尾是 是MySQL的用户名 hive和密码hive

cd $HIVE_HOME/bin
./schematool -dbType mysql -initSchema root new_passwd

提示如下成功

[root@cm-cdh20 bin]# ./schematool -dbType mysql -initSchema root 111111 --verbose

...

0: jdbc:mysql://192.168.33.200:3306/hive> /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */
No rows affected (0.001 seconds)
0: jdbc:mysql://192.168.33.200:3306/hive> !closeall
Closing: 0: jdbc:mysql://192.168.33.200:3306/hive?createDatabaseIfNotExist=true&characterEncoding=UTF-8&useSSL=fal                                             se
beeline>
beeline> Initialization script completed
schemaTool completed

3.启动hive

先启动hadoop

start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver
192.168.33.200:19888
# 启动元数据服务
hive --service metastore &
# 启动hiveserver2 hive --service hiveserver2 & 指定配置文件

hive --service hiveserver2 --hiveconf hive.server2.thrift.port 10001

通过thrift连接hiveserver2

beeline
!connect jdbc:hive2://192.168.33.200:10000
!quit

设计Kettle转换

1.开启hive

1.1配置hive依赖

Kettle关于Hadoop生态圈组件连接配置基本都在data-integration\plugins\pentaho-big-data-plugin目录下,如图:

在这里插入图片描述
在这里插入图片描述

(1)active.hadoop.configuration The Hadoop Configuration to use when communicating with a Hadoop cluster. This is used for all Hadoop client tools including HDFS, Hive, HBase, and Sqoop. For more configuration options specific to the Hadoop configuration choosen here see the config.properties file in that configuration’s directory. active.hadoop.configuration=hdp30

(2)hadoop.configurations.path Path to the directory that contains the available Hadoop configurations hadoop.configurations.path=hadoop-configurations

两个参数主要配置Hadoop集群的版本,在hadoop-configurations目录下,提供了如下几个Hadoop集群版本:

在这里插入图片描述
在这里插入图片描述

其中cdh和hdp是目前用的比较多的两个版本。它们整合了Hadoop集群的各个组件,可以快速配置和部署。本文选中选择hdp26,在选择hdp30的时候,出现一些依赖的冲突。

我们这里连接Hive2,需要Hadoop集群支持,所以将Hadoop的配置文件core-site.xml,hdfs-site.xml和Hive的配置文件hive-site.xml拷贝过来(事先需要搭建好Hadoop和Hive集群)。

1.2hive建表

分别开启 hdfs/yarn/hbase/hive服务

# 开启hdfs
start-dfs.sh
# 开启yarn
start-yarn.sh
# 开启yarn历史记录服务器 192.168.33.200:19888
mr-jobhistory-daemon.sh start historyserver

# 开启hive元数据服务
hive --service metastore &
# 开启hive 远程服务 ,也可在开启的时候指定thrift的端口号
hive --service hiveserver2 &
# hive --service hiveserver2 --hiveconf hive.server2.thrift.port 10001
# 通过beeline链接thrift,访问hive的server2
beeline
# 在beeline终端下,访问hive2
!connect jdbc:hive2://192.168.33.200:10000
# 退出beeline
!quit


# 开启hbase
start-hbase.sh

进入hive,建立相关表

drop database if exists kettle cascade;
create database if not exists kettle;
use kettle;

create table if not exists kettle.dept(
deptno int,
dname string,
loc string
)
row format delimited
fields terminated by '\t'
;
insert into kettle.dept values(10,'Java','Beijing'),(20,'Bigdata','hangzhou'),(30,'Html5','Shanghai'),(40,'UI','Chongqing');

create table if not exists kettle.emp(
empno int,
ename string,
job string,
mgr int,
hiredata string,
sal double,
comm int,
deptno int
)
row format delimited
fields terminated by '\t'
;

insert into kettle.emp values(1111,'liyi','Bigdata Programer',1000,'2020-02-02',1,100000,20),(1000,'laoma','Bigdata Mananger',0,'1990-01-01',1000000,2000000,20),(1112,'laoxue','Java Programer',1000,'1996-02-02',100000,20000,10),(1113,'wangdan','UI Desgner',1000,'1997-02-02',10000,2000,40);

2.读取hive写入HDFS

2.1工作流设计

工作流设计:

在这里插入图片描述
在这里插入图片描述
2.2 具体转换设计

具体步骤项如下: 1)table input 步骤项设置 本步骤用于链接hive中的emp表,hive数据库链接如下:

请添加图片描述
请添加图片描述

数据库操作sql语句如下:

在这里插入图片描述
在这里插入图片描述

2)emp sorts 步骤项设置 本步骤用于对hive中的数据进行排序:

请添加图片描述
请添加图片描述

3)table input 2 步骤项设置 本步骤用于链接hive中的dept表,hive数据库链接如下:

在这里插入图片描述
在这里插入图片描述

4)dept sorts 步骤项设置 本步骤用于对hive中的dept数据进行排序:

在这里插入图片描述
在这里插入图片描述

5)Merge join操作 本步骤用于将经过排序的两张表中的数据执行join操作,join选择内链接

请添加图片描述
请添加图片描述

6)select values步骤项设置 选择字段,本步骤主要用于移除部分字段

请添加图片描述
请添加图片描述

7)text file output步骤项设置 在open file中选择hdfs文件系统,并进行相关配置。

请添加图片描述
请添加图片描述

配置完毕后,进行测试,测试结果如下:

请添加图片描述
请添加图片描述

从测试结果可以看出,zk没有开,开启了hdfs,和yarn 测试通过后,点击ok,选择hdfs上的路径。

请添加图片描述
请添加图片描述

8)运行转换,并查看结果 运行示意图:

请添加图片描述
请添加图片描述

进入到hdfs所在的机器上,查看输出结果如下:

请添加图片描述
请添加图片描述

3 读取HDFS写入HBase

需求:将hdfs中sal小于110000的数据保存在hbase中

3.1工作流设计
在这里插入图片描述
在这里插入图片描述
3.2启动HBase
#开启hbase
start-hbase.sh
#进入hbase shell
#建表
create 'emp','info'
3.3具体转换设计

1)转换设计为:

请添加图片描述
请添加图片描述

2)text file input步骤设计 这一步骤与上一案例中的基本类似

请添加图片描述
请添加图片描述

选择hdfs的.txt文件

请添加图片描述
请添加图片描述

.txt中的数据就是emp表的数据,如下

请添加图片描述
请添加图片描述

2)filter rows步骤设计 通过filter rows过滤出工作小于100000的员工

请添加图片描述
请添加图片描述

3)HBase output

请添加图片描述
请添加图片描述

创建映射:选择字符串在hbase shell端不乱码

请添加图片描述
请添加图片描述

再次配置hbase链接

请添加图片描述
请添加图片描述

如果出现:

NoSuchColumnFamilyException: Column family table does not exist in region hbase:meta,,1.1588230740 in table 'hbase:meta'

原因:是因为hbase服务端版本过低,客户端版本不能高于服务端版本

解决办法:选择hdp26

查看hbase,并解决命令行查看中文乱码问题

scan 'emp', {FORMATTER => 'toString'}
scan 'emp', {FORMATTER_CLASS => 'org.apache.hadoop.hbase.util.Bytes', FORMATTER => 'toString'}

总结

本文主要描述了基于kettle实现从hive读取数据写入到hdfs,同时实现从HDFS读取数据写入HBase中的完整流程,同时为便于读者能根据本博客实现完整的实验,还参考了部分博客,增加了mysql和hive的安装过程,并针对自己安装过程中遇到的问题,进行了记录。

如果有任何问题,欢迎留言,看到后,会及时回复~~

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-12-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 06-PDI(Kettle)读取Hive写入HDFS,读取HDFS写入HBase中
    • 环境准备
      • 1.安装MySQL
      • 2.安装HIVE
      • 3.启动hive
    • 设计Kettle转换
      • 1.开启hive
      • 2.读取hive写入HDFS
      • 3 读取HDFS写入HBase
    • 总结
    相关产品与服务
    大数据
    全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档