开发工具intelijidea 2.19.3
目前围绕Hadoop体系的大数据架构包括:
传统大数据架构
数据分析的业务没有发生任何变化,但是因为数据量、性能等问题导致系统无法正常使用,需要进行升级改造,那么此类架构便是为了解决这个问题。依然保留了ETL的动作,将数据经过ETL动作进入数据存储。数据分析需求依旧以BI场景为主,但是因为数据量、性能等问题无法满足日常使用。
流式架构
在传统大数据架构的基础上,流式架构数据全程以流的形式处理,在数据接入端将ETL替换为数据通道。经过流处理加工后的数据,以消息的形式直接推送给了消费者。存储部分在外围系统以窗口的形式进行存储。适用于预警、监控、对数据有有效期要求的情况。
Lambda架构
Lambda架构算大数据系统里面举足轻重的架构,数据通道分为两条分支:实时流和离线。实时流依照流式架构,保障了其实时性,而离线则以批处理方式为主,保障了最终一致性。适用于同时存在实时和离线需求的情况。
Kappa架构
Kappa架构在Lambda的基础上进行了优化,将实时和流部分进行了合并,将数据通道以消息队列进行替代。因此对于Kappa架构来说,依旧以流处理为主,但是数据却在数据湖层面进行了存储,当需要进行离线分析或者再次计算的时候,则将数据湖的数据再次经过消息队列重播一次则可。
Unifield架构
Unifield架构将机器学习和数据处理揉为一体,在流处理层新增了机器学习层。数据在经过数据通道进入数据湖后,新增了模型训练部分,并且将其在流式层进行使用。同时流式层不单使用模型,也包含着对模型的持续训练。适用于有着大量数据需要分析,同时对机器学习方便又有着非常大的需求或者有规划的情况。
###eclipse maven 打包jar
最近写项目需要将其打成jar上传到服务器上,之前一直写到是web,打的是war包,这次写的是游戏服务器,是jar包。顺便记之。
maven打包
关于打包有两种类型:①不带依赖的打包,②带依赖的打包
默认情况下我们使用maven install打包生成的是第①种,如果想要第②种,可以使用插件实现
使用插件:
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2</version>
<configuration>
<archive>
<manifest>
<!-- 我运行这个jar所运行的主类 -->
<mainClass>com.lhcc.weblog.ReadWebLog</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>
<!-- 必须是这样写 -->
jar-with-dependencies
</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
注意:需要在run build运行的时候添加如下参数:
assembly:assembly
这样,将会生成①不带依赖的打包和②带依赖的打包。
插件生成的jar.png
生成带依赖jar主要两个步骤
①在pom中添加plugin依赖
②build的时候添加assembly:assembly参数
###myeclipse maven 打包jar
第一步:pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lhcc</groupId>
<artifactId>hadoop-word-count</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
<!--以下内容不是打包必须的 因项目而异-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<hadoop.version>2.6.0-cdh5.15.2</hadoop.version>
</properties>
<!---配置CDH仓库地址 确保maven配置的settings.xml中配置的镜像地址mirrorOf的值没有使用* 否则这边配的repositories就会被覆盖不生效-->
<repositories>
<repository>
<id>cloudera</id>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
</repository>
</repositories>
<dependencies>
<!--Hadoop-client-->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>${hadoop.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.8.1</version>
</dependency>
</dependencies>
</project>
第二步
maven install
###在ubuntu环境下面运行上面的jar
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
-----------------------------------------【flume】---------------------------------------------------------------
###flume 从[监听文件]中获取数据信息且下沉Sink到另一个监听ip(192.168.146.100)和端口(4545)中
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】---------------------------------------------------------------
###在hbase shell中使用list命令报错:ERROR: Can’t get master address from ZooKeeper; znode data == null原因及解决方法
原因:运行hbase(zookeeper)的用户无法写入zookeeper文件,导致znode data为空。
解决方法:
方法一:重启hbase(可能是zookeeper或hbase不稳定造成的 重启不一定起作用)
方法二:在hbase-site.xml指定一个运行hbase的用户有写入文件权限的目录作为zookeeper数据目录,如
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/opt/zk_data</value>
</property>
方法三:格式化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命令 就可以正常显示了
###s101: WARNING: /home/fgq/soft/hadoop-3.2.0/logs does not exist. Creating.
s102: /home/fgq/soft/hadoop/etc/hadoop/hadoop-env.sh: line 140: hbase: command not found
s102: WARNING: /home/fgq/soft/hadoop-3.2.0/logs does not exist. Creating.
Starting secondary namenodes [s103]
s103: /home/fgq/soft/hadoop/etc/hadoop/hadoop-env.sh: line 140: hbase: command not found
原因是 hbase的jar包没有正确导入到hadoop的classpath目录下面
参看 笔记hbase-day5的 hbase mr编程
hbase shell ERROR: Connection refused
确认一下是否启动了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
[2019-11-28 01:06:06,607] ERROR Closing socket for /192.168.146.100 because of error (kafka.network.Processor)
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)
###hbase数据如何查看(存入后是编码后的内容)
###[2019-11-28 00:44:18,726] ERROR Closing socket for /192.168.146.100 because of error (kafka.network.Processor)
kafka.common.KafkaException: Wrong request type 18
###查看内存使用情况
free -m
###maven启动storm+hbase程序时(或spark) tried to access method com.google.common.base.Stopwatch.()V from class org.apache.hadoop.hbase.zookeeper.MetaTableLocator
解决方法 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版本的,再次运行,发现没问题了。
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>15.0</version>
</dependency>
###Phoenix4.14.0-cdh5.14.2 Java api操作HBase
报错org.apache.hadoop.fs.FileSystem: Provider org.apache.hadoop.hdfs.DistributedFileSystem could not be instantiated
1.从集群拷贝以下文件:core-site.xml、hbase-site.xml、hdfs-site.xml文件放到工程src下
2.pom.xml配置内容
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!--这个是phoenix-core的maven资源地址-->
<repositories>
<repository>
<id>cloudera</id>
<url>https://mvnrepository.com/artifact/org.apache.phoenix/phoenix-core/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.apache.phoenix</groupId>
<artifactId>phoenix-core</artifactId>
<version>4.14.0-cdh5.14.2</version>
</dependency>
</dependencies>
注意* 使用maven时 版本如果不更新的话 可以使用一下两步解决
1.更改版本
2.删掉本地repository中的相关包内容 再次更新下载
-----------------------------------------【hive】---------------------------------------------------------------
###hive_异常_01_ Terminal initialization failed; falling back to unsupported
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_2.x不在支持 hive–MR 要想用必须降到hive_1.x版本
###hive> show databases; FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
这个应该是元数据的问题,hive的元数据存在mysql里面,所以如果你没有弄好mysql的权限,你的show databases是不可以用的。
解决办法:
1.首先检查你自己的hive-site.xml配置文件中的mysql账号和自己的创建hive_database的mysql账号是否一致。若不一致修改为创建了hive数据库的mysql账号。
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.1.195:3306/hadoop_hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
<property>
<name>datanucleus.schema.autoCreateAll</name>
<value>true</value>
</property>
</configuration>
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】---------------------------------------------------------------
###maven pom中的repository节点配置没有起作用
我的maven中的setting.xml配置文件里面关于mirror部分的配置如下:
<mirror>
<id>ibiblio</id>
<mirrorOf>*</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://mirrors.ibiblio.org/pub/mirrors/maven2/</url>
</mirror>
错误就出在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 醒目有错号没什么 只要编译成功了也可以运行
###Could not get the value for parameter encoding for plugin execution
default-resources Plugin org.apache.maven.plugins:maven-resources-plugin:2.5 or one of its dependencies
could not be resolved: Failed to collect dependencies for org.apache.maven.plugins:maven-resources-plugin:jar:2.5 ()
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. 大功告成
###Unable to create project from archetype [org.scala-tools.archetypes:scala-archetype-simple:1.2 -> http://scala-tools.org/repo-releases]
The desired archetype does not exist (org.scala-tools.archetypes:scala-archetype-simple:1.2)
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
###Error:scalac: Error: Error compiling the sbt component ‘compiler-interface-2.11.2-55.0’
sbt.internal.inc.CompileFailed: Error compiling the sbt component ‘compiler-interface-2.11.2-55.0’
at sbt.internal.inc.AnalyzingCompiler$.handleCompilationError
1
(
A
n
a
l
y
z
i
n
g
C
o
m
p
i
l
e
r
.
s
c
a
l
a
:
331
)
a
t
s
b
t
.
i
n
t
e
r
n
a
l
.
i
n
c
.
A
n
a
l
y
z
i
n
g
C
o
m
p
i
l
e
r
1(AnalyzingCompiler.scala:331) at sbt.internal.inc.AnalyzingCompiler
1(AnalyzingCompiler.scala:331)atsbt.internal.inc.AnalyzingCompiler.
a
n
o
n
f
u
n
anonfun
anonfuncompileSources
4
(
A
n
a
l
y
z
i
n
g
C
o
m
p
i
l
e
r
.
s
c
a
l
a
:
346
)
a
t
s
b
t
.
i
n
t
e
r
n
a
l
.
i
n
c
.
A
n
a
l
y
z
i
n
g
C
o
m
p
i
l
e
r
4(AnalyzingCompiler.scala:346) at sbt.internal.inc.AnalyzingCompiler
4(AnalyzingCompiler.scala:346)atsbt.internal.inc.AnalyzingCompiler.
a
n
o
n
f
u
n
anonfun
anonfuncompileSources
4
4
4adapted(AnalyzingCompiler.scala:341)
at sbt.io.IO
.
w
i
t
h
T
e
m
p
o
r
a
r
y
D
i
r
e
c
t
o
r
y
(
I
O
.
s
c
a
l
a
:
376
)
a
t
s
b
t
.
i
o
.
I
O
.withTemporaryDirectory(IO.scala:376) at sbt.io.IO
.withTemporaryDirectory(IO.scala:376)atsbt.io.IO.withTemporaryDirectory(IO.scala:383)
at sbt.internal.inc.AnalyzingCompiler
.
.
.anonfun$compileSources
2
(
A
n
a
l
y
z
i
n
g
C
o
m
p
i
l
e
r
.
s
c
a
l
a
:
341
)
a
t
s
b
t
.
i
n
t
e
r
n
a
l
.
i
n
c
.
A
n
a
l
y
z
i
n
g
C
o
m
p
i
l
e
r
2(AnalyzingCompiler.scala:341) at sbt.internal.inc.AnalyzingCompiler
2(AnalyzingCompiler.scala:341)atsbt.internal.inc.AnalyzingCompiler.
a
n
o
n
f
u
n
anonfun
anonfuncompileSources
2
2
2adapted(AnalyzingCompiler.scala:335)
at sbt.io.IO
.
w
i
t
h
T
e
m
p
o
r
a
r
y
D
i
r
e
c
t
o
r
y
(
I
O
.
s
c
a
l
a
:
376
)
a
t
s
b
t
.
i
o
.
I
O
.withTemporaryDirectory(IO.scala:376) at sbt.io.IO
.withTemporaryDirectory(IO.scala:376)atsbt.io.IO.withTemporaryDirectory(IO.scala:383)
at sbt.internal.inc.AnalyzingCompiler
.
c
o
m
p
i
l
e
S
o
u
r
c
e
s
(
A
n
a
l
y
z
i
n
g
C
o
m
p
i
l
e
r
.
s
c
a
l
a
:
335
)
a
t
o
r
g
.
j
e
t
b
r
a
i
n
s
.
j
p
s
.
i
n
c
r
e
m
e
n
t
a
l
.
s
c
a
l
a
.
l
o
c
a
l
.
C
o
m
p
i
l
e
r
F
a
c
t
o
r
y
I
m
p
l
.compileSources(AnalyzingCompiler.scala:335) at org.jetbrains.jps.incremental.scala.local.CompilerFactoryImpl
.compileSources(AnalyzingCompiler.scala:335)atorg.jetbrains.jps.incremental.scala.local.CompilerFactoryImpl.getOrCompileInterfaceJar(CompilerFactoryImpl.scala:113)
at org.jetbrains.jps.incremental.scala.local.CompilerFactoryImpl.
a
n
o
n
f
u
n
anonfun
anonfungetScalac
1
(
C
o
m
p
i
l
e
r
F
a
c
t
o
r
y
I
m
p
l
.
s
c
a
l
a
:
49
)
a
t
s
c
a
l
a
.
O
p
t
i
o
n
.
m
a
p
(
O
p
t
i
o
n
.
s
c
a
l
a
:
146
)
a
t
o
r
g
.
j
e
t
b
r
a
i
n
s
.
j
p
s
.
i
n
c
r
e
m
e
n
t
a
l
.
s
c
a
l
a
.
l
o
c
a
l
.
C
o
m
p
i
l
e
r
F
a
c
t
o
r
y
I
m
p
l
.
g
e
t
S
c
a
l
a
c
(
C
o
m
p
i
l
e
r
F
a
c
t
o
r
y
I
m
p
l
.
s
c
a
l
a
:
47
)
a
t
o
r
g
.
j
e
t
b
r
a
i
n
s
.
j
p
s
.
i
n
c
r
e
m
e
n
t
a
l
.
s
c
a
l
a
.
l
o
c
a
l
.
C
o
m
p
i
l
e
r
F
a
c
t
o
r
y
I
m
p
l
.
c
r
e
a
t
e
C
o
m
p
i
l
e
r
(
C
o
m
p
i
l
e
r
F
a
c
t
o
r
y
I
m
p
l
.
s
c
a
l
a
:
25
)
a
t
o
r
g
.
j
e
t
b
r
a
i
n
s
.
j
p
s
.
i
n
c
r
e
m
e
n
t
a
l
.
s
c
a
l
a
.
l
o
c
a
l
.
C
a
c
h
i
n
g
F
a
c
t
o
r
y
.
1(CompilerFactoryImpl.scala:49) at scala.Option.map(Option.scala:146) at org.jetbrains.jps.incremental.scala.local.CompilerFactoryImpl.getScalac(CompilerFactoryImpl.scala:47) at org.jetbrains.jps.incremental.scala.local.CompilerFactoryImpl.createCompiler(CompilerFactoryImpl.scala:25) at org.jetbrains.jps.incremental.scala.local.CachingFactory.
1(CompilerFactoryImpl.scala:49)atscala.Option.map(Option.scala:146)atorg.jetbrains.jps.incremental.scala.local.CompilerFactoryImpl.getScalac(CompilerFactoryImpl.scala:47)atorg.jetbrains.jps.incremental.scala.local.CompilerFactoryImpl.createCompiler(CompilerFactoryImpl.scala:25)atorg.jetbrains.jps.incremental.scala.local.CachingFactory.anonfun$createCompiler
3
(
C
a
c
h
i
n
g
F
a
c
t
o
r
y
.
s
c
a
l
a
:
24
)
a
t
o
r
g
.
j
e
t
b
r
a
i
n
s
.
j
p
s
.
i
n
c
r
e
m
e
n
t
a
l
.
s
c
a
l
a
.
l
o
c
a
l
.
C
a
c
h
e
.
3(CachingFactory.scala:24) at org.jetbrains.jps.incremental.scala.local.Cache.
3(CachingFactory.scala:24)atorg.jetbrains.jps.incremental.scala.local.Cache.anonfun$getOrUpdate
2
(
C
a
c
h
e
.
s
c
a
l
a
:
20
)
a
t
s
c
a
l
a
.
O
p
t
i
o
n
.
g
e
t
O
r
E
l
s
e
(
O
p
t
i
o
n
.
s
c
a
l
a
:
121
)
a
t
o
r
g
.
j
e
t
b
r
a
i
n
s
.
j
p
s
.
i
n
c
r
e
m
e
n
t
a
l
.
s
c
a
l
a
.
l
o
c
a
l
.
C
a
c
h
e
.
g
e
t
O
r
U
p
d
a
t
e
(
C
a
c
h
e
.
s
c
a
l
a
:
19
)
a
t
o
r
g
.
j
e
t
b
r
a
i
n
s
.
j
p
s
.
i
n
c
r
e
m
e
n
t
a
l
.
s
c
a
l
a
.
l
o
c
a
l
.
C
a
c
h
i
n
g
F
a
c
t
o
r
y
.
c
r
e
a
t
e
C
o
m
p
i
l
e
r
(
C
a
c
h
i
n
g
F
a
c
t
o
r
y
.
s
c
a
l
a
:
24
)
a
t
o
r
g
.
j
e
t
b
r
a
i
n
s
.
j
p
s
.
i
n
c
r
e
m
e
n
t
a
l
.
s
c
a
l
a
.
l
o
c
a
l
.
L
o
c
a
l
S
e
r
v
e
r
.
c
o
m
p
i
l
e
(
L
o
c
a
l
S
e
r
v
e
r
.
s
c
a
l
a
:
27
)
a
t
o
r
g
.
j
e
t
b
r
a
i
n
s
.
j
p
s
.
i
n
c
r
e
m
e
n
t
a
l
.
s
c
a
l
a
.
r
e
m
o
t
e
.
M
a
i
n
2(Cache.scala:20) at scala.Option.getOrElse(Option.scala:121) at org.jetbrains.jps.incremental.scala.local.Cache.getOrUpdate(Cache.scala:19) at org.jetbrains.jps.incremental.scala.local.CachingFactory.createCompiler(CachingFactory.scala:24) at org.jetbrains.jps.incremental.scala.local.LocalServer.compile(LocalServer.scala:27) at org.jetbrains.jps.incremental.scala.remote.Main
2(Cache.scala:20)atscala.Option.getOrElse(Option.scala:121)atorg.jetbrains.jps.incremental.scala.local.Cache.getOrUpdate(Cache.scala:19)atorg.jetbrains.jps.incremental.scala.local.CachingFactory.createCompiler(CachingFactory.scala:24)atorg.jetbrains.jps.incremental.scala.local.LocalServer.compile(LocalServer.scala:27)atorg.jetbrains.jps.incremental.scala.remote.Main.make(Main.scala:88)
at org.jetbrains.jps.incremental.scala.remote.Main$.nailMain(Main.scala:36)
at org.jetbrains.jps.incremental.scala.remote.Main.nailMain(Main.scala)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at com.martiansoftware.nailgun.NGSession.run(NGSession.java:319)
(scala1_2.11.2时)可能是Java jdk的版本过低(或过高),更改Java jdk的版本(1.8)
Project structure->修改jdk版本
###idea 运行Hadoop或spark程序时 报有关winutils的错误
使用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
-----------------------------------------【storm】---------------------------------------------------------------
###如何在ui上查看storm集群和任务
主页面上,
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的配置
-----------------------------------------【flink】---------------------------------------------------------------
###命令生成的flink项目 cmd下
mvn archetype:generate -DarchetypeGroupId=org.apache.flink -DarchetypeArtifactId=flink-quickstart-scala -DarchetypeVersion=1.9.0
###flink编译报错:could not find implicit value for evidence parameter of type org.apache.flink.api.common…
这种异常的发生通常是因为程序需要一个隐式参数(implicit parameter),解决方法
import org.apache.flink.api.scala.ExecutionEnvironment 改为=》import org.apache.flink.api.scala._
###java.lang.ClassNotFoundException: org.apache.flink.api.common.typeinfo.TypeInformation
类没有找到,勾选maven面板中的profiles选项
###Cannot resolve method ‘socketTextStream’ in ‘ExecutionEnvironment’
1.因为没有区分环境(java,scala),不同环境导入的jar包不同
2.没有区分流处理(StreamExecutionEnvironment)和批处理(ExecutionEnvironment)环境
###Unhandled exception: java.lang.Exception
对承载的错误地方进行 try cache 或者承载的方法直接抛出异常(throws Exception)
原理分析
代码分析运行
-----------------------------------------【zookeeper】---------------------------------------------------------------
###zookeeper的日志路径
默认在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文件夹根目录下
mapreduce
切片数 map数 reduce数 三者之间关系