大数据项目实践过程笔记

开发工具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 )[2019112801: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数 三者之间关系
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值