赞
踩
ETL,Extraction-Transformation-Loading,即数据抽取(Extract),转换(Transform),**装载(Load)**的过程,它是构建数据仓库的重要环节。
ETL是将业务系统的数据经过抽取,清洗转换之后加载到数据仓库的过程,目的是将企业中分散,零乱,标准不统一的数据整合到一起,为企业的决策提供分析依据,ETL是BI项目重要的一个环节,通常情况下,在BI项目中ETL会花掉整个项目的1/3的时间,ETL设计的好坏直接关系到BI项目的成败。
(1)数据抽取:把不同的数据源数据抓取过来,存到某个地方;
(2)数据清洗:过滤那些不符合要求的数据或者修正数据之后再进行抽取
(3)数据转换:不一致的数据转换,比如同一个供应商在结算系统的编码是XX001,而在CRM中编码是YY001,统一编码,实现由多种方法:
借助工具可以快速建立起ETL工程,屏蔽了复杂的编码任务,提高了速度,降低了难度,但是缺少灵活性。
SQL的方法是优点是灵活,提高ETL运行效率,但是编码复杂,对技术要求比较高。
ETL和SQL结合综合了前二者的优点,会极大地提高ETL的开发速度和效率。
ELK是三个开源软件的缩写,分别表示:Elasticsearch,Lodstash,Kibana,它们都是开源软件。
新增一个FileBeat,他是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上收集日志后传输给Logastash。
Logstash:
主要是用来日志的收集,分析,过滤日志的工具,支持大量的数据获取方式,一般的工作方式为C/S架构,Client端安装在需要收集日志的主机上,Server端负责将收到的各个节点日志进行过滤修改等操作在一并发往elasticsearch上去。
Kibana也是一个开源,免费的工具,kibana可以为Logstash和Elasticsearch提供日志分析友好的Web界面,可以帮助汇总,分析和搜索重要的日志数据。
Filebeat隶属于Beats,目前Beats包含4种工具:
Packetbeat:搜集网络流量数据;
Topbeat:搜集系统,进程和文件系统级别的CPU和内存使用情况;
Filebeat:搜集文件数据;
Winlogbeat:搜集Windows事件日志数据。
数据抽取:Canal/Sqoop(主要解决数据库数据接入问题),还有大量的数据采用Flume解决方案。
数据存储:HDFS(文件存储),HBase(K,V存储),kafka(消息存储)。
调度:采用YARN的统一调度以及Kubernetes的基于容器的管理和调度技术。
计算分析:MR,HIVE,Storm,Spark,Kylin以及深度学习平台比如Caffe,Tensorflow等等(flink)。
应用平台:交互分析sql,多维分析:时间,地域等等。
可视化:数据分析tableau,阿里datav,hcharts,echarts。
数据应用就是指数据的业务。
Hive体系结构
用户接口:Client
元数据:MetaStore
Hadoop:使用HDFS进行存储,使用MapReduce进行计算
1.解析器
2.编译器:将AST编译成逻辑执行计划;
3.优化器:对逻辑执行计划进行优化;
4.执行器:把逻辑执行计划转换成可以运行的物理计划,对于Hive来说,就是MR/TEZ/Spark;
1.解压安装包
[root@hadoop01 software]# ls
apache-hive-1.2.1-bin.tar.gz hadoop-2.7.6.tar.gz jdk-8u211-linux-x64.rpm
[root@hadoop01 software]# tar -zxf apache-hive-1.2.1-bin.tar.gz -C /opt/modules/apache/
[root@hadoop01 software]# ll /opt/modules/apache/
total 8
drwxr-xr-x 8 root root 4096 Jun 9 09:34 apache-hive-1.2.1-bin
drwxr-xr-x 10 20415 101 4096 Jun 5 13:26 hadoop-2.7.6
2.修改配置文件
[root@hadoop01 conf]# cp hive-env.sh.template hive-env.sh
[root@hadoop01 conf]# vi hive-env.sh
# Set HADOOP_HOME to point to a specific hadoop install directory
HADOOP_HOME=/opt/modules/apache/hadoop-2.7.6
# Hive Configuration Directory can be controlled by:
export HIVE_CONF_DIR=/opt/modules/apache/hive-1.2.1/conf
3.配置Hive环境变量
[root@hadoop01 hive-1.2.1]# vi /etc/profile
export HIVE_HOME=/opt/modules/apache/hive-1.2.1
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin
[root@hadoop01 hive-1.2.1]# source /etc/profile
4.创建Hive数据仓库存放位置和修改配置文件
[root@hadoop01 conf]# cp hive-default.xml.template hive-default.xml
在HDFS文件系统上创建如下目录
[root@hadoop01 ~]# hdfs dfs -mkdir /tmp
#如果tmp目录已存在就不需要创建了
[root@hadoop01 ~]# hdfs dfs -mkdir -p /user/hive/warehouse
#修改目录的权限
[root@hadoop01 ~]# hdfs dfs -chmod g+w /tmp
[root@hadoop01 ~]# hdfs dfs -chmod g+w /user/hive/warehouse
5.启动Hive
[root@hadoop01 conf]# hive
Logging initialized using configuration in jar:file:/opt/modules/apache/hive-1.2.1/lib/hive-common-1.2.1.jar!/hive-log4j.properties
hive>
6.hive常用命令
hive> show databases > ; OK default Time taken: 0.788 seconds, Fetched: 1 row(s) hive> use default; OK Time taken: 0.051 seconds hive> show tables; OK Time taken: 0.044 seconds #创建数据库 hive> create database test01; OK Time taken: 0.099 seconds hive> show databases; OK default test01 Time taken: 0.012 seconds, Fetched: 2 row(s)
create table ta_test01(
id int,
name string,
);
---------------------------------------------------------------------------------------------------
hive> create table ta_test(
> id int,
> name string
> );
OK
Time taken: 0.288 seconds
[root@hadoop01 ~]# cd datas
[root@hadoop01 datas]# vi test
1 nike
2 mark
3 jerry
4 lucy
5 zhuzhu
load data local inpath '/root/datas/test' into table ta_test;
hive> load data local inpath '/root/datas/test' into table ta_test;
Loading data to table test01.ta_test
Table test01.ta_test stats: [numFiles=1, totalSize=38]
OK
Time taken: 1.362 seconds
select * from ta_test;
hive> select * from ta_test;
OK
NULL NULL
NULL NULL
NULL NULL
NULL NULL
NULL NULL
Time taken: 0.619 seconds, Fetched: 5 row(s)
注意:Hive必须指定行分隔符和列分隔符
如果数据的分割符与表的分割符不一致就会解析数据失败;
vi test
1^Anike
2^Amark
3^Ajerry
4^Alucy
5^Azhuzhu
加载数据,查看数据
hive> load data local inpath '/root/datas/test' into table ta_test; Loading data to table test01.ta_test Table test01.ta_test stats: [numFiles=2, totalSize=76] OK Time taken: 0.479 seconds hive> select * from ta_test; OK NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 nike 2 mark 3 jerry 4 lucy 5 zhuzhu Time taken: 0.053 seconds, Fetched: 10 row(s) hive>
分割符:"\t"、","、" "、“A"、"B”、…
#数据以制表符分割
create table ta_test01(
id int,
name string
)ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t";
创建数据
vi test01
---------------------------------------------------------------------------------------------------
1 zhuzhu
2 nike
3 mike
4 jack
5 lucy
创建表
hive> create table ta_test01(
> id int,
> name string
> )ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t";
OK
Time taken: 0.161 second
加载数据,查看数据
hive> load data local inpath '/root/datas/test01' into table ta_test01;
Loading data to table test01.ta_test01
Table test01.ta_test01 stats: [numFiles=1, totalSize=37]
OK
Time taken: 0.257 seconds
hive> select * from ta_test01;
OK
1 zhuzhu
2 nike
3 mike
4 jack
5 lucy
Time taken: 0.081 seconds, Fetched: 5 row(s)
如果使用默认的derby数据库,发现不能同时开启多个hive shell客户端,需要修改hive元数据存储的数据库。
hive支持的元数据存储的数据库有derby,mssql,mysql,oracle,postgres
采用MySql数据库
#查看系统是否安装mysql [root@hadoop01 upgrade]# rpm -qa|grep mysql mysql-libs-5.1.71-1.el6.x86_64 #卸载已有的mysql数据库 [root@hadoop01 upgrade]# rpm -e --nodeps mysql-libs-5.1.71-1.el6.x86_64 #yum安装MySql [root@hadoop01 upgrade]# yum -y install mysql-server #启动MySql [root@hadoop01 upgrade]# service mysqld start #设置mysql的root用户密码 [root@hadoop01 upgrade]# mysqladmin -u root password '971102 #登陆mysql [root@hadoop01 upgrade]# mysql -uroot -p971102 #设置远程登陆权限 mysql> grant all privileges on *.* to 'root'@'%' identified by '971102' with grant option; mysql> flush privileges; [root@hadoop01 upgrade]# service mysqld restart #设置MySql服务开机自启动 [root@hadoop01 upgrade]# chkconfig mysqld on
MySQL的安装信息:
vi hive-site.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!--连接数据库的url--> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://hadoop01:3306/metastore_db?createDatabaseIfNotExist=true</value> <description>JDBC connect string for a JDBC metastore</description> </property> <!--连接数据库的驱动--> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> <description>Driver class name for a JDBC metastore</description> </property> <!--连接数据库的用户名--> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> <description>Username to use against metastore database</description> </property> <!--连接数据库的密码--> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>971102</value> <description>password to use against metastore database</description> </property> </configuration>
3.将数据库驱动jar包放到hive的lib目录下
[root@hadoop01 hive-1.2.1]# ls lib|grep mysql
mysql-connector-java-5.1.27-bin.jar
4.开启Hive
[root@hadoop01 hive-1.2.1]# hive
Logging initialized using configuration in jar:file:/opt/modules/apache/hive-1.2.1/lib/hive-common-1.2.1.jar!/hive-log4j.properties
hive>
#如果遇到报错不能启动hive shell,则在mysql中开启允许你的主机名登陆mysql
在MySql的metastore_db数据库中:
hive> create table test01(
> id int,
> name string);
OK
Time taken: 0.259 seconds
hive> create database db_test01; OK Time taken: 0.047 seconds hive> create table test02( > id int, > name varchar(20)); OK Time taken: 0.066 seconds hive> use db_test01; OK Time taken: 0.023 seconds hive> create table test01( > id int, > name string, > age int); OK Time taken: 0.063 seconds
desc table_name;
hive> desc test01;
OK
id int
name string
Time taken: 0.133 seconds, Fetched: 2 row(s)
desc extended table_name;
hive> desc extended test01;
OK
id int
name string
Detailed Table Information Table(tableName:test01, dbName:default, owner:root, createTime:1560062424, lastAccessTime:0, retention:0, sd:StorageDescriptor(cols:[FieldSchema(name:id, type:int, comment:null), FieldSchema(name:name, type:string, comment:null)], location:hdfs://hadoop01:8020/user/hive/warehouse/test01, inputFormat:org.apache.hadoop.mapred.TextInputFormat, outputFormat:org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat, compressed:false, numBuckets:-1, serdeInfo:SerDeInfo(name:null, serializationLib:org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe, parameters:{serialization.format=1}), bucketCols:[], sortCols:[], parameters:{}, skewedInfo:SkewedInfo(skewedColNames:[], skewedColValues:[], skewedColValueLocationMaps:{}), storedAsSubDirectories:false), partitionKeys:[], parameters:{transient_lastDdlTime=1560062424}, viewOriginalText:null, viewExpandedText:null, tableType:MANAGED_TABLE)
Time taken: 0.085 seconds, Fetched: 4 row(s)
desc formatted table_name;
hive> desc formatted test01; OK # col_name data_type comment id int name string # Detailed Table Information Database: default Owner: root CreateTime: Sun Jun 09 14:40:24 CST 2019 LastAccessTime: UNKNOWN Protect Mode: None Retention: 0 Location: hdfs://hadoop01:8020/user/hive/warehouse/test01 Table Type: MANAGED_TABLE Table Parameters: transient_lastDdlTime 1560062424 # Storage Information SerDe Library: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe InputFormat: org.apache.hadoop.mapred.TextInputFormat OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat Compressed: No Num Buckets: -1 Bucket Columns: [] Sort Columns: [] Storage Desc Params: serialization.format 1 Time taken: 0.096 seconds, Fetched: 27 row(s)
alter table table_name01 rename to table_name02(修改表名)
hive> show tables; OK hadoop01 hadoop02 Time taken: 0.752 seconds, Fetched: 2 row(s) hive> alter table hadoop01 rename to ha01; OK Time taken: 0.249 seconds hive> alter table hadoop02 rename to ha02; OK Time taken: 0.118 seconds hive> show tables; OK ha01 ha02 Time taken: 0.028 seconds, Fetched: 2 row(s)
alter table t_name add columns (c_name1 c_type1,c_name2 c_type2,…);(新增列)
hive> desc ha01;
OK
id int
name string
Time taken: 0.109 seconds, Fetched: 2 row(s)
hive> alter table ha01 add columns (age int,gender string);
OK
Time taken: 0.185 seconds
hive> desc ha01;
OK
id int
name string
age int
gender string
Time taken: 0.088 seconds, Fetched: 4 row(s)
alter table t_name add columns (c_name1 c_type1 comment ‘注释’,c_name2 c_type2,…);(新增列并给列加上注释)
alter table t_name CHANGE col_old_name col_new_name col_type;(修改列)
hive> desc ha01; OK id int name string age int gender string Time taken: 0.088 seconds, Fetched: 4 row(s) hive> alter table ha01 CHANGE gender sex varchar(4); OK Time taken: 0.135 seconds hive> desc ha01; OK id int name string age int sex varchar(4) Time taken: 0.076 seconds, Fetched: 4 row(s)
alter table t_name CHANGE col_old_name col_new_name col_type after col_name02;(修改列并将该列放置到某一列的后面)
alter table t_name CHANGE col_old_name col_new_name col_type first;(修改列并将该列放置在第一列)
alter table t_name REPLACE COLUMNS (col_name1 com_type1 [comment ‘注释’],col_name1 com_type1 [comment ‘注释’], …)(替换列,不能指定替换,将表完全替换)
TRUNCATE TABLE t_name;(清空表数据)
DROP TABLE t_name;(删除表)
DROP DATABASE db_name;(删除数据库)
DROP DATABASE db_name CASCADE;(强制删除表)
show functions;(查看Hive自带的函数)
desc function f_name;(查看函数的描述信息)
hive> desc function count;
OK
count(*) - Returns the total number of retrieved rows, including rows containing NULL values.
count(expr) - Returns the number of rows for which the supplied expression is non-NULL.
count(DISTINCT expr[, expr...]) - Returns the number of rows for which the supplied expression(s) are unique and non-NULL.
Time taken: 0.013 seconds, Fetched: 3 row(s)
desc function extended f_name;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。