Skip to content

Commit b6e7d65

Browse files
committed
news
1 parent 16a64de commit b6e7d65

16 files changed

+1790
-0
lines changed
Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
---
2+
title: 第十章:Flume+HBase+Kafka集成全流程测试
3+
date: 2019-1-20 20:30:01
4+
categories: "用户日志实时与离线分析系统"
5+
tags:
6+
- 项目
7+
---
8+
9+
### 全流程测试简介
10+
将完成对前面所有的设计进行测试,核心是进行flume日志的采集、汇总以及发送至kafka消费、hbase保存。
11+
![](http://ww1.sinaimg.cn/large/005BOtkIly1fzd3g6rboxj30go0gp43u.jpg)
12+
### 原始日志数据简单处理
13+
1、下载搜狗实验室数据
14+
http://www.sogou.com/labs/resource/q.php
15+
2、格式说明
16+
数据格式为:访问时间\t用户ID\t[查询词]\t该URL在返回结果中的排名\t用户点击的顺序号\t用户点击的URL
17+
其中,用户ID是根据用户使用浏览器访问搜索引擎时的Cookie信息自动赋值,即同一次使用浏览器输入的不同查询对应同一个用户ID
18+
3、日志简单处理
19+
1)将文件中的tab更换成逗号
20+
cat weblog.log|tr "\t" "," > weblog2.log
21+
2)将文件中的空格更换成逗号
22+
cat weblog2.log|tr " " "," > weblog3.log
23+
处理完:
24+
![](http://ww1.sinaimg.cn/large/005BOtkIly1fzd3eylp5zj30l008fab1.jpg)
25+
### 编写模拟日志生成过程
26+
1、代码实现
27+
实现功能是将原始日志,每次读取一行不断写入到另一个文件中(weblog-flume.log),所以这个文件就相等于服务器中日志不断增加的过程。编写完程序,将该项目打成weblogs.jar包,然后上传至bigdata-pro02.kfk.com节点和bigdata-pro03.kfk.com节点的/opt/jars目录下(目录需要提前创建)
28+
代码工程地址:https://github.com/changeforeda/Big-Data-Project/tree/master/code/DataProducer
29+
2、编写运行模拟日志程序的shell脚本
30+
```
31+
1)
32+
在bigdata-pro02.kfk.com节点的/opt/datas目录下,创建weblog-shell.sh脚本。
33+
vi weblog-shell.sh
34+
#/bin/bash
35+
echo "start log......"
36+
#第一个参数是原日志文件,第二个参数是日志生成输出文件
37+
java -jar /opt/jars/weblogs.jar /opt/datas/weblog.log /opt/datas/weblog-flume.log
38+
39+
修改weblog-shell.sh可执行权限
40+
chmod 777 weblog-shell.sh
41+
2)
42+
将bigdata-pro02.kfk.com节点上的/opt/datas/目录拷贝到bigdata-pro03节点.kfk.com
43+
scp -r /opt/datas/ bigdata-pro03.kfk.com:/opt/datas/
44+
```
45+
3、运行测试
46+
/opt/datas/weblog-shell.sh
47+
![](http://ww1.sinaimg.cn/large/005BOtkIly1fzdb284hefj30he0chn95.jpg)
48+
### 编写一些shell脚本便于执行
49+
1、编写启动flume服务程序的shell脚本
50+
```
51+
1.在bigdata-pro02.kfk.com节点的flume安装目录下编写flume启动脚本。
52+
vi flume-kfk-start.sh
53+
#/bin/bash
54+
echo "flume-2 start ......"
55+
bin/flume-ng agent --conf conf -f conf/flume-conf.properties -n agent2 -Dflume.root.logger=INFO,console
56+
2.在bigdata-pro03.kfk.com节点的flume安装目录下编写flume启动脚本。
57+
vi flume-kfk-start.sh
58+
#/bin/bash
59+
echo "flume-3 start ......"
60+
bin/flume-ng agent --conf conf -f conf/flume-conf.properties -n agent3 -Dflume.root.logger=INFO,console
61+
3.在bigdata-pro01.kfk.com节点的flume安装目录下编写flume启动脚本。
62+
vi flume-kfk-start.sh
63+
#/bin/bash
64+
echo "flume-1 start ......"
65+
bin/flume-ng agent --conf conf -f conf/flume-conf.properties -n agent1 -Dflume.root.logger=INFO,console
66+
67+
```
68+
2、编写Kafka Consumer执行脚本
69+
```
70+
1.在bigdata-pro01.kfk.com节点的Kafka安装目录下编写Kafka Consumer执行脚本
71+
vi kfk-test-consumer.sh
72+
#/bin/bash
73+
echo "kfk-kafka-consumer.sh start ......"
74+
bin/kafka-console-consumer.sh --zookeeper bigdata-pro01.kfk.com:2181,bigdata-pro02.kfk.com:2181,bigdata-pro03.kfk.com:2181 --from-beginning --topic weblogs
75+
2.将kfk-test-consumer.sh脚本分发另外两个节点
76+
scp kfk-test-consumer.sh bigdata-pro02.kfk.com:/opt/modules/kakfa_2.11-0.8.2.1/
77+
scp kfk-test-consumer.sh bigdata-pro03.kfk.com:/opt/modules/kakfa_2.11-0.8.2.1/
78+
79+
```
80+
### 联调测试-数据采集分发
81+
```
82+
1、在各个节点上启动zk
83+
/opt/modules/zookeeper-3.4.5-cdh5.10.0/sbin/zkServer.sh start
84+
/opt/modules/zookeeper-3.4.5-cdh5.10.0/bin/zkCli.sh 登陆客户端进行测试是否启动成功
85+
86+
2、启动hdfs --- http://bigdata-pro01.kfk.com:50070/
87+
在节点1:/opt/modules/hadoop-2.6.0/sbin/start-dfs.sh
88+
#节点1 和 节点2 启动namenode高可用
89+
/opt/modules/hadoop-2.6.0/sbin/hadoop-daemon.sh start zkfc
90+
91+
3、启动hbase ----http://bigdata-pro01.kfk.com:60010/
92+
#节点 1 启动hbase
93+
/opt/modules/hbase-1.0.0-cdh5.4.0/bin/start-hbase.sh
94+
#在节点2 启动备用master
95+
/opt/modules/hbase-1.0.0-cdh5.4.0/bin/hbase-daemon.sh start master
96+
#启动hbase的shell用于操作
97+
/opt/modules/hbase-1.0.0-cdh5.4.0/bin/hbase shell
98+
#创建hbase业务表
99+
bin/hbase shell
100+
create 'weblogs','info'
101+
102+
4、启动kafka
103+
#在各个个节点启动kafka
104+
cd /opt/modules/kafka_2.10-0.9.0.0
105+
bin/kafka-server-start.sh config/server.properties &
106+
#创建业务
107+
bin/kafka-topics.sh --zookeeper bigdata-pro01.kfk.com:2181,bigdata-pro02.kfk.com:2181,bigdata-pro03.kfk.com:2181 --create --topic weblogs --replication-factor 2 --partitions 1
108+
#消费(之前编写的脚本可以用)
109+
bin/kafka-console-consumer.sh --zookeeper bigdata-pro01.kfk.com:2181,bigdata-pro02.kfk.com:2181,bigdata-pro03.kfk.com:2181 --from-beginning --topic weblogs
110+
```
111+
一定确保上述都启动成功能,利用jps查看各个节点进程情况。
112+
![](http://ww1.sinaimg.cn/large/005BOtkIly1fzdbmh1n31j309v042glj.jpg)![](http://ww1.sinaimg.cn/large/005BOtkIly1fzdbmovok3j309n03sa9y.jpg)![](http://ww1.sinaimg.cn/large/005BOtkIly1fzdbmw14tjj309o02cweb.jpg)
113+
```
114+
5、各个节点启动flume
115+
#三节点启动flume
116+
/opt/modules/flume-1.7.0-bin/flume-kfk-start.sh
117+
118+
6、在节点2和3启动日志模拟生产
119+
/opt/datas/weblog-shell.sh
120+
121+
7、启动kafka消费程序
122+
#消费(或者使用写好的脚本kfk-test-consumer.sh)
123+
bin/kafka-console-consumer.sh --zookeeper bigdata-pro01.kfk.com:2181,bigdata-pro02.kfk.com:2181,bigdata-pro03.kfk.com:2181 --from-beginning --topic weblogs
124+
125+
8、查看hbase数据写入情况
126+
./hbase-shell
127+
count 'weblogs'
128+
```
129+
结果:
130+
kafka不断消费
131+
![](http://ww1.sinaimg.cn/large/005BOtkIly1fzdbszmkybj30rh0940ue.jpg)
132+
hbase数据不断增加
133+
![](http://ww1.sinaimg.cn/large/005BOtkIly1fzdbtek6eqj30rv0ar0ud.jpg)
134+
135+
### 遇到的一些问题
136+
1、组件启动不起来
137+
可能原因是环境变量没设置,比如在启动flume时,因为调用java,所以要设置环境变量在flume的配置文件中。
138+
2、各个组件都启动了,但是没数据
139+
我是因为flume的sink写错了,所以根本输出不了数据,我是通过先把sink设置成输出到控制台发现没数据,再去看配置sink到底怎么了
140+
**3、解决各种小问题**
141+
1)看问题的日志;或者把日志中问题复制到百度,基本可以解决60%
142+
2)整个功能实现不了,应该从数据源头查看,一步一步向后排除原因,比如没数据,看源头到底输出数据了吗?
143+
3)问题还是解决不了,就要反思自己是否有不懂的地方,设置错了。或者you can talk with me。。。
Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
---
2+
title: 第十一章:mysql、Hive安装与集成
3+
date: 2019-1-22 22:30:01
4+
categories: "用户日志实时与离线分析系统"
5+
tags:
6+
- 项目
7+
---
8+
9+
### 为什么要用mysql?
10+
一方面,本项目用来存储Hive的元数据;另一方面,可以把离线分析结果放入mysql中;
11+
12+
### 安装mysql
13+
通过yum在线mysql,具体操作命令如下所示(关于yum源可以修改为阿里的,比较快和稳定)
14+
```
15+
1、在线安装mysql
16+
通过yum在线mysql,具体操作命令如下所示。
17+
yum clean all
18+
yum install mysql-server
19+
2、mysql 服务启动并测试
20+
sudo chown -R kfk:kfk /usr/bin/mysql 修改权限给kfk
21+
1)查看mysql服务状态
22+
sudo service mysqld status
23+
2)启动mysql服务
24+
sudo service mysqld start
25+
3)设置mysql密码
26+
/usr/bin/mysqladmin -u root password '123456'
27+
4)连接mysql
28+
mysql –uroot -p123456
29+
a)查看数据库
30+
show databases;
31+
mysql
32+
test
33+
b)查看数据库
34+
use test;
35+
c)查看表列表
36+
show tables;
37+
```
38+
出现问题,大多数是权限问题,利用sudo执行或者重启mysql.
39+
40+
### 安装Hive
41+
Hive在本项目中功能是,将hbase中的数据进行离线分析,输出处理结果,可以到mysql或者hbase,然后进行可视化。
42+
![](http://ww1.sinaimg.cn/large/005BOtkIly1fzfpw9k0v7j30kv09rtfp.jpg)
43+
这里版本采用的是:apache-hive-2.1.0-bin.tar.gz
44+
(之前用apache-hive-0.13.1-bin.tar.gz出现和hbase集成失败,原因很奇怪,下一章详细讲)。
45+
1、解压
46+
```
47+
步骤都老生常谈了。。。
48+
tar -zxf apache-hive-2.1.0-bin.tar.gz -C /opt/modules/
49+
mv apache-hive-2.1.0-bin hive-2.1.0 //重命名
50+
```
51+
2、修改配置文件
52+
```
53+
1)hive-log4j.properties
54+
#日志目录需要提前创建
55+
hive.log.dir=/opt/modules/hive-2.1.0/logs
56+
2)修改hive-env.sh配置文件
57+
HADOOP_HOME=/opt/modules/hadoop-2.6.0
58+
HBASE_HOME=/opt/modules/hbase-1.0.0-cdh5.4.0
59+
# Hive Configuration Directory can be controlled by:
60+
export HIVE_CONF_DIR=/opt/modules/hive-2.1.0/conf
61+
```
62+
3、启动进行测试
63+
首先启动HDFS,然后创建Hive的目录
64+
bin/hdfs dfs -mkdir -p /tmp
65+
bin/hdfs dfs -chmod g+w /tmp
66+
bin/hdfs dfs -mkdir -p /user/hive/warehouse
67+
bin/hdfs dfs -chmod g+w /user/hive/warehouse
68+
4、测试
69+
```
70+
./hive
71+
#查看数据库
72+
show databases;
73+
#使用默认数据库
74+
use default;
75+
#查看表
76+
show tables;
77+
78+
```
79+
### Hive与mysql集成
80+
利用mysql放Hive的元数据。
81+
1、在/opt/modules/hive-2.1.0/conf目录下创建hive-site.xml文件,配置mysql元数据库。
82+
```
83+
<?xml version="1.0"?>
84+
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
85+
86+
87+
<configuration>
88+
<property>
89+
<name>javax.jdo.option.ConnectionURL</name>
90+
<value>jdbc:mysql://bigdata-pro01.kfk.com/metastore?createDatabaseIfNotExist=true</value>
91+
</property>
92+
<property>
93+
<name>javax.jdo.option.ConnectionDriverName</name>
94+
<value>com.mysql.jdbc.Driver</value>
95+
</property>
96+
<property>
97+
<name>javax.jdo.option.ConnectionUserName</name>
98+
<value>root</value>
99+
</property>
100+
<property>
101+
<name>javax.jdo.option.ConnectionPassword</name>
102+
<value>123456</value>
103+
</property>
104+
<property>
105+
<name>hbase.zookeeper.quorum</name>
106+
<value>bigdata-pro01.kfk.com,bigdata-pro02.kfk.com,bigdata-pro03.kfk.com</value>
107+
</property>
108+
109+
110+
</configuration>
111+
```
112+
2、设置用户连接信息
113+
114+
1)查看用户信息
115+
mysql -uroot -p123456
116+
show databases;
117+
use mysql;
118+
show tables;
119+
select User,Host,Password from user;
120+
2)更新用户信息
121+
update user set Host='%' where User = 'root' and Host='localhost'
122+
3)删除用户信息
123+
delete from user where user='root' and host='127.0.0.1'
124+
select User,Host,Password from user;
125+
delete from user where host='localhost';
126+
删除到只剩图中这一行数据
127+
![](http://ww1.sinaimg.cn/large/005BOtkIly1fzfqckmjxej30ej031q2s.jpg)
128+
4)刷新信息
129+
flush privileges;
130+
3.拷贝mysql驱动包到hive的lib目录下
131+
cp mysql-connector-java-5.1.35.jar /opt/modules/hive-2.1.0/lib/
132+
4.保证第三台集群到其他节点无秘钥登录
133+
134+
### Hive与mysql测试
135+
1.启动HDFS和YARN服务
136+
2.启动hive
137+
./hive
138+
3.通过hive服务创建表
139+
CREATE TABLE stu(id INT,name STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ;
140+
4.创建数据文件
141+
vi /opt/datas/stu.txt
142+
00001 zhangsan
143+
00002 lisi
144+
00003 wangwu
145+
00004 zhaoliu
146+
5.加载数据到hive表中
147+
load data local inpath '/opt/datas/stu.txt' into table stu;
148+
直接在hive查看表中内容就ok。
149+
在mysql数据库中hive的metastore元数据。(元数据是啥,去看看hive介绍吧)
150+
![](http://ww1.sinaimg.cn/large/005BOtkIly1fzfqeibkrtj306103ta9v.jpg)
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
---
2+
title: 第十二章:Hive与Hbase集成
3+
date: 2019-1-23 21:30:01
4+
categories: "用户日志实时与离线分析系统"
5+
tags:
6+
- 项目
7+
---
8+
9+
### Hive与HBase集成配置
10+
1、在hive-site.xml文件中配置Zookeeper,hive通过这个参数去连接HBase集群。
11+
```
12+
<property>
13+
<name>hbase.zookeeper.quorum</name> <value>bigdata-pro01.kfk.com,bigdata-pro02.kfk.com,bigdata-pro03.kfk.com</value>
14+
</property>
15+
```
16+
2、需要把hbase中的部分jar包拷贝到hive中
17+
这里采用软连接的方式:
18+
执行如下命令:
19+
```
20+
export HBASE_HOME=/opt/modules/hbase-1.0.0-cdh5.4.0
21+
export HIVE_HOME=/opt/modules/hive-2.1.0
22+
ln -s $HBASE_HOME/lib/hbase-server-1.0.0-cdh5.4.0.jar $HIVE_HOME/lib/hbase-server-1.0.0-cdh5.4.0.jar
23+
24+
ln -s $HBASE_HOME/lib/hbase-client-1.0.0-cdh5.4.0.jar $HIVE_HOME/lib/hbase-client-1.0.0-cdh5.4.0.jar
25+
26+
ln -s $HBASE_HOME/lib/hbase-protocol-1.0.0-cdh5.4.0.jar $HIVE_HOME/lib/hbase-protocol-1.0.0-cdh5.4.0.jar
27+
28+
ln -s $HBASE_HOME/lib/hbase-it-1.0.0-cdh5.4.0.jar $HIVE_HOME/lib/hbase-it-1.0.0-cdh5.4.0.jar
29+
30+
ln -s $HBASE_HOME/lib/htrace-core-3.0.4.jar $HIVE_HOME/lib/htrace-core-3.0.4.jar
31+
32+
ln -s $HBASE_HOME/lib/hbase-hadoop2-compat-1.0.0-cdh5.4.0.jar $HIVE_HOME/lib/hbase-hadoop2-compat-1.0.0-cdh5.4.0.jar
33+
34+
ln -s $HBASE_HOME/lib/hbase-hadoop-compat-1.0.0-cdh5.4.0.jar $HIVE_HOME/lib/hbase-hadoop-compat-1.0.0-cdh5.4.0.jar
35+
36+
ln -s $HBASE_HOME/lib/high-scale-lib-1.1.1.jar $HIVE_HOME/lib/high-scale-lib-1.1.1.jar
37+
38+
ln -s $HBASE_HOME/lib/hbase-common-1.0.0-cdh5.4.0.jar $HIVE_HOME/lib/hbase-common-1.0.0-cdh5.4.0.jar
39+
```
40+
3、测试
41+
在hbase中建立一个表,里面存有数据(实际底层就是在hdfs上),然后Hive创建一个表与HBase中的表建立联系。
42+
1)先在hbase建立一个表
43+
(不熟悉的,看指令https://www.cnblogs.com/cxzdy/p/5583239.html)
44+
![](http://ww1.sinaimg.cn/large/005BOtkIly1fzgupdmei1j30h5037mx4.jpg)
45+
2)启动hive,建立联系(之前要先启动mysql,因为元数据在里面)
46+
```
47+
create external table t1(
48+
key int,
49+
name string,
50+
age string
51+
)
52+
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
53+
WITH SERDEPROPERTIES("hbase.columns.mapping" = ":key,info:name,info:age")
54+
TBLPROPERTIES("hbase.table.name" = "t1");
55+
```
56+
3)hive结果
57+
执行 select * from t1;
58+
![](http://ww1.sinaimg.cn/large/005BOtkIly1fzgutrr5x7j30b0035glg.jpg)
59+
4、为项目中的weblogs建立联系
60+
之前我们把数据通过flume导入到hbase中了,所以同样我们在hive中建立联系,可以用hive对hbase中的数据进行简单的sql分析,离线分析。
61+
```
62+
create external table weblogs(
63+
id string,
64+
datatime string,
65+
userid string,
66+
searchname string,
67+
retorder string,
68+
cliorder string,
69+
cliurl string
70+
)
71+
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
72+
WITH SERDEPROPERTIES("hbase.columns.mapping" = ":key,info:datatime,info:userid,info:searchname,info:retorder,info:cliorder,info:cliurl")
73+
TBLPROPERTIES("hbase.table.name" = "weblogs");
74+
```
75+
76+
### Hive与HBase集成中的致命bug
77+
问题如图:
78+
![](http://ww1.sinaimg.cn/large/005BOtkIly1fzguxe0p4ej30nu0hl0ua.jpg)
79+
参考办法:https://www.cnblogs.com/zlslch/p/8228781.html
80+
按照上述,参考还是解决不了。
81+
最初怀疑是hbase中的jar包没有导入到hive中,或者导入错了,结果不是这个原因。网上有个大哥也是遇到这个问题了,写了一篇日志,最后他说不知如何解决??
82+
*********************************************
83+
最终:我去官网看看,官网上说,hbase 1.x之后的版本,需要更高版本的hive匹配,最好是hive 2.x,上述的错误是因为我用的hive-0.13.1-bin和hbase-1.0.0-cdh5.4.0,应该是不兼容导致的,莫名bug。于是采用了 hive-2.1.0,我查了下这个版本与hadoop其他组件也是兼容的,所以,采用这个。配置仍然采用刚才的方法(上一章和这一章),主要有mysql元数据配置(驱动包别忘了),各种xml配置,测试下。最后,在重启hive之前,**先把hbase重启了**,很重要。终于成功了。。开心。

0 commit comments

Comments
 (0)