大数据篇:这些年大数据组件的一些踩坑和优化总结
Posted 杨铖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据篇:这些年大数据组件的一些踩坑和优化总结相关的知识,希望对你有一定的参考价值。
这些年除了做算法,大数据也搞得水生火热,下面是这些年的一些踩到的坑和一些经验的总结.
写入hbase提示closing socket问题
Session 0x0 for server ip-10-0-10-55.ec2.internal/10.0.10.55:2181, unexpected error, closing socket connection and attempting reconnect
问题:spark stream 往 hbase 写数据时会出现的问题,提示 zookeeper socket 连接不了。
原因:CDH中zookeeper为防止集群遭受DDos攻击,默认将 Maximum Client Connections 设置成了60,当超过这个次数时,后面的连接将会一直失败
解决:将改参数 Maximum Client Connections 修改成 0,即不做任何限制。
注意:修改成0后如何防止攻击需要做额外的一些工作。
debug spark-1.6.0 内存泄漏错误
spark-1.6.0 内存泄漏问题是spark的一个遗留问题,建议迁到spark-2.1.0.
spark 任务无法序列化问题
1. 所有的class都必须继承自 java.io.Serializable
2. broadcast 操作若包含自定义类,则该操作最好定义在函数的外面,类的最外层,当成类的属性。
spark sortby失败问题
在spark里对dataframe或RDD进行sortby时,确保每条记录不占用太多内存,若每条记录包含长字符串或者长数组,
先分离出去再做sortby, 否则shuffle的时候或十分缓慢同时容易造成内存溢出。
kafka 跨网段无法消费问题
通常我们的内网IP都是192.168.1.X, 但是如果我们的Kafka服务和Kafka消费者是分布在不同网段,那怎么办?
比如:
Kafka集群在192.168.2.X
Kafka消费者在192.168.1.X
解决方案是修改kafka消费者的host, 让192.168.2.X 和 192.168.1.X 互通。
spark 数据库连接池序列化问题
如果在RDD外面,即driver节点上初始化连接,比如数据库连接,或者ActorSystem,那么再将其放到RDD里面时便会报错,
这种东西无法序列化是Spark弥留很久的问题。
解决方案是先对RDD做foreachPartition,在每个partition里初始化连接,再做进一步操作,而不是在每个RDD里初始化连接,
前者会极大减少初始化次数,提高代码的效率。
spark 大表关联大表计算问题
任何时候都要避免大表关联大表的计算,尽量将大表拆小,如果实在没法避免,有如下方法可供参考:
假设大表A关联大表B计算距离矩阵,
- 1.大表A先切分为若干块,可通过设置相应字段进行过滤;
- 2.将表B`collect`回来,再将其`broadcast`出去,对表A切分结果的小表与表B做关联计算。
kudu tablet server关停
CDH上kudu时常会有一些tablet server出现异常,当关掉该tablet server后,若要该tablet server重新正常工作,需要将
原来改tablet server的kudu data目录下的tablet data和wal删掉。
详见:
https://kudu.apache.org/docs/index.html
http://cwiki.apachecn.org/display/Kudu/Index
kudu ntp时间不同步问题
kudu在掉了一段时间或者服务器挂了一段时间后会出现:
Check failed: _s.ok() Bad status: Service unavailable: Cannot initialize clock: Error reading clock. Clock considered unsynchronized Full log file
解决方案具体操作为:
centos/rehat系统的:
sudo yum install ntp
sudo /etc/init.d/ntpd restart
ubuntu系统的:
sudo apt-get install ntp
sudo service ntp restart
查看状态:
ntptime
若是:
ntp_gettime() returns code 0 (OK)
time de24c0cf.8d5da274 Tue, Feb 6 2018 16:03:27.552, (.552210980),
maximum error 224455 us, estimated error 383 us, TAI offset 0
ntp_adjtime() returns code 0 (OK)
modes 0x0 (),
offset 1279.543 us, frequency 2.500 ppm, interval 1 s,
maximum error 224455 us, estimated error 383 us,
status 0x2001 (PLL,NANO),
time constant 10, precision 0.001 us, tolerance 500 ppm,
则重启KUDU table sever即可。
kudu 修改master
1. 修改kudu master信息,最后对应的为kudu新master uuid:新IP:端口, 端口一般为7051:
sudo -u kudu kudu local_replica cmeta rewrite_raft_config --fs_wal_dir=/data/kudu/master --fs_data_dirs=/data/kudu/master 00000000000000000000000000000000 610e3791d4044637a3e3484abee7796c:10.2.113.104:7051
2. CM上修改kudu configuation, 设置 master.address 为 新IP:端口
3. 在master节点上命令行进入mysql, 账号相关信息一般在 /etc/cloudera-scm-server/db.properties ,进入hive database:
UPDATE TABLE_PARAMS SET PARAM_VALUE ='10.2.113.104:7051'
WHERE PARAM_KEY = 'kudu.master_addresses'
AND PARAM_VALUE = '192.168.1.23:7051';
上述为将旧IP修改为新IP.
4. imppala更新:
INVALIDATE METADATA;
参考:
https://www.cloudera.com/documentation/enterprise/5-13-x/topics/kudu_administration_cli.html#migratingToMultipleKuduMasters.d12e306
集群swap memory(交换内存)使用过多导致服务变慢甚至挂掉问题
sysctl -w vm.swappiness=1
参考:
https://www.cloudera.com/documentation/enterprise/latest/topics/cdh_admin_performance.html#cdh_performance__section_xpq_sdf_jq
集群yarn org.apache.hadoop.yarn.server.nodemanager.LocalDirsHandlerService: Most of the disks failed.
问题为nodemanager磁盘服务空间达到设定的最大的限度(默认90%)
解决办法:
1. 删掉或者迁移hdfs上的数据部分到别的地方
2. 修改 max-disk-utilization-per-disk-percentage 参数, 调高其比例.
集群hbase问题:org.apache.zookeeper.KeeperException$SessionExpiredException: KeeperErrorCode = Session expired
查看log日志是zookeeper链接超时,有可能是以下原因:
1. GC时间过长
2. load太高
3. 该HBase节点的regionServer当次向其他节点收集的内容过多
解决方案:
1. 修改zookeeper max session timeout,修改为2分钟,默认1分钟
2. 同时修改HBase session timeout为2分钟,默认1分钟
集群HDFS datanode启动失败,提示权限问题:’/var/run/hdfs-sockets’ is owned by a user who is not root and not you
解决方案:修改目录 /var/run/hdfs-sockets 所有者权限
sudo chown hdfs:root -R /var/run/hdfs-sockets
Oozie配置spark2
https://blog.csdn.net/yc_1993/article/details/100049444
CDH集群加硬盘
1. sudo /etc/init.d/cloudera-scm-server status //查看集群状态
2. 在CM上停止所有的集群服务
3. sudo /etc/init.d/cloudera-scm-server stop //在master命令行停止CDH相关server
3.1. service cloudera-scm-server stop //如果3步骤不行,用3.1方法
4. mkdir /dfs/dn2 //在新加的磁盘挂载点创建dn2目录
5. sudo chown -R hdfs:hadoop /dfs/dn2 //修改相应权限
6. sudo /etc/init.d/cloudera-scm-server start //启动CDH相应服务
7. 通过CM修改HDFS配置文件:dfs.data.dir, dfs.datanode.data.dir, 新增 /dfs/dn2.
8. 通过CM重启HDFS服务
9. hadoop dfsadmin -report //查看DFS used% 和 DFS Remaining是否有发生变化
spark rpc message 太大错误
问题:Consider increasing spark.rpc.message.maxSize or using broadcast variables for large values.
解决方案:
在spark submit的时候, 添加参数 --conf spark.rpc.message.maxSize=512, 把默认128改成512.
hive truncate表的时候卡住问题
# 在命令行设置并发锁
set hive.support.concurrency=false;
spark 任务Stage过多导致的内存溢出
问题:Exception in thread "dispatcher-event-loop-31" java.lang.OutOfMemoryError: GC overhead limit exceeded
解决方案:
由于spark默认stage为1000时才垃圾清理,超出了系统的OOM默认设置,一般可以这么解决:
1. 给任务分配更多的内存(不过不建议,治标不治本)
2. 由于通常出现这种任务是循环过多导致,可以通过查看spark application上每个循环job 和 stage的次数,提交任务的时候设置以下两个参数:
--conf spark.ui.retainedJobs=16
--conf spark.ui.retainedStages=64
以上两个数值通过观察得到,一般为每个job和stage的倍数即可, 不可太小亦不可太大。
oozie spark任务读取hive表时 table or viem not found问题
问题:子节点由于没有hive-site.xml相应的配置,读不到hive相关元数据信息
解决方案:设置sparkConf里hive相应uris和dir
val scConf = new SparkConf()
.setAppName(appConf.getString("name"))
.set("hive.metastore.uris", "thrift://hostname:9084")
.set("hive.metastore.warehouse.dir", "/user/hive/warehouse")
val sqc = new HiveContext(sc)
sbt依赖(采用hiveContext):
libraryDependencies += "org.apache.spark" % "spark-sql_2.11" % "2.1.0" % Provided
libraryDependencies += "org.apache.spark" % "spark-hive_2.11" % "2.1.0" % Provided
spark-core 和 hbase-client io.netty包冲突: java.lang.NoSuchMethodError: io.netty.channel.DefaultFileRegion
问题: spark-core的io.netty 和hbase-client的包冲突, 由于hbaes采用了旧版了io.netty, 所以spark里面有些方法找不到.
解决方案:查看spark的netty版本后直接指定io.netty版本,例:
libraryDependencies += "io.netty" % "netty-all" % "4.0.42.Final"
spark-sql 特殊字符问题
问题: 通常会遇到一些表的字段名包含各种各样的字符,如: `-?!^% 这些, 在spark-sql里会 org.apache.spark.sql.AnalysisException: cannot resolve XXX
解决方案: 再用``将整个字符包起来, 例:
val a = "abc-abc"
“`” + a + "`"
impala查询hive 找不到metadata问题
问题:
ERROR: AnalysisException: Unrecognized table type for table: XXXX
CAUSED BY: TableLoadingException: Unrecognized table type for table: XXX
hive表使用了ORC存储格式,impala2.x以下不支持, 改用parquet格式吧.
yarn: sparkcontext stopped while waiting for backend
问题:
1. 可能是分配给node的内存太小,而数据太大
2. 可能是由于Java 8的excessive memory allocation strategy
两种解决方案:
1. 对于第一种可能:提交spark任务的时候,--driver-memory 和--executor-memory 设置大一点(推荐这个方案)
一般默认的nodemanager的java heap是1g, ResourceManager的java heap也是1g, java opts的permSize设置一般512m,
所以预留这些空间外, 加上数据本身的可能大小, 就是最终driver和excutor的大小.
2. 对于第二种可能:在nodemanager的yarn-site.xml中添加:
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
第二种方案是是能解决问题,但是也使得nodemanager在内存问题上对每个container失去相应的控制
oozie调度任务由于网络或者其他不可抗因素自己掉
解决方案:
workflow.xml 在action_name标签后加上重试次数与重试间隔时间(分钟)
retry-max="3" retry-interval="1"
或者通过hue添加任务的时候, 通过界面操作添加retry-max和retry-interval
CDH 删掉坏掉的节点 与重新上线问题
问题:通常坏掉的节点是没办法正常通过decommission解除掉的,同样的,未解除掉的节点是没办法重新上线的
解决方案:
1. 针对坏死节点解除问题,需要进入各个服务下先停止坏掉节点的服务(停服务可能会报错,但是没问题),然后在CM上就可以解除该节点了
2. 针对解除节点后没办法重新上线,经常显示current managed 为yes, 此时需要需要在CM上Remove Hosts From Cloudera Manager
CDH添加节点时: hostname localhost.localdomain differs from the canonical name localhost
问题:hostname问题
解决方案:
1. 修改/etc/hosts里面的ip和hostname
2. 修改/etc/sysconfig/network, 里面的hostname, 重启网络service network restart
查看是否有问题:
1. uname -n
2. python里查看:
import socket
print socket.getfqdn()
print socket.gethostbyname(socket.getfqdn())
HDFS新增目录节点:CDH org.apache.hadoop.util.DiskChecker$DiskErrorException: Directory is not writable
问题:hdfs写入权限问题
解决方案:
chown -R hdfs:hadoop /XXXX/XXXXXX
hbase重启region server节点出现:org.apache.hadoop.hbase.ClockOutOfSyncException: Server 60020,1572261259281 has been rejected; Reported time is too far out of sync with master
问题:节点与master时间不同步问题
解决方案:利用ntp同步时间
1. yum install ntp
2. /etc/init.d/ntpd restart
3. ntptime
看到没有任何error字眼出现后即可,若restart后有FAILED的,再继续restart,若ntptime后error的,继续ntptime.
spark stream 任务卡住,显示processing
出现该问题有很多种原因,需要一一排查:
1. 所用的系统若为centos, 内核需高于 4.0.6 ,该问题详见:
https://stackoverflow.com/questions/40225135/spark-streaming-kafka-job-stuck-in-processing-stage
https://bugzilla.redhat.com/show_bug.cgi?id=1209433
hdfs 单节点内磁盘数据均衡
问题:有时一个节点挂载了多个磁盘,不同磁盘间数据不均衡导致读写速度受影响,需要对单个节点内的不同磁盘的数据做均衡
解决方案:
1. 解除该节点重新上线(简单粗暴,数据多时不可取)
2. 利用hdfs diskbalancer
在CM hdfs配置里搜索safety value,第一个选项里添加:
Name: dfs.disk.balancer.enabled
Value: true
输入命令:
# 获取json文件,plan后面为要均衡的节点
hdfs diskbalancer -plan gz18
# 查看plan json目录
hdfs dfs -ls /system/diskbalancer
# 执行均衡操作
hdfs diskbalancer -execute /system/diskbalancer/xxxx/xxx.plan.json
# 查看均衡结果
hdfs diskbalancer -query gz18
impala round函数未能正确保留精度问题:
解决方案: 采用 decimal 格式后再保留精度, Decimal(n,m)表示数值中共有n位数,其中整数n-m位,小数m位。
round(cast(1.111 * 100 as decimal(6, 2)), 2)
CDH集群机器由于外部原因导致所有节点内核挂掉重启
1. 集群全部突发性挂掉后CM-server和CM-agent服务不见:
解决方案:
sudo service cloudera-scm-agent start
sudo service cloudera-scm-server start
2. 恢复CM界面后,出现 host monitor is not runing:
解决方案:
在Cloudera Management Service中restart所有服务
3. 集群恢复过程中HDFS namenode和datanode clusteID不兼容
解决方案:
将namenode节点上/dfs/nn/current中VERSION里面的clusterID修改跟datanode一样即可, 具体原因是namenode被做了格式化了。
4. 集群恢复过程中hbase出现如下问题:org.apache.hadoop.security.AccessControlException: Permission denied: user=hbase, access=WRITE, inode="/":hdfs:supergroup:drwxr-xr-x
解决方案:
sudo -u hdsf hdfs dfs -mkdir /hbase
sudo -u hdfs hdfs dfs -chmod 777 /hbase
5. 集群恢复过程中yarn出现:org.apache.hadoop.security.AccessControlException: Permission denied: user=mapred, access=WRITE, inode="/":hdfs:supergroup:drwxr-xr-x
解决方案:
sudo -u hdfs hdfs dfs -chmod 777 /
6. 集群namenode元数据丢失恢复
解决方案:
(1)删除namenode下 dfs/nn 相关元数据残留文件
sudo -u hdfs hdfs namenode -format
(2)复制secondnamenode 下 dfs/snn/cuurent 中最新的fsimage和VERSION到 namenode的 dfs/nn/current下面,同时对文件做MD5计算
例:md5sum fsimage_0000000000224286054 > fsimage_0000000000224286054.md5
(3)退出safemode模式
sudo -u hdfs hdfs dfsadmin -safemode leave
(4)重启hdfs
7. hdfs恢复过程中出现missing block等问题
解决方案:
(1)查看丢失的block数
sudo -u hdfs hdfs dfsadmin -report
(2)如果数据不重要可以直接delete
sudo -u hdfs hdfs fsck -delete
项目jar包与spark环境冲突
问题:项目开发过程中本地调试完成后提交到集群,经常会遇到依赖冲突,那么怎么解决这种问题?
首先如何看项目依赖和集群是否兼容,有几种方法:
1、提交代码的时候通过错误查看,通常都会看到incompatible相关字眼,或者version 52.0什么,这种比较直观,但也比较被动。
2、通过dependencyTree查看项目依赖版本,对比集群/opt/cloudera/parcels/CDH/jars目录下的jars包即可,这种比较主动。
那么当遇到不兼容时,解决方案大概有以下几种:
1、项目依赖版本低于集群,这种情况可以尝试将项目依赖版本升到集群版本,如果高版本的api也适合当前开发环境的话。
2、项目依赖版本高于集群,这种情况最简单就是降低版本,但是通常低版本难以满足开发需要,那么怎么搞,这里主要说下sbt管理,
(1)首先在assembly.sbt添加插件 addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.9.2")
(2)通过sbt的dependencyTree命令查看哪个jar包与集群冲突
(3)通过在sbt添加
assemblyShadeRules in assembly := Seq(
ShadeRule.rename("org.apache.http.**" -> "shadeio.@1").inAll
)
利用shade操作在打包时对冲突包进行别名
hive数据迁移到其他集群
1. 元数据迁移:
# mysqldump导出hive元数据表到sql文件
(1)mysqldump -h hostip --databases db_name --single-transaction -u user_name -p > hive_databases.sql
(2)/etc/hadoop/conf/hdfs-site.xml #查看当前集群和目标集群hdfs的ip和port
(3)set -i "s/old_ip:old_port/new_ip:new_port/g" hive_databases.sql #将旧集群hdfs ip:port替换成新的ip:port
(4)mysql -u user_name -p < hive_databases.sql #将元数据导入新集群的库中
# 重点!!
(5)上面直接把旧的old_ip:old_port替换成新的new_ip:new_port对于hive内部表是没问题的,但是对于外部表有问题,
通常内部表的old_port和new_port都是8022,外部表的port为8020,如此替换后会出现查询外部表的时候提示:
no host: hdfs://hostname:8022:8020:/path 这样两个端口叠加;
解决方案就是:
进入hive元数据表,修改SDS表中的LOCATION信息:
UPDATE SDS a
INNER JOIN (select SD_ID, REPLACE(LOCATION,":8022","" ) as l from SDS where LOCATION like '%8022:8020%')b
on a.SD_ID = b.SD_ID
set a.LOCATION = b.l
2. 原始数据迁移
- 第一种, 这种方式需要两边的集群互通, 不止是namenode互通,还需要datanode互通
sudo -u hdfs hadoop distcp hdfs://local_namenode:port/source hdfs://remote_namenode:port/dest
- 第二种, 先把本地集群数据拉到本地,在scp过去远程集群,再把数据put到集群hdfs, (下面的 hdfs://namenode:port 这种前缀可以省略)
sudo -u hdfs hdfs dfs -get hdfs:/namenode:port/hdfs_data /local_director
tar -zcvf ./data.tar.gz /local_director
rsync -r ./data.tar.gz remote_ip:/remote_director
tar -zxvf ./data.tar.gz
sudo -u hdfs hdfs dfs -put /local_director hdfs://namenode:port/hdfs_director
记一次CDH集群被入侵事件
CDH版本: 6.2.0
注入脚本为:/tmp/kdevtmpfsi /var/tmp/kinsing
脚本属性:挖矿类占用大量cpu资源
原因分析:
- 第一ssh端口没有安全变更;
- 第二公网IP没有做白名单;
- 第三微软云安全机制不了解;
- 第四CDH6.2.0上的KAFKA存在ACL漏洞,
- 具体参考:https://docs.cloudera.com/documentation/enterprise/6/release-notes/topics/rg_cdh_621_fixed_issues.html#id_uvz_fvd_hlb
漏洞描述Potential to bypass transaction and idempotent ACL checks in Apache Kafka
解决方案:
- ssh端口改63305加安全验证
- 不开放公网IP,或者公网IP加白名单访问列表
- 升级CDH到6.2.1
hive报错:Cannot obtain block length for LocatedBlock
问题: aused by: java.io.IOException: Cannot obtain block length for LocatedBlockBP-2013445412-xxxx-1479285812782:....
因为集群出现其他异常导致正在读文件的程序中止,没有释放文件,所以下次读到改文件会访问不了
解决方案:
1. 查出哪些文件还在读状态:sudo -u hdfs hdfs fsck -openforwrite
2. 释放该文件: sudo -u hdfs hdfs debug recoverLease -path /data/1600135201583.log -retries 3
其中1步骤里面可能查出很多没用.符号,可以先写到文件再拿出来分析,
其次查出的文件可能有一些是hbase或者其他服务的文件,这些文件不能随便去释放,需谨慎对待查出的文件
CDH安装
v6.2.1(建议用6.2.1,6.2版本存在ACL漏洞)官网文档: https://docs.cloudera.com/documentation/enterprise/6/6.2/topics/installation.html
配置过程中有两个注意点:
1. /etc/sysconfig/network 不需要添加hostname进去, 否则在安装的时候会找不到主机名
2. 在Step 3: Install Cloudera Manager Server里面,不要理(Recommended) Enable Auto-TLS,否则在安装时候会出现heartbeat error,
巨坑, enable tls后无法取消,只能重装。
具体安装过程为(默认均为centos7系统):
(1). 在每个节点上修改hosts文件, 为每台机添加hosts解析, 测试hostname可以用`uname -a`和`hostname`命令
vim /etc/hosts
1.1.1.1 foo-1.example.com
2.2.2.2 foo-2.example.com
3.3.3.3 foo-3.example.com
4.4.4.4 foo-4.example.com
(2). 在每个节点上关闭防火墙
sudo iptables-save > ~/firewall.rules
sudo systemctl disable firewalld
sudo systemctl stop firewalld
(3). 在每个节点上关闭安全增强模块SELinux
输入`getenforce`若输出`Permissive`或`Disabled`, 则可以忽略此步,不是则看下面
vim /etc/selinux/config
修改SELINUX=enforcing为SELINUX=permissive
setenforce 0
(4). 在每个节点上安装NTP, CDH官网有提供ntp server配置,忽略就可以,如果同步其server时间,会改变当前系统
yum install ntp
sudo systemctl start ntpd
sudo systemctl enable ntpd
hwclock --systohc
(5). 配置CDH安装源, 源的下载地址: https://docs.cloudera.com/documentation/enterprise/6/release-notes/topics/rg_cm_6_version_download.html
sudo wget https://archive.cloudera.com/cm6/6.2.1/redhat7/yum/cloudera-manager.repo -P /etc/yum.repos.d/
sudo rpm --import https://archive.cloudera.com/cm6/6.2.1/redhat7/yum/RPM-GPG-KEY-cloudera
(6). 在CDH CMserver上安装JDK
sudo yum install oracle-j2sdk1.8
(7). 在CDH CMserver上安装CM, 官网上这里会提到Enable Auto-TLS, 忽略就可以, 否则后面安装不了
sudo yum install cloudera-manager-daemons cloudera-manager-agent cloudera-manager-server
(8). 在CDH CMserver安装mysql
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm
sudo yum update
sudo yum install mysql-server
sudo systemctl start mysqld
sudo systemctl stop mysqld
rm -f /var/lib/mysql/ib_logfile0
rm -f /var/lib/mysql/ib_logfile1
vim my.cnf
可以替换为CDH提供的参考配置: https://docs.cloudera.com/documentation/enterprise/6/6.2/topics/cm_ig_mysql.html#cmig_topic_5_5
sudo systemctl enable mysqld
sudo systemctl start mysqld
修改mysql root账号密码
/usr/bin/mysql_secure_installation
回车
输入新的root密码
确认新密码
Y
Y
N
Y
Y
在每个节点上安装mysql jdbc
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.46.tar.gz
tar zxvf mysql-connector-java-5.1.46.tar.gz
sudo mkdir -p /usr/share/java/
cd mysql-connector-java-5.1.46
sudo cp mysql-connector-java-5.1.46-bin.jar /usr/share/java/mysql-connector-java.jar
(9). 在CDH CMserver提前创建CM server所需要的mysql元数据库, 如下创建scm库,并创建scm用户和其密码, 此处根据需要提前创建相应库
CREATE DATABASE scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON scm.* TO 'scm'@'%' IDENTIFIED BY 'scm123';
更多提前库如:
CREATE DATABASE hive DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON hive.* TO 'hive'@'%' IDENTIFIED BY 'hive123$%^';
CREATE DATABASE amon DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON amon.* TO 'amon'@'%' IDENTIFIED BY 'amon123$%^';
CREATE DATABASE rman DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON rman.* TO 'rman'@'%' IDENTIFIED BY 'rman123$%^';
CREATE DATABASE hue DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON hue.* TO 'hue'@'%' IDENTIFIED BY 'hue123$%^';
CREATE DATABASE metastore DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON metastore.* TO 'metastore'@'%' IDENTIFIED BY 'metastore123$%^';
CREATE DATABASE sentry DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON sentry.* TO 'sentry'@'%' IDENTIFIED BY 'sentry123$%^';
CREATE DATABASE nav DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON nav.* TO 'nav'@'%' IDENTIFIED BY 'nav123$%^';
CREATE DATABASE navms DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON navms.* TO 'navms'@'%' IDENTIFIED BY 'navms123$%^';
CREATE DATABASE oozie DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON oozie.* TO 'oozie'@'%' IDENTIFIED BY 'oozie123$%^';
(10). 在CDH CMserver预准备相关数据库
sudo /opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm
更多预准备如:
sudo /opt/cloudera/cm/schema/scm_prepare_database.sh mysql hive hive
sudo /opt/cloudera/cm/schema/scm_prepare_database.sh mysql amon amon
sudo /opt/cloudera/cm/schema/scm_prepare_database.sh mysql rman rman
sudo /opt/cloudera/cm/schema/scm_prepare_database.sh mysql hue hue
sudo /opt/cloudera/cm/schema/scm_prepare_database.sh mysql metastore metastore
sudo /opt/cloudera/cm/schema/scm_prepare_database.sh mysql sentry sentry
sudo /opt/cloudera/cm/schema/scm_prepare_database.sh mysql nav nav
sudo /opt/cloudera/cm/schema/scm_prepare_database.sh mysql navms navms
sudo /opt/cloudera/cm/schema/scm_prepare_database.sh mysql oozie oozie
(11). 启动CM server:
sudo systemctl start cloudera-scm-server
查看日志:
sudo tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log
看到: INFO WebServerImpl:com.cloudera.server.cmf.WebServerImpl: Started Jetty server.
即可打开CM的web管理界面:
http://<server_host>:7180
admin
admin
然后根据页面提示进行安装操作即可配置完整个集群。
以上是关于大数据篇:这些年大数据组件的一些踩坑和优化总结的主要内容,如果未能解决你的问题,请参考以下文章