开发工具intelijidea 2.19.3
目前围绕Hadoop体系的大数据架构包括:
传统大数据架构
数据分析的业务没有发生任何变化,但是因为数据量、性能等问题导致系统无法正常使用,需要进行升级改造,那么此类架构便是为了解决这个问题。依然保留了ETL的动作,将数据经过ETL动作进入数据存储。数据分析需求依旧以BI场景为主,但是因为数据量、性能等问题无法满足日常使用。
流式架构
在传统大数据架构的基础上,流式架构数据全程以流的形式处理,在数据接入端将ETL替换为数据通道。经过流处理加工后的数据,以消息的形式直接推送给了消费者。存储部分在外围系统以窗口的形式进行存储。适用于预警、监控、对数据有有效期要求的情况。
Lambda架构
Lambda架构算大数据系统里面举足轻重的架构,数据通道分为两条分支:实时流和离线。实时流依照流式架构,保障了其实时性,而离线则以批处理方式为主,保障了最终一致性。适用于同时存在实时和离线需求的情况。
Kappa架构
Kappa架构在Lambda的基础上进行了优化,将实时和流部分进行了合并,将数据通道以消息队列进行替代。因此对于Kappa架构来说,依旧以流处理为主,但是数据却在数据湖层面进行了存储,当需要进行离线分析或者再次计算的时候,则将数据湖的数据再次经过消息队列重播一次则可。
Unifield架构
Unifield架构将机器学习和数据处理揉为一体,在流处理层新增了机器学习层。数据在经过数据通道进入数据湖后,新增了模型训练部分,并且将其在流式层进行使用。同时流式层不单使用模型,也包含着对模型的持续训练。适用于有着大量数据需要分析,同时对机器学习方便又有着非常大的需求或者有规划的情况。
最近写项目需要将其打成jar上传到服务器上,之前一直写到是web,打的是war包,这次写的是游戏服务器,是jar包。顺便记之。
maven打包
关于打包有两种类型:①不带依赖的打包,②带依赖的打包
默认情况下我们使用maven install打包生成的是第①种,如果想要第②种,可以使用插件实现
使用插件:
maven-assembly-plugin
2.2
com.lhcc.weblog.ReadWebLog
jar-with-dependencies
注意:需要在run build运行的时候添加如下参数:
assembly:assembly
这样,将会生成①不带依赖的打包和②带依赖的打包。
插件生成的jar.png
生成带依赖jar主要两个步骤
①在pom中添加plugin依赖
②build的时候添加assembly:assembly参数
第一步:pom.xml
4.0.0
com.lhcc
hadoop-word-count
1.0
org.apache.maven.plugins
maven-compiler-plugin
3.3
8
UTF-8
2.6.0-cdh5.15.2
cloudera
https://repository.cloudera.com/artifactory/cloudera-repos/
org.apache.hadoop
hadoop-client
${hadoop.version}
org.apache.commons
commons-lang3
3.8.1
第二步
maven install
java -cp weblog.jar com.lhcc.weblog.ReadWebLog /home/fgq/codec/SogouQ.log /home/fgq/codec/weblogs.log
注意 SogouQ.log 网上下载的sogo的日志数据https://www.sogou.com/labs/resource/q.php
1. [agent0.properties]
a0.sources = s1
a0.sinks = k1
a0.channels = c1
a0.sources.s1.type = avro
a0.sources.s1.channels = c1
#可以写死成192.168.146.100 也可以写成0.0.0.0
a0.sources.s1.bind = 0.0.0.0
a0.sources.s1.port = 4545
a0.channels.c1.type = memory
a0.channels.c1.capacity = 1000
a0.channels.c1.transactionCapacity = 100
a0.sinks.k1.type = logger
a0.sinks.k1.channel = c1
2.先启动Avro[agent1.properties]的Source的监听端口(192.168.146.100:4545)
flume-ng agent --conf conf --name a0 --conf-file conf/agent0.properties -Dflume.root.logger=INFO,console -Dorg.apache.flume.log.printconfig=true -Dorg.apache.flume.log.rawdata=true
或
flume-ng agent --conf conf --name a0 --conf-file conf/agent0.properties -Dflume.root.logger=INFO,console
3.[agent2.properties]
a2.sources = r2
a2.channels = c2
a2.sinks = k2
a2.sources.r2.type = exec
#来源于监听文件weblogs.log文件
a2.sources.r2.command = tail -F /home/fgq/codec/weblogs.log
a2.sources.r2.channels = c2
a2.channels.c2.type = memory
a2.channels.c2.capacity = 1000
a2.channels.c2.transactionCapacity = 100
a2.channels.c2.keep-alive = 30
a2.sinks.k2.type = avro
a2.sinks.k2.channel = c2
# 落地点是master机器的5555端口(主机名和端口号都必须与agent0.properties中开启的一致,否则会报错192.168.146.100:4545无法连接)
a2.sinks.k2.hostname=192.168.146.100
a2.sinks.k2.port=4545
4.再启动Avro的Sink
flume-ng agent --conf conf --name a2 --conf-file conf/agent2.properties -Dflume.root.logger=INFO,console -Dorg.apache.flume.log.printconfig=true -Dorg.apache.flume.log.rawdata=true
或
flume-ng agent --conf conf --name a2 --conf-file conf/agent2.properties -Dflume.root.logger=INFO,console
*注意一定要先开启监听端口,后开启Avro的sink
原因:运行hbase(zookeeper)的用户无法写入zookeeper文件,导致znode data为空。
解决方法:
方法一:重启hbase(可能是zookeeper或hbase不稳定造成的 重启不一定起作用)
方法二:在hbase-site.xml指定一个运行hbase的用户有写入文件权限的目录作为zookeeper数据目录,如
hbase.zookeeper.property.dataDir
/opt/zk_data
方法三:格式化NameNode
(1)删除所有虚拟机上hadoop配置文件core-site.xml文件中指定的hadoop的临时目录
(2)在slave1 slave2 slave3上启动journalnode 在两个NameNode(master或slave3)中选择一个(如master)执行hdfs格式化命令:
hadoop namenode -format
(3)把master上的fsimage文件拷贝到slave3上:scp -r /opt/hadoop-2.5.1 root@slave3:/opt
(4)在两个NameNode(master slave3)中选择一个(如master)进行zookeeper格式化: hdfs zkfc -formatZK
(5) 启动zookeeper
(6)启动hdfs
(7)启动hbase
(8)进入hbase shell 命令行界面
(9)输入list命令 就可以正常显示了
原因是 hbase的jar包没有正确导入到hadoop的classpath目录下面
参看 笔记hbase-day5的 hbase mr编程
确认一下是否启动了Hbase服务 start-hbase.sh
flume-ng agent --conf conf --name a0 --conf-file conf/agent0.properties -Dflume.root.logger=INFO,console
flume-ng agent --conf conf --name a2 --conf-file conf/agent2.properties -Dflume.root.logger=INFO,console
java -cp weblog.jar com.lhcc.weblog.ReadWebLog /home/fgq/codec/SogouQ.log /home/fgq/codec/weblogs.log
flume-ng agent --conf conf --name a1 --conf-file conf/agent1.properties -Dflume.root.logger=INFO,console
flume-ng agent --conf conf --name a2 --conf-file conf/agent2.properties -Dflume.root.logger=INFO,console
kafka-console-consumer.sh --zookeeper s101:2181,s102:2181,s103:2181 --topic weblogs --from-beginning
java -cp weblog.jar com.lhcc.weblog.ReadWebLog /home/fgq/codec/SogouQ.log /home/fgq/codec/weblogs.log
kafka-create-topic.sh --zookeeper s101:2181,s102:2181,s103:2181 --replica 3 --partition 2 --topic weblogs
访问时间\t用户ID\t[查询词]\t该URL在返回结果中的排名\t用户点击的顺序号\t用户点击的URL
datatime,userid,searchname,retorder,cliorder,cliurl
column=info:datatime,userid,searchname,retorder,cliorder,cliurl, timestamp=1574927730292,
value=00:01:06\x0967069526
65130084\x09[\xE7\x81\xAB\xE7\xAE\xAD\xE4\xBD\x95\xE6\x97\
xB6vs\xE6\xB9\x96\xE4\xBA\xBA\xE5\x95\x8A]\x094 6\x09wenwe
n.soso.com/z/q52390704.htm
kafka-server-start.sh config/s1.properties
kafka-server-start.sh config/s2.properties
kafka-server-start.sh config/s3.properties
kafka.common.KafkaException: Wrong request type 18
at kafka.api.RequestKeys . d e s e r i a l i z e r F o r K e y ( R e q u e s t K e y s . s c a l a : 53 ) a t k a f k a . n e t w o r k . R e q u e s t C h a n n e l .deserializerForKey(RequestKeys.scala:53) at kafka.network.RequestChannel .deserializerForKey(RequestKeys.scala:53)atkafka.network.RequestChannelRequest.(RequestChannel.scala:49)
at kafka.network.Processor.read(SocketServer.scala:353)
at kafka.network.Processor.run(SocketServer.scala:245)
at java.lang.Thread.run(Thread.java:745)
INFO conflict in /controller data: { “brokerid”:1, “timestamp”:“1574932456824”, “version”:1 } stored data: { “brokerid”:1, “timestamp”:“1574932455346”, “version”:1 } (kafka.utils.ZkUtils ) [ 2019 − 11 − 2801 : 20 : 49 , 220 ] I N F O I w r o t e t h i s c o n f l i c t e d e p h e m e r a l n o d e [ " b r o k e r i d " : 1 , " t i m e s t a m p " : " 1574932456824 " , " v e r s i o n " : 1 ] a t / c o n t r o l l e r a w h i l e b a c k i n a d i f f e r e n t s e s s i o n , h e n c e I w i l l b a c k o f f f o r t h i s n o d e t o b e d e l e t e d b y Z o o k e e p e r a n d r e t r y ( k a f k a . u t i l s . Z k U t i l s ) [2019-11-28 01:20:49,220] INFO I wrote this conflicted ephemeral node [{ "brokerid":1, "timestamp":"1574932456824", "version":1 }] at /controller a while back in a different session, hence I will backoff for this node to be deleted by Zookeeper and retry (kafka.utils.ZkUtils )[2019−11−2801:20:49,220]INFOIwrotethisconflictedephemeralnode["brokerid":1,"timestamp":"1574932456824","version":1]at/controllerawhilebackinadifferentsession,henceIwillbackoffforthisnodetobedeletedbyZookeeperandretry(kafka.utils.ZkUtils)
free -m
解决方法 guava 冲突了,版本不一致,参考 http://www.luyixian.cn/news_show_4252.aspx,感谢这位作者
一般来说这样的问题是因为 pom 文件中有 google 的 guava 依赖吧?或者其他地方引用到了。 这个问题就是 guava 冲突了,版本不一致。所以大家优先去 pom 文件中排查。
有可能你会发现POM中并没有任何问题,那就去依赖包管理界面,比如idea的external Libraries查看以来的jar是否有guava,我的项目里面能看见有一个19版本的。这个貌似和spark不兼容,需要低版本到的guava,在pom里面添加一个15版本的,再次运行,发现没问题了。
com.google.guava
guava
15.0
1.从集群拷贝以下文件:core-site.xml、hbase-site.xml、hdfs-site.xml文件放到工程src下
2.pom.xml配置内容
UTF-8
cloudera
https://mvnrepository.com/artifact/org.apache.phoenix/phoenix-core/
org.apache.phoenix
phoenix-core
4.14.0-cdh5.14.2
注意* 使用maven时 版本如果不更新的话 可以使用一下两步解决
1.更改版本
2.删掉本地repository中的相关包内容 再次更新下载
jar版本包冲突
Hadoop lib 下已经存在了 jline 0.9x ,但是在hive中将Jline升级到了Jline2。
启动hive的时候,由于hive依赖hadoop,启动hive,会将hadoop的配置以及jar包等等导入到hive中,导致jar包版本冲突。
这个报错需要删除hadoop目录下,需要删除下面目录下的文件,重启hadoop和hive即可
$HADOOP_HOME/share/hadoop/yarn/lib/jline-0.9.94.jar
将Hive根目录下jline-2.12.jar替换到hadoop中
注意*hive-2.3.6 hadoop-3.2.0 实现上述步骤依然不行
换hive-1.2.2版本
这个应该是元数据的问题,hive的元数据存在mysql里面,所以如果你没有弄好mysql的权限,你的show databases是不可以用的。
解决办法:
1.首先检查你自己的hive-site.xml配置文件中的mysql账号和自己的创建hive_database的mysql账号是否一致。若不一致修改为创建了hive数据库的mysql账号。
javax.jdo.option.ConnectionURL
jdbc:mysql://192.168.1.195:3306/hadoop_hive?createDatabaseIfNotExist=true
javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver
javax.jdo.option.ConnectionUserName
root
javax.jdo.option.ConnectionPassword
123456
datanucleus.schema.autoCreateAll
true
2.mysql的权限问题
在mysql中:
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
grant all privileges on *.* to 'root'@'192.168.1.195' identified by '123456' with grant option;
flush privileges; 刷新权限
3.hive的服务端没有打开 //做完前两步可以试试环境是否已经可以,可以后此步可以忽略
1)hive --service metastore &
2)然后Ctrl+C
3)再hive,进去
我的maven中的setting.xml配置文件里面关于mirror部分的配置如下:
ibiblio
*
Human Readable Name for this Mirror.
http://mirrors.ibiblio.org/pub/mirrors/maven2/
错误就出在mirrorOf节点了,如果写*会覆盖掉所有的,不管是哪个repository,
最后都被这个镜像所mirror掉了,导致pom文件中的repository不生效了。
解决方案也很简单,把这个mirrorOf改掉就好了。具体修改建议参考maven官方说明:
maven的私服配置:http://my.oschina.net/liangbo/blog/195739
深入比较几种maven仓库的优先级:http://toozhao.com/2012/07/13/compare-priority-of-maven-repository/
http://maven.apache.org/guides/mini/guide-mirror-settings.html
Maven最佳实践--Maven仓库:http://juvenshun.iteye.com/blog/359256
Maven仓库管理之Nexus:http://my.oschina.net/aiguozhe/blog/101537
注意*myeclipse 也许反应比较慢 maven install 然后更新local Repository 然后update project
或者重启myeclipse 醒目有错号没什么 只要编译成功了也可以运行
01. 先关闭eclipse
02. 找到maven的本地仓库路径、例如(C:\Users\YourUserName.m2)
03. 删除文件夹:repository
04. 重新打开eclipse
05. clean 有问题的maven项目、点击Project → clean...
06. 右键有问题的maven项目、依次点击Maven → Update Project...
07. 关闭eclipse
08. 打开eclipse
09. 在Project Explorer中选中有问题的project
10. 按F5键刷新一会
11. 大功告成
1.为了方便地创建Scala Maven项目,我们在Eclipse配置远程的Maven Archetype,ArcheType相当于项目模板。在Preference页面中选择Maven->Archetypes:
2.点击 Add Remote Catelog,在弹出框的catlog file输入:http://repo1.maven.org/maven2/archetype-catalog.xml
3.OK,完成。
4.可以新建maven创建scala项目 选择的archetype为scala-archetype-simple
(scala1_2.11.2时)可能是Java jdk的版本过低(或过高),更改Java jdk的版本(1.8)
Project structure->修改jdk版本
使用idea在windows上连接远程hadoop开发
一.前置环境准备
1.下载一份hadoop本地解压,配置HADOOP_HOME的环境变量
idea运行时会读这个环境变量然后找到他里面的bin文件,其实不需要启动 只要有bin这个目录就行,不然会报错 找不到HADOOP_HOME这个环境变量
2.bin里面缺少了winutils.exe和hadoop.dll 需要额外下载
https://github.com/steveloughran/winutils 下载后把bin替换hadoop的bin即可
也可以不下载hadoop直接下载这个bin把环境变量配置成这个bin的上一级目录
3.将hadoop.dll 复制到C:\Windows\System32中 否则 会报 Exception in thread "main"java.lang.UnsatisfiedLinkError:org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
主页面上,
cluster summary:集群的概况
nimbus summary:
Supervisor Summary:
Nimbus Configuration
Topology Summary:最重要的有个search窗口,根据storm任务的topology name,搜索到对应任务,点击进入一个storm集群上跑的任务的topology name 是唯一的,否则提交会出错
点击到一个具体topology页面之后,
Topology summary:概况
Topology actions:对topology可以在页面进行操作
Topology stats:最近不同时间段的统计数据
spouts:所有的不同的spout,每个spout对应总共有多少executor,总共有多少个task,每个executor运行的task数量等于两者相除 想查看具体某个spout或者bolt (都属于component)的运行情况,只需要点击对应id上的链接
Component summary:
Component actions:对这个component进行操作
Spout stats:不同时间窗口的统计结果
Output stats:总的输出的统计
Executors:具体的执行线程,这个很重要 点击具体某个executor的port连接,可以查看日志 这个上面打出来的日志,是包含整个worker进程所有executor线程的日志
bolts:同上
Worker Resources:具体的worker进程
Topology Visualization:可视化
Topology Configuration:整个topology的配置
mvn archetype:generate -DarchetypeGroupId=org.apache.flink -DarchetypeArtifactId=flink-quickstart-scala -DarchetypeVersion=1.9.0
这种异常的发生通常是因为程序需要一个隐式参数(implicit parameter),解决方法
import org.apache.flink.api.scala.ExecutionEnvironment 改为=》import org.apache.flink.api.scala._
类没有找到,勾选maven面板中的profiles选项
1.因为没有区分环境(java,scala),不同环境导入的jar包不同
2.没有区分流处理(StreamExecutionEnvironment)和批处理(ExecutionEnvironment)环境
对承载的错误地方进行 try cache 或者承载的方法直接抛出异常(throws Exception)
原理分析
代码分析运行
默认在zookeeper安装路径bin文件夹里,文件名是zookeeper.out。可以通过修改bin/zkEnv.sh文件来指定日志路径。
默认设置
if ["x${ZOO_LOG_DIR}"="x"]
then
ZOO_LOG_DIR="."
fi
修改成
if ["x${ZOO_LOG_DIR}"="x"]
then
ZOO_LOG_DIR="$ZOOBINDIR/../logs"
fi
最后日志文件就生成到安装目录的logs文件夹根目录下
切片数 map数 reduce数 三者之间关系