赞
踩
1) 2018-10-19 CDH OOZIE UI页面打不开:
解决:
把下载好的ext-2.2.zip拷贝到Oozie主机的/var/lib/oozie目录下
运行命令unzip ext-2.2.zip解压(没有包就下载)
2)运行spark2报错:
ava.lang.NoClassDefFoundError: scala/runtime/LambdaDeserialize
解决:
idea配置的scala-sdk版本是2.12.4,而远程spark-shell版本是2.11.8,所以确实两个版本是不一致的。网上很多的解决方法是:
1、下载scala-2.11.8
2、File -> Default Project Structure -> Global Libraries,修改scala-sdk信息
3)hue配置oozie 工作流参考:https://cloud.tencent.com/developer/article/1078092 ,参考2:https://cloud.tencent.com/developer/article/1078092
报错:java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.oozie.action.hadoop.SparkMain not found
解决:指定apark2
在选项PROPERTIES 指定使用spark2:oozie.action.sharelib.for.spark spark2 (必须这样写,不要指定到路径)
4)运行cdh的oozie的spark2工作流报错:
Main class [org.apache.oozie.action.hadoop.SparkMain], main() threw exception, org/apache/spark/sql/SparkSession$
这是因为没有指定好spark2路径,oozie 会自动用spark1运行程序,造成找不到sparksession
10)继续运行oozie 报错:Main class [org.apache.oozie.action.hadoop.SparkMain], main() threw exception, Exception when registering SparkListener
解决:参考:https://cloud.tencent.com/developer/article/1078092
11)oozie配置sqoop 一些问题参考地址:https://blog.csdn.net/afanyusong/article/details/79162559
报找不到驱动,把oralce驱动放到sqoop的jars目录就OK
12)oozie运行sqoop 报错:AccessControlException: Permission denied: user=hue, access=WRITE, inode="/user/hdfs":hdfs:supergroup:drwxr-xr-x
解决:把/user/hdfs/* 的目录改成777
13)sqoop导入数据报错:
No primary key could be found for table ZLHIS.MDH_MDH. Please specify one with --split-by or perform a sequential import with '-m 1'.
原来脚本:import --connect jdbc:oracle:thin:@192.168.148.225:1521:orcl1 --username zlhis --password zlhis --table ZLHIS.MDH_MDH --target-dir /user/hdfs/MDH_MDH -m 6
改成 -m 1 就可以
14)oozie提交定时任务时间差问题:
解决: 参考:https://blog.csdn.net/abysscarry/article/details/82156686
Hue中配置
1)都是通过hue对oozie进行配置,所以首先保证hue中 time_zone为 Asia/Shanghai
2)可以在oozie的web控制台 setting 选项中看到默认时区为GMT时区 ,改为CST(Asia/shanghai)
3)修改oozie-server配置
我们进入oozie配置页面,在 oozie-site.xml 的 Oozie Server 高级配置代码段(安全阀)中添加:
<property>
<name>oozie.processing.timezone</name>
<value>GMT+0800</value>
</property>
4)提交任务时候,选择Asia/Shanghai
15)oozie提交任务报错:
错误提示:Error: E1003 : E1003: Invalid coordinator application attributes, Coordinator job with frequency [2] minutes is faster than allowed maximum of 5 minutes (oozie.service.coord.check.maximum.frequency is set to true)
错误原因:开启了检查频率,导致5分钟以内的频率运行失败
解决:关闭频率检查功能 配置oozie-site.xml文件
<property>
<name>oozie.service.coord.check.maximum.frequency</name>
<value>false</value>
</property>
注意定时任务,在Every选项上也要填写好时间,否则不一定能正确实行定时任务
16)在hue中的oozie工作流中拖入多个任务就能完成多个任务的顺序执行
hadoop 一些命令:
hadoop fs -cat /test/gonganbu/scene_analysis_suggestion/* | shuf -n 5
返回前几行的样本数据
hadoop fs -cat /test/gonganbu/scene_analysis_suggestion/* | head -100
返回最后几行的样本数据
hadoop fs -cat /test/gonganbu/scene_analysis_suggestion/* | tail -5
查看文本行数
hadoop fs -cat hdfs://172.16.0.226:8020/test/sys_dict/sysdict_case_type.csv |wc -l
查看文件大小(单位byte)
hadoop fs -du hdfs://172.16.0.226:8020/test/sys_dict/*
hadoop fs -count hdfs://172.16.0.226:8020/test/sys_dict/*
17)IDEA运行spark2.3操作hbase报错:Spark2.3 - 运行异常NoSuchMethodError:io.netty.buffer.PooledByteBufAllocator.metric()
解决:这是版本冲突引起,解决,在pom.xml加入:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.18.Final</version>
</dependency>
</dependencies>
</dependencyManagement>
18)IDEA运行spark2.3操作hbase 继续报错:
No IP address found for server: master:2181
java.net.UnknownHostException: master
解决:
conf.set("hbase.zookeeper.property.clientPort", "2181")
conf.set("hbase.zookeeper.quorum", "192.168.148.94")
conf.set("hbase.master", "192.168.148.94:60000 ")
19)sqoop 导入数据时需要注意
导入时需要注意:
1)数据库表名需要大写;
Imported Failed: There is no column found in the target table xxx. Please ensure that your table name is correct.
2)数据库表没有主键时,需要指定--split-by参数或者使用--autoreset-to-one-mapper参数;
Error during import: No primary key could be found for table xxx.
3)使用查询语句(--e或--query)导入时,需要指定--split-by参数及--target-dir参数;
When importing query results in parallel, you must specify --split-by. Must specify destination with --target-dir.
4)使用查询语句导入时,需要在where子句中加入$CONDITIONS
java.io.IOException: Query [select * from xxx] must contain '$CONDITIONS' in WHERE clause.
20)oozie调度名字不能用中文,否则运行报错
21)hadoop hdfs 优化参考:https://www.cnblogs.com/leocook/p/hadoop_optimize01.html
https://blog.csdn.net/pansaky/article/details/83347357
在CDH的HDFS配置搜索
存储相关的磁盘配置(HDFS数据存储):dfs.data.dir
参数说明:HDFS的数据存储目录,建议配置在多块硬盘上,可提高整体IO性能
/dfs/dn 这是默认路径
再追加多个目录:/home/dfs/dn
22)从Hdfs 导入到postgresql数据库,报错找不到驱动,
解决:把驱动包放到:/opt/cloudera/parcels/CDH-5.14.2-1.cdh5.14.2.p0.3/lib/sqoop/lib
并修改777 权限,为了保险,也放到sqoop 安装目录的lib中
23)从hdfs导数据到postgrsql报错:
sqoop 命令详解:https://blog.csdn.net/myrainblues/article/details/43673129
ERROR tool.ExportTool: Error during export:
Export job failed!
解决:
查看日志,得到更加详细的信息,日志目录:/user/history/done/2018/11/21/000000
1)sqoop export:java.lang.RuntimeException: Can't parse input data 一般为没有处理分隔符,和null字段:
解决:--input-null-string '\\N' --input-null-non-string '\\N' --input-fields-terminated-by ',' --lines-terminated-by '\n'
null字段,分隔符,和结束符
2)继续运行继续报错:column "total_money" is of type money but expression is of type double precision
所有以上问题都是Hdfs目录的数据问题,在durg_use 里面有个字段是\N sqoop 无法解析,只要数据没问题,在脚本都不需要加上面的东东。
直接:sqoop export --connect jdbc:postgresql://192.168.148.231:5432/edw --username gpadmin --password gpadmin --table department --input-fields-terminated-by '分隔符' --export-dir /user/hdfs/DEPARTMENT -m 1
继续解决hdfs目录里面有\N的问题:
加--input-null-string '\\N' --input-null-non-string '\\N' 这两句
24)oozie 任务调度从hdfs导数据到postgresql报错找不到驱动,Could not load db driver class: org.postgresql.Driver
解决:把驱动包放到 Hdfs 目录:/user/oozie/share/lib/lib_20181009095005/sqoop
hdfs dfs -put ./postgresql-42.2.5.jar /user/oozie/share/lib/lib_20181009095005/oozie
并且重启oozie
25)使用oozie调用shell方式把hdfs数据导入到postgresql的报错:找不到驱动,
解决: 把postgresql驱动包放到cp ./postgresql-42.2.5.jar /opt/cloudera/parcels/CDH-5.14.2-1.cdh5.14.2.p0.3/lib/oozie/lib
和
cp ./postgresql-42.2.5.jar /opt/cloudera/parcels/CDH-5.14.2-1.cdh5.14.2.p0.3/jars
以上还是不行,如果单单在一个节点上面安装有sqoop ,因为oozie调度会随机选用集群某一个节点运行,所以真正的解决办法,在这个集群每个节点上都安装有
sqoop 框架,并且做好配置,
继续运行继续报错:Permission denied: user=hue, access=EXECUTE, inode="/user/yarn":yarn:supergroup:drwx------
权限问题
更改/user/yarn的权限和用户所属
hadoop fs -chmod -R 777 /user/yarn
运行后自动恢复,无效,
根本解决:让hue拥有yarn的权限,修改用户Hue权限,在CDH 的hue页面里面有用户权限修改,(次方法有待研究)
还是不行,暴力方法:直接让整个集群的hdfs 不检查权限,hdfs->配置->hdfs 权限检查->取消,然后重启
解决上面两个问题继续运行,继续报错: File does not exist: hdfs://cm01.spark.com:8020/user/hue/.staging/job_1542873217341_0006/job.splitmetainfo
解决:参考:https://community.hortonworks.com/questions/17489/job-init-fail-job-splitmetainfo-file-does-not-exis.html
在hue上创建yarn用户,用yarn用户提交oozie任务就可以了。
26)使用oozie调度sqoop 方式从hdfs导数据到postgresql报错:(直接使用命令执行是没有问题的):
Can't parse input data: '\N,2,215,42,鏉庨珮椋?0.0,0.0,0.0,0.0,0.0,0.0'
解决:sqoop 命令行 '\\N'使用单引号,oozie里面必须使用"\\N" 双引号,坑爹啊,这个坑。
参考:https://blog.csdn.net/high2011/article/details/52143002
27)oozie的sql 写法,和直接在Hive是不一样的,在输入路径(文件形式),是不能写到文件名,只能写到文件的上一个父路径,否则报错
现在正在解决oozie的XML自定义调度的sql写法报错问题。
解决:使用Hive2
参考;https://www.cnblogs.com/en-heng/p/5531583.html
sql 这样的:create table oozie_test01 as select id,y_r from gx_b_msg_state;
如果在Hive就会报错找不到表,在HIve2就没事。
在hive2的job.prepertise中有:jdbcURL=jdbc:hive2://cm01.spark.com:10000/default 配置
28)使用oozie的java api实现事件触发调度,在IDEA 本地提交是OK 的,,打包扔到集群上使用Hue 调度,报错:
NoClassDefFoundError: org/apache/oozie/client/XOozieClient
解决:尝试在IDEA 打包的时候,一起吧oozie-client包一起打,集群运行还是报错。
继续寻找解决方法,吧oozie-client-4.1.0 扔到hdfs的Oozie libpath:/user/oozie/share/lib/lib_20181009095005/oozie ,还是报错
继续寻找解决方法:在Hue的oozie 工作流配置页面,在files选项中选择需要依赖的包就是oozie-client-4.1.0 所在的hdfs路径位置,(放在哪里都行,只要能访问到就行)
然后解决上面 ,运行又报:org.apache.oozie.action.hadoop.JavaMainException: java.lang.NullPointerException错误
查看Log 提示是在Hive环节出错,
yarn (auth:SIMPLE)
Workflow job submitted
Workflow job running ...
Workflow job running ...
Workflow job running ...
Heart beat
Workflow job running ...
Workflow job running ...
oozie调度完成
Running: select count(*) from oozie_test01 这个是在操作hive 阶段,
解决:在使用oozie调度,还没有找到解决方法,可以在idea打所有的依赖包,然后上传服务器,使用java -jar xxxx.jar 方式运行 ,就可以 了
29)在数据映射到HIve表的时候,时间字段date,为空,解决办法,把hive的date字段改为string就可以了。
30)使用hbase自带的import工具从Hdfs导数据到hbase 报错: not a SequenceFile
然后使用oozie调度spark 的jar 包,报错:
NoClassDefFoundError: org/apache/hadoop/hbase/client/Table
解决;
31)使用shell方式在hue上配置oozie 调度spark操作hdfs数据到hbase 报错;
Warning: Local jar /user/hue/oozie/workspaces/hue-oozie-1539071812.33/spark_to_hbase_test01.jar does not exist, skipping.
java.lang.ClassNotFoundException: sparks.SparkMapJob
解决:修改脚本,--deploy-mode cluster 改成集群模式
继续运行继续报另外错:FileNotFoundException: File file:/user/hue/oozie/workspaces/hue-oozie-1539071812.33/spark_to_hbase_test01.jar does not exist
解决:运行的jar 必须不能在hdfs上(有待研究,应该是可以的),因为oozie 是随机选择一个节点来运行,所以要把jar都要放到所有节点统一目录里(坑爹啊)。
还有一点,运行模式必须是cluster模式,具体脚本:spark-submit --class sparks.SparkMapJob --master yarn --deploy-mode cluster --driver-memory 4g --executor-memory 2g --executor-cores 1 /opt/test_jars/spark_to_hbase_test01.jar
研究jar在hdfs上的问题
32)使用oozie 自定义xml 运行spark 从hdfs 导入hbase 报错: java.io.IOException: Cannot run program "spark_to_hbase_test01.jar" (in directory "/yarn/nm/usercache/yarn/appcache/application_1543299582502_0122/container_1543299582502_0122_01_000002"): error=2, N
解决:同31解决,应该可以,没验证,但是感觉没问题。
33)早上打开CDH 整个集群 全部报警告,解决:
1)查看:整个系统磁盘使用情况:df -h ,发现
/dev/mapper/vg_fs1-lv_root
50G 33G 15G 70% /
这个磁盘容量快满,然后进入目录执行:du -sh *
查看文件占磁盘大小:看见Log 文件,占了大部分空间,删除日志文件。
linux 查看目录的剩余空间大小
两个命令df 、du结合比较直观
df -h 查看整台服务器的硬盘使用情况
cd / 进入根目录
du -sh * 查看每个文件夹的大小
du -lh --max-depth=1 : 查看当前目录下一级子文件和子目录占用的磁盘容量。
这样的组合可以快速定位大文件和分区满了}
2)更改日志文件路径,参考网站:https://blog.csdn.net/xueyao0201/article/details/79530130
34)安装新的框架(比如:phoenix)必须更改xx.sha1 为xx.sha ,否则集群报错找不到哈希值
35)安装好phoenix 链接到Hbase,没有发现已经创建的表。
解决:猜想,应该是phoenix 创建的表,和用HBase 客户端创建的表结构不一样,所以只有使用phoenix 创建的表,才能使用phoenix 操作。
真相:
36)spark通过phoenix 操作Hbase IDEA 开发。。
IDEA NoSuchMethodError: org.apache.hadoop.hbase.client.HBaseAdmin
解决;把依赖:
<!--<dependency>-->
<!--<groupId>org.apache.phoenix</groupId>-->
<!--<artifactId>phoenix-core</artifactId>-->
<!--<version>4.14.0-cdh5.14.2</version>-->
<!--</dependency>-->
<!--<dependency>-->
<!--<groupId>org.apache.phoenix</groupId>-->
<!--<artifactId>phoenix-spark</artifactId>-->
<!--<version>4.14.0-cdh5.14.2</version>-->
<!--</dependency>-->
改成:
<dependency>
<groupId>org.apache.phoenix</groupId>
<artifactId>phoenix-core</artifactId>
<version>4.14.0-HBase-1.2</version>
</dependency>
<dependency>
<groupId>org.apache.phoenix</groupId>
<artifactId>phoenix-spark</artifactId>
<version>4.14.0-HBase-1.2</version>
</dependency>
就行运行,又报其他的错误:
Outdated jars. Newer Phoenix clients can't communicate with older Phoenix servers(陈旧的坛子更新的凤凰客户端无法与老式凤凰服务器通信) ,版本兼容问题
解决:客户端比服务器端高。服务器端4.7的,
改成: (和服务器端一样的版本)
<dependency>
<groupId>org.apache.phoenix</groupId>
<artifactId>phoenix-core</artifactId>
<version>4.7.0-HBase-1.1</version>
</dependency>
<dependency>
<groupId>org.apache.phoenix</groupId>
<artifactId>phoenix-spark</artifactId>
<version>4.7.0-HBase-1.1</version>
</dependency>
修改上面后,Java版本测试通过,scala 运行继续报错:
NoSuchMethodError: org.apache.spark.sql.SQLContext.createDataFrame
解决:又是版本兼容问题,客户端的IDEA环境的scala是2.11的,而phoenix-spark版本过低,
修改pom文件:
<dependency>
<groupId>org.apache.phoenix</groupId>
<artifactId>phoenix-spark</artifactId>
<version>4.14.0-HBase-1.2</version>
</dependency>
最终spark-phoenix-hbase的pom文件是:
<dependency>
<groupId>org.apache.phoenix</groupId>
<artifactId>phoenix-core</artifactId>
<version>4.7.0-HBase-1.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.phoenix/phoenix-spark -->
<dependency>
<groupId>org.apache.phoenix</groupId>
<artifactId>phoenix-spark</artifactId>
<version>4.14.0-HBase-1.2</version>
</dependency>
36)重新安装新版的phoenix 4.14还是找不到hbase中以前创建的表。
解决:
37)服务器关闭重启,oracle启动:
一、Linux下启动Oracle
Linux下启动Oracle分为两步:
1)启动监听;
2)启动数据库实例;
1.登录服务器,切换到oracle用户,或者以oracle用户登录
[admin@dataserver ~]$ su - oracle
密码:
[oracle@dataserver ~]$
2.打开监听服务
[oracle@localhost ~]$ lsnrctl start
可以通过lsnrctl status命令查看Oracle监听器运行状况
[oracle@localhost ~]$ lsnrctl status
3.以SYS用户身份登录Oracle
复制代码
[oracle@localhost ~]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on Fri Dec 1 23:29:19 2017
Copyright (c) 1982, 2009, Oracle. All rights reserved.
SQL> conn /as sysdba
Connected to an idle instance.
复制代码
切换用户:
CONN 用户名/密码 [AS SYSDBA],如果是sys用户一定要写上AS SYSDBA
4.通过startup命令启动实例
复制代码
SQL> startup
ORACLE instance started.
Total System
... ...
Database mounted.
Database opened.
SQL>
一般客户端连不上,如果是服务器问题一般都 :oracle实例和监听没起来。
38)postgresql 启动和关闭: 修改配置文件:搜索find / -name xx 搜索出很多,选择/data1/gpdata/master/gpseg-1/pg_hba.conf 这个修改,然后重启
如果要停止的话 gpstop -M fast 进入命令,然后输入 y
启动 gpstart 然后输入 y
39)华为的FusionInsight_HD集群,服务器迁移后,集群IP和公司环境IP 不一致 问题解决:
集群无法进入web 页面。查看软件安装文档,查看第7.2.5.1小节内容:跟着一步一步排查就OK 了
7.2.5.1 安装双机 Manager 后无法登录 Manager 页面
l Tomcat没有正常启动
l 浮动IP地址配置错误
l 子网掩码和网关配置错误
40)批量执行Hive 语句(脚本);
hive -f xxx.sh (把批量执行语句写成文件)
41)创建posgresql的表的时候,最好设置ID 自动增长,否则saprk在写入数据的时候,ID 写入很麻烦,
因为spark集群都是并发写入,如果是手动增长id会导致ID 重复问题。
42)运行Hive 多表查询报错:SemanticException Column xx Found in more than One Tables/Subqueries
Hive中有两张表中拥有同一个字段名称,在这两个表做关联的时候会报这个错误
解决:建表的时候,字段要不一样,如果一样,可以在查询的时候使用别名:
将其中一个表的重复字段加上别名,然后进行关联查询
select city.city, hotel.hotel, hotel.hotelname from city city,
(select city as hcity ,hotel , hotelname from hotel) hotel
where city.city = hotel.hcity
43)在sql 语句里面有null ,运行spark报错:Can't get JDBC type for null
其实意思就是说,你的空值插不进去,要重新将null做成数据插进去,比方说int需要插0,如果0已经有意义,那就-1呗。莫慌
select A.a1,A.a2,A.a3,B.sa,A.a11,A.a12,2,6,A.a14,C.ma,D.na,A.a19,E.da,F.msa,A.a13,null,null,null,null,null, .....
在查询字段有Null,报错,改掉就OK 了(但是在hive 执行是很OK的)
44)spark 操作hive 表,写入postgresql的时候,null字段(void)字段,无法转换,
在创建Hive表的时候,不要产生void字段
45)一般导入到hdfs 的分隔符: "," ,直接导Hive 表分隔符:'\t' (hive默认的字段分隔符为'\001')
46)注意使用sqoop 从hive 到数据到pg库的时候,使用--export-dir /user/hive/warehouse/test.db/tmp_f_personal_info 会报字段解析错误,用:--hcatalog-database test --hcatalog-table tmp_f_personal_info 直接指定Hive表
脚本:sqoop export --connect jdbc:postgresql://192.168.148.231:5432/bigdata_db --username gpadmin --password gpadmin --hcatalog-database test --hcatalog-table tmp_f_personal_info --table f_personal_info --input-""-string '\\N' --input-""-non-string '\\N' --fields-terminated-by '\t'
46)在oracle 可视化工具执行完sql 语句还要commit 提交才行,否则数据没有进入,(坑爹的,搞一个上午,以为是sqooop 的脚本问题,原来是Oracle的问题)
47)技术备忘:可以把sqoop脚本写在文件里面,然后可以使用命令调用:sqoop --options-file /users/home/store_import.txt
参考网站:https://blog.csdn.net/afanyusong/article/details/79065277
48)sqoop 增量参数说明:参考:http://www.cnblogs.com/xiaodf/p/6030102.html#412 (https://blog.csdn.net/hr787753/article/details/79164070)
由于只添加而不修改列的值,所以使用append 增量导入中还需要额外的两个参数:--check-column指定一个列,用于检查新增加的数据,--last-value包含上次成功导入到Hadoop的值。
模式:
Append 支持动态增加 不支持修改
Lastmodified 可以修改数据 也可以增加
49)xshell5 突然打不开,原因是自动更新没有取消:
解决:资源可以用,但是安装完成后启动会报错:“要继续使用此程序,您必须应用最新的更新或使用新版本” 解决办法先修改你电脑时间为前一年(2017 1月),然后就可以打开xshell了,打开后"工具"->选项->更新->取消前面的更新即可
50)提交spark 脚本的动态传参问题:
使用${xxxx} 这种方式好像有长度限制,比如:传2018-12-24 在main里面接收到实际是12-24 ,
使用 "xxxx" 没有这个问题
51)
1在使用sqoop 做增量抽取(从oracle到hdfs/hive),如果增量没有数据,也会启动一个MR,也会在hdfs 增加一个文件,只是文件的内容是空的,因此在抽取增量数据的
最好,先判断是否有增量数据,怎么实现,有待研究。
2在抽取增量的时候,会产生多余一个或多个文件,这些文件在hdfs上,会占用block数量,影响集群磁盘空间,和性能,因此需要合并这些小文件。有待研究
增量产生的多余文件合并参考:https://blog.csdn.net/dabokele/article/details/51868594#t42
52)hive 中执行update 和delete 报错,解决:添加hive 对update 和delete 的支持,
在hive-site.xml修改:
<property>
<name>hive.support.concurrency</name>
<value>true</value>
</property>
<property>
<name>hive.exec.dynamic.partition.mode</name>
<value>nonstrict</value>
</property>
<property>
<name>hive.txn.manager</name>
<value>org.apache.hadoop.hive.ql.lockmgr.DbTxnManager</value>
</property>
<property>
<name>hive.compactor.initiator.on</name>
<value>true</value>
</property>
<property>
<name>hive.compactor.worker.threads</name>
<value>1</value>
</property>
继续运行继续报错(另一个错误):Attempt to do update or delete on table xx that does not use an AcidOutputFormat or is not bucketed
继续增加配置:
<property>
<name>hive.enforce.bucketing</name>
<value>true</value>
</property>
继续运行,继续报错;ParseException line 1:0 cannot recognize input near 't_id' '<EOF>' '<EOF>'
在sql 结束加; ,解决,继续运行:继续报错:Attempt to do update or delete on table xx that does not use an AcidOutputFormat or is not bucketed
经研究,Hive 对update 和 insert 和 delete 支持不好,不建议在hive 直接进行这些操作。
53)使用sqoop 从hive 或者Hdfs 增量导入到postgresql 报错:(好像只能使用其中一种,如果两种都同时使用报错)
--update-key primary_key 这只更新了两个DB中存在的主键(hive和postgreSQL。没有插入)
--update-mode allowinsert - 这只是插入
--update-key primary_key --update-mode allowinsert - 这会给出错误
比如:
sqoop export --connect jdbc:postgresql://192.168.148.231:5432/bigdata_db \
--username gpadmin --password gpadmin \
--table bigdata_test \
--export-dir /user/hdfs/BIGDATA_TEST/part-m-00001 \
--batch \
-m 1 \
--update-key t_id \ //更新,
--update-mode allowinsert ; //增量(插入),和上面只能使用一个,不能同时使用
54)hadoop 中文文档:http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_design.html
55)HDFS小文件合并测试,在IDEA 运行没事,提交到集群上用Java -jar XXX.jar 报错java.lang.NoClassDefFoundError: org/apache/hadoop/security/UserGroupInformation
at oozies.OozieTests.main(OozieTests.java:21)
原因:缓存,依赖
解决:把所有依赖包一起打包,上传
提交到oozie 也报错:ArrayIndexOutOfBoundsException ,不管如何修改,都是报同样错误,好像修改不起作用
原因:应该是缓存,
解决:删除oozie 的工作流,在建一个,就OK 了
56) StreamingPro 项目
57:)本地运行spark 操作hive 报错:The root scratch dir: /tmp/hive on HDFS should be writable. Current permissions are: rwx------
解决:修改问题解决:
1、下载一个hadoop版本,我这里下载的是hadoop-2.7.0;
2、在cmd命令行中运行:
E:\Program Files\hadoop-2.7.0\bin\winutils.exe chmod 777 D:\tmp\hive
58)phoenix数据类型:http://phoenix.apache.org/language/datatypes.html
59)phoenix 建表语句结束不能有分号; 否则报错、
60)park API 提交到yarn :https://blog.csdn.net/weixin_36647532/article/details/80766350
61)打包提交到集群运行报错:ClassNotFoundException: Failed to find data source: org.apache.phoenix.spark. (spark 引用第三方jar参考:https://www.cnblogs.com/dinghong-jo/p/7873646.html)
找不到phoenix 包:
解决:找了很多方式,最后是在/etc/spark2/conf/classpath.txt文件添加phoenix jar包路径解决,前几天已经找到答案,但是没有看清楚spark和spark2的路径,把修改错到spark的文件去了,
还有就是在启动脚本指定jars 也无法解决,在linux 上创建本地maven 库也,然后启动加班指定maven 库也是无法解决,
62)运行报错: java.lang.ClassNotFoundException: Class org.apache.phoenix.mapreduce.PhoenixOutputFormat not found
解决:找了很多方式,最后是在/etc/spark2/conf/classpath.txt文件添加phoenix jar包路径解决,前几天已经找到答案,但是没有看清楚spark和spark2的路径,把修改错到spark的文件去了,
还有就是在启动脚本指定jars 也无法解决,在linux 上创建本地maven 库也,然后启动加班指定maven 库也是无法解决,
63)phoenix 的ID 自增长解决参考:http://www.cnblogs.com/hbase-community/p/8853573.html
phoenix 预分区SALT_BUCKETS参考: https://blog.csdn.net/sinat_36121406/article/details/82985880
phoenix 文档参考:https://www.jianshu.com/p/a7ddb36b2c17
64)运行IDEA 突然报错:
Error:scalac: Error: org.jetbrains.jps.incremental.scala.remote.ServerException
java.lang.StackOverflowError
65)phoenix 报错:MutationState size is bigger than maximum allowed number of bytes
参考:https://phoenix.apache.org/tuning.html 参数调试
解决:在代码中设置参数:
Properties connectionProperties = new Properties();
//setting phoenix properties
connectionProperties.setProperty(QueryServices.MAX_MUTATION_SIZE_ATTRIB,"10000000"); //改变默认的500000
connectionProperties.setProperty(QueryServices.IMMUTABLE_ROWS_ATTRIB,"10000000"); // 默认是500000
connectionProperties.setProperty(QueryServices.MAX_MUTATION_SIZE_BYTES_ATTRIB,"1048576000"); // 默认是500000
设置链接:
cc = DriverManager.getConnection(AllConstants.PHOENIX_JDBC_URL,connectionProperties);
65)Hive 自增长ID :row_number() over() as id
insert into table User_Attribute select row_number() over() as id,customid from tbl_custom;
66)用Hive映射到Hbase (HIve 是内部表方式)表的时候,不能用load data 方式加载数据到Hive ,参考:
https://blog.csdn.net/u013870094/article/details/79434171
67)打包运行集群上报错:NoClassDefFoundError: org/apache/spark/sql/DataFrame
在本地运行没事。
解决: 其原因是 phoenix 里面用到DataFrame 解决参考:https://stackoverflow.com/questions/46479706/java-lang-noclassdeffounderror-org-apache-spark-sql-dataframe
在启动脚本添加依赖--conf :
--conf "spark.driver.extraClassPath=/opt/test_jars/bjz/maven_jars/phoenix-spark-4.14.0-HBase-1.2.jar:/opt/cloudera/parcels/APACHE_PHOENIX/lib/phoenix/phoenix-4.14.0-cdh5.14.2-client.jar:/opt/cloudera/parcels/APACHE_PHOENIX/lib/phoenix/lib/phoenix-spark-4.14.0-cdh5.14.2.jar:/opt/cloudera/parcels/APACHE_PHOENIX/lib/phoenix/phoenix-4.14.0-cdh5.14.2-server.jar:/opt/cloudera/parcels/APACHE_PHOENIX/lib/phoenix/phoenix-spark-4.14.0-cdh5.14.2.jar:/etc/hbase/conf" --conf "spark.executor.extraClassPath=/opt/test_jars/bjz/maven_jars/phoenix-spark-4.14.0-HBase-1.2.jar:/opt/cloudera/parcels/APACHE_PHOENIX/lib/phoenix/phoenix-4.14.0-cdh5.14.2-client.jar:/opt/cloudera/parcels/APACHE_PHOENIX/lib/phoenix/lib/phoenix-spark-4.14.0-cdh5.14.2.jar:/opt/cloudera/parcels/APACHE_PHOENIX/lib/phoenix/phoenix-4.14.0-cdh5.14.2-server.jar:/opt/cloudera/parcels/APACHE_PHOENIX/lib/phoenix/phoenix-spark-4.14.0-cdh5.14.2.jar:/etc/hbase/conf" \
参考启动脚本:
spark2-submit --class sparks.SparkPhoenixsDemo \
--master yarn \
--deploy-mode client \
--driver-memory 4g \
--executor-memory 2g \
--executor-cores 1 \
--conf "spark.driver.extraClassPath=/opt/test_jars/bjz/maven_jars/phoenix-spark-4.14.0-HBase-1.2.jar:/opt/cloudera/parcels/APACHE_PHOENIX/lib/phoenix/phoenix-4.14.0-cdh5.14.2-client.jar:/opt/cloudera/parcels/APACHE_PHOENIX/lib/phoenix/lib/phoenix-spark-4.14.0-cdh5.14.2.jar:/opt/cloudera/parcels/APACHE_PHOENIX/lib/phoenix/phoenix-4.14.0-cdh5.14.2-server.jar:/opt/cloudera/parcels/APACHE_PHOENIX/lib/phoenix/phoenix-spark-4.14.0-cdh5.14.2.jar:/etc/hbase/conf" --conf "spark.executor.extraClassPath=/opt/test_jars/bjz/maven_jars/phoenix-spark-4.14.0-HBase-1.2.jar:/opt/cloudera/parcels/APACHE_PHOENIX/lib/phoenix/phoenix-4.14.0-cdh5.14.2-client.jar:/opt/cloudera/parcels/APACHE_PHOENIX/lib/phoenix/lib/phoenix-spark-4.14.0-cdh5.14.2.jar:/opt/cloudera/parcels/APACHE_PHOENIX/lib/phoenix/phoenix-4.14.0-cdh5.14.2-server.jar:/opt/cloudera/parcels/APACHE_PHOENIX/lib/phoenix/phoenix-spark-4.14.0-cdh5.14.2.jar:/etc/hbase/conf" \
/opt/test_jars/bjz/bigdata_test01.jar;
68) 使用nexus 部署全程仓库仓库:https://www.cnblogs.com/hujiapeng/p/7127213.html
69) spark 配置参数详解:https://blog.csdn.net/guohecang/article/details/52088117
70)启动hbase 报错:仔细查看log 然后按照提示,修改一些阈值, 就OK
71)用spark操作phoenix 完成高速插入hbase
所有Hive 表,字段都是string 类型,临时表要做Id 自动增长,phoenix 表所有字段都是varchar
这些设置有效避免null值问题。
72)使用sqoop java API 无法导入pom文件的sqoop依赖。到服务器找到sqoop.jar包 ,然后下载到本地,然后导入idea环境,
继续运行,继续报错:NoClassDefFoundError: org/apache/avro/LogicalTyp
继续到服务器找到:avro-1.7.6-cdh5.14.2.jar 手动导入到idea 环境,
继续运行,继续报错:Could not load db driver class: oracle.jdbc.driver.OracleDriver
继续手动下载oracle驱动包,添加到IDEA
继续运行继续报错:java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束
解决; "--query","SELECT * FROM ZLHIS.HIS消息推送参数 WHERE $CONDITIONS", 使用自定义写sql方式
// "--table","ZLHIS.HIS消息推送参数", 屏蔽掉
73)spring boot 打包到服务器跑,报错:
java.lang.IllegalArgumentException: LoggerFactory is not a Logback LoggerContext but Logback is on the classpath.
Either remove Logback or the competing implementation (class org.slf4j.impl.SimpleLoggerFactory loaded from file:/opt/test_jars/bjz/spring_boot/slf4j-simple-1.7.25.jar).
If you are using WebLogic you will need to add 'org.slf4j' to prefer-application-packages in WEB-INF/weblogic.xml: org.slf4j.impl.SimpleLoggerFactory
74)打包spring boot 到服务器,报错:
UnsatisfiedDependencyException: Error creating bean with name 'controllersTests': Unsatisfied dependency expressed through field 'sparkPhoenixsDemo1';
nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sparkPhoenixDemo1': Lookup met
解决:暂时解决,把自动依赖弃掉,使用类的new 方式
75)打包运行报错:
IllegalArgumentException: LoggerFactory is not a Logback LoggerContext but Logback is on the classpath.
Either remove Logback or the competing implementation (class org.slf4j.impl.SimpleLoggerFactory loaded from
file:/opt/test_jars/bjz/spring_boot2/slf4j-simple-1.7.25.jar). If you are using WebLogic you will need to add 'org.slf4j' to prefer-application-packages in WEB-INF/weblogic.xml: org.slf4j.impl.SimpleLoggerFactory
解决:删除classpath里面的:slf4j-simple-1.7.25.jar
76)nettRPC 技术参考:https://www.cnblogs.com/jietang/p/5615681.html
http://www.importnew.com/24689.html
https://www.jianshu.com/p/a9b55279aead
https://github.com/forezp/BootNettyRpc
77)java API 启动spark 脚本失败,
原因:可能脚本写错
解决:参考:https://blog.csdn.net/vcfriend/article/details/81226632
78)JAVA API 远程启动spark 脚本报:UnsupportedClassVersionError: org/apache/spark/launcher/Main : Unsupported major.minor version 52.0
原因:把在高版本编译的程序放到低版本中运行
解决: 重新建新工程(很屌丝吧,哈)
79)提交spark程序到集群报错:ain" org.apache.spark.SparkException: Yarn application has already ended! It might have been killed or unable to launch application master.
原因:应该是java 调用shell方式,线程被一直阻塞,资源无法释放
解决: 等半天左右 yarn 就可以自动释放资源(屌丝解决方法就是等0)
80)java 调用shell 方式启动spark 脚本,失败
81)在spark_sql 中使用窗口函数报错:AnalysisException: Window function row_number() requires window to be ordered, please add ORDER BY clause. For example SELECT row_number()(value_expr) OVER (PARTITION BY window_partition ORDER BY window_ordering) from table
原因:直接操作表的时候用自增这个方式会报错 因为spark over里必须有字段
解决:在/etc/spark2/conf/classpath 中添加hive 的驱动包路径
82)java 远程启动spark程序报错:
19/02/22 11:04:15 INFO hive.metastore: Waiting 1 seconds before next connection attempt.
19/02/22 11:04:16 WARN metadata.Hive: Failed to register all functions.
java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
原因;
解决:
83)create table xxx as select row_number() over() as id , * from xxx
这种方式,不能用外部表。
84)在建HIVE表的时候, " LOCATION '/user/hdfs/" + tableName +"/'"; 这个路不能和sqoop 导入的路径 "--target-dir", "/user/hdfs/b_t_sexs/" , 相同,否则没有数据
86)在IDEA 选择goal打包的时候,选择package ,
87)HIVE 获取当前时间:FROM_UNIXTIME(UNIX_TIMESTAMP()
88)在本地IDEA 运行报错:找不到phoenix ,
解决:把服务上的jar ,引入到IDEA 工程
89)项目运行报错:NoSuchMethodError: io.netty.buffer.PooledByteBufAllocator.metric()Lio/netty/buffer/PooledByteBufAllocatorMetric
推荐系统算法工程师-从入门到就业2018价值1900元
https://pan.baidu.com/s/1CiTfS0Wu015dYw0GVRNdOw 提取密码:jsfl 压缩包解压密码: BAgOtqnqTEf7ukd0
90)问题过程:看见集群log 黄色警报,然后就把/var/log 下面所有删除:rm -fr /var/log/* ,导致后面集群服务重启失败,
报:找不到相应的Log 文件,,看日志,一个一个重新手写创建相应文件,解决。
解决过程:在集群中,选择诊断选项,然后输入要查看的节点,然后在源里面选择相应的服务,可以查看问题,然后安装提示解决错误。
重启成功。
91)在用sqoop 导入数据的时候,--query 'select * from ZLHIS.性别 where $CONDITIONS' 里面的sql语句必须用‘’否则报错。
92)停止掉yarn 上的任务:yarn application -kill application_1551684305395_0055(这里是任务ID)
93)在sqoop 里面加-m 1 数字大于1的时候,必须指定:--split-by 否则执行不了
94)IDEA 创建spark 程序 运行报错:NoSuchMethodError: org.apache.hadoop.mapred.TaskID.<init>(Lorg/apache/hadoop/mapreduce/JobID;Lorg/apache/hadoop/mapreduce/TaskType;I)V
解决: 我发现TaskID和TaskType都在 hadoop-core jar,但不在同一个包中。为什么mapred.TaskID可以引用mapreduce.TaskType?
应该是hadoop 和spark Jar冲突:
更改pom文件:
< groupId> org.apache.hadoop< / groupId>
< artifactId> hadoop-core< / artifactId>
< version> 2.6.0-mr1-cdh5.14.2< / version>
95)打开IDEA,发现找不到Subversion菜单了,无法更新、提交代码了。
网上找了一下解决了,记录一下解决办法:
File -> Settings -> Plugins,搜索Subversion,在筛选出结果的方框上打勾,即可启动插件,然后重启IDEA即可恢复。
96)在sqoop 中使用-m 1 可以,-M 5 或者10 比1大的数,报错,原因在研究中
97)启动oracle 可视化工具报错:Unable to launch the Java Virtual Machine Located at path: ..\..\jdk\jre\bin\client\jvm.dll
解决办法:在本地安装的jdk目录中搜索 msvcr100.dll和msvcr71.dll 放到sqldeveloper\sqldeveloper\bin目录下
再次启动即可。
98) 在本地IDEA跑spark-sql 问题:hive-site.xml 必须是:/etc/hive/conf 里面的配置文件,不是spark-home 里面的,,,注意。
把 hive-site.xml放到项目的 resoucese 文件里就行了
99)用mvn 编译报错:编码问题:
问题解决方案是在pom.xml文件中添加如下代码
Xml代码 收藏代码
<properties>
<!-- 文件拷贝时的编码 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- 编译时的编码 -->
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
</properties>
100)继续执行mvn 编译项目,报错;101: 错误: 不允许使用自关闭元素[ERROR] * <p/>
解决:进入pom文件删除javadoc的插件
101)Hbase的官方文档:https://hbase.apache.org/apidocs/
102)机器学习博客地址:https://www.cnblogs.com/charlotte77/p/10455900.html
103)解决maven编译错误:程序包com.sun.xml.internal.ws.spi不存在
解决方法如下:
添加maven-compiler-plugin插件,并且配置compilerArguments
如:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<compilerArguments>
<bootclasspath>${JAVA_HOME}/jre/lib/rt.jar</bootclasspath>
</compilerArguments>
</configuration>
</plugin>
104)
运行Hadoop jar包,报错:java.io.IOException: No FileSystem for scheme: hdfs
解决:参考网站:https://www.cnblogs.com/justinzhang/p/4983673.html
解决方案是,在设置hadoop的配置的时候,显示设置这个类:"org.apache.hadoop.hdfs.DistributedFileSystem:
configuration.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
105)
早上跑sqoop 把kylin用到的数据表,导入到Hive ,报错:client.RMProxy: Connecting to ResourceManager at cm01.spark.com/192.168.148.93:8032
每隔一天集群就无法运行,感觉CDH 很不稳定。
原因应该是yarn 的resourcemanager 没启动
解决:用jps 命令查看是否没有启动resourcemanager
106)在删除hbase表的时候:NameError: uninitialized constant 表名
解决:在表名上使用"" 双引号。
107)在IDEA 里面编译mlsql 1.3的源码,启动本地报错:java.lang.NoClassDefFoundError: scala/Function0
解决:
108)安装tensorflow 报错:cmd安装 pip install tensorflow
1.遇到了
ERROR: Cannot uninstall 'wrapt'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
办法1:输入 pip install -U --ignore-installed wrapt enum34 simplejson netaddr
参考:https://www.cnblogs.com/xiaowei2092/p/11025155.html
2.遇到了
ERROR: tensorboard 1.14.0 has requirement setuptools>=41.0.0, but you'll have setuptools 39.1.0 which is incompatible.
109)在note boot 使用tensorflow 2.0 报错:---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
ModuleNotFoundError: No module named 'numpy.core._multiarray_umath'
解决方法:
法一
pip install --user --upgrade numpy #将numpy更新到最新版本
法二
pip install --upgrade --force-reinstall numpy==1.14.5 #重新安装合适的numpy版本
或
pip install numpy==1.16
109)IDEA 链接不是redis :
修改redis.conf文件,将 bind 127.0.0.1这一行注释掉,或是将127.0.0.1修改为0.0.0.0(redis默认只支持本地连接,修改为0.0.0.0时,这样就可以支持外机连接了)
110)https://flutterchina.club/
极速构建漂亮的原生应用
Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。
论文地址:https://arxiv.org/
110)zookeeper部署:
参考https://blog.csdn.net/fujianfafu/article/details/80307240
修改zoo.cof文件的里的数据路径:dataDir=E:\\bjz_learning\\Zookeeper\\resousezs\\src\\dir_zookeeper
注意路径中用\\否则找不到路径
111)Flume获取关系型数据库到kafka流分析报错:
Flume从数据库中获取数据,到kafka流处理,代码报错:
StreamsException: Input record ConsumerRecord(topic = test2, partition = 0, offset = 0, CreateTime = -1,
serialized key size = -1, serialized value size = 49, headers = RecordHeaders(headers = [], isReadOnly = false),
key = null, value = "1","bb","3333","cs00001","2019-10-21 17:24:40.0") has invalid (negative) timestamp.
Possibly because a pre-0.10 producer client was used to write this record to Kafka without embedding a timestamp,
or because the input topic was created before upgrading the Kafka cluster to 0.10+. Use a different TimestampExtractor to process this data.
解决:
今天用kafkastream为消费者,telegraf为生产者,kafkastream消费topic数据时候出现以上异常。
以为telegraf的时间戳格式不对(telegraf的默认时间戳是10位时间戳),改了时间戳格式后还是异常。
json和influx两种格式都报此错误,但是console-producer.sh 生成的数据就不报异常,只要符合json和influx格式就会报错
原因为,telegraf发送过来的数据没有时间戳,而我的kafka为0.11.0.0版本,所以报以上异常
解决方案为以下:
public class MyEventTimeExtractor implements TimestampExtractor{
@Override
public long extract(ConsumerRecord<Object, Object> record, long previousTimestamp) {
return System.currentTimeMillis();
}
}
并在
Properties properties = new Properties();
properties.put(StreamsConfig.TIMESTAMP_EXTRACTOR_CLASS_CONFIG,MyEventTimeExtractor.class.getName());
112)安装antlr4
学习参考网站:https://www.liangshuang.name/2017/08/20/antlr/
参考:https://blog.csdn.net/fireghost57/article/details/92080428
1)下载:Jar包 http://www.antlr.org/download/antlr-4.7.2-complete.jar
2)配置环境变量:path中配置:到存放jar包的文件夹
3)增加系统变量:变量名:CLASSPATH ,值:.;D:\Java\Javalib\antlr-4.7.2-complete.jar;%CLASSPATH% 注意一定要带".;",这是为了保证类库可以在任何目录下使用
4)创建批处理文件:antlr4.bat文件和grun.bat文件,内容分别:java org.antlr.v4.Tool %* , java org.antlr.v4.gui.TestRig %*
5)测试:在命令行分别输入:antlr4 和 grun
113)创建conda虚拟环境报错CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/linux-64/repodata.json>。
解决参考:https://blog.csdn.net/ada0915/article/details/78529877
#2、删除部分内容
## 主要是删除此行: - defaults
#修改后配置文件的内容如下:
vim ~/.condarc
channels:
-https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
show_channel_urls: true
注意:镜像源不是加的越多越好,一个一个试试最好
114)
错误:File contains parsing errors: file:///etc/yum.repos.d/docker-ce.repo
[line 84]: docker-ce-nightly-source]
因为之前安装docker,但没有安装成功,有些残余文件留在系统里了,影响了yum命令,导致失败。
解决办法:
删除这个文件 /etc/yum.repos.d/docker-ce.repo 即可
115)pycharm项目导入numpy 和其他各种模块报错:
解决:
1)把python版本地址指向anconda3安装目录的python地址,
2)在pycharm配置路径:Run > Edit Configurations > Environment Variables,添加PATH=${Anaconda的根路径}\Library\bin,然后就能正常运行了,
参考网站:https://www.jb51.net/article/170206.htm
116) 安装cx_oracle模块(python操作oracle数据库依赖)的时候,用anconda3的客户端安装,不要用dos安装,否则会安装到本地python环境,不是conda环境,然后怎么复制包,都没有用,必须用
anaconda3客户端安装才行。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。