准备4台机器,内存,磁盘尽量给足
node1(master) 192.168.231.128 内存16G,磁盘50G
node2 192.168.231.129 内存3G,磁盘50G
node3 192.168.231.130 内存3G,磁盘50G
node4 192.168.231.131 内存3G,磁盘50G
为了尽可能减少重复劳动,先在node1上配置好所有节点都需要进行的相同操作,然后克隆出其他3台虚拟机 node2,node3,node4
一:下载所需的安装包
1.1)下载cm ,下载地址 http://archive.cloudera.com/cm5/cm/5/ 选择 cloudera-manager-centos7-cm5.12.1_x86_64.tar.gz (708M )
1.2)下载cdh ,下载地址 http://archive.cloudera.com/cdh5/parcels/5.12.1/选择 CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel 、CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel.sha1 (1.6G,慢慢等吧)
1.3)下载 manifest.json 和cdh在同一个页面 ,下载地址 http://archive.cloudera.com/cdh5/parcels/5.12.1/manifest.json
1.4)下载mysql驱动, https://cdn.mysql.com//Downloads/Connector-J/mysql-connector-java-5.1.44.tar.gz
1.6) mysql安装程序, http://mirrors.neusoft.edu.cn/mariadb//mariadb-10.2.7/bintar-linux-x86_64/mariadb-10.2.7-linux-x86_64.tar.gz下载后上传到node1 所有的安装文件都放在 /app 目录下
二:卸载openjdk
CentOS自带OpenJdk,不过运行CDH5需要使用Oracle的JDK,需要Java 7的支持。
卸载自带的OpenJdk,使用rpm -qa | grep java查询java相关的包,使用rpm -e –nodeps 包名卸载之。
三:去Oracle的官网下载jdk安装,最后配置环境变量。
- cd /app
- tar -zxvf jdk-8u144-linux-x64.tar.gz
- vim /etc/profile
- export JAVA_HOME=/app/jdk1.8.0_144
- export PATH=$JAVA_HOME/bin:$PATH
- export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
- source /etc/profile
验证是否安装成功
- [root@localhost app]# java -version
- java version "1.8.0_144"
- Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
- Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)
四:关闭防火墙
- service iptables stop #临时关闭
- chkconfig iptables off #重启后生效
- systemctl stop firewalld.service #停止firewall
- systemctl disable firewalld.service #禁止firewall开机启动
五:SELinux
set enforce 0 (临时生效)
修改 vim /etc/selinux/config 下的
SELINUX=disabled (重启后永久生效)
- # This file controls the state of SELinux on the system.
- # SELINUX= can take one of these three values:
- # enforcing - SELinux security policy is enforced.
- # permissive - SELinux prints warnings instead of enforcing.
- # disabled - No SELinux policy is loaded.
- SELINUX=disabled
- # SELINUXTYPE= can take one of these two values:
- # targeted - Targeted processes are protected,
- # mls - Multi Level Security protection.
- SELINUXTYPE=targeted
六:安装mysql
参见:http://blog.xumingxiang.com/271.html
七:所有节点配置NTP服务
(这一步暂时可以跳过,但是在集群启动以后,会提示时间不同步)
集群中所有主机必须保持时间同步,如果时间相差较大会引起各种问题。 具体思路如下:
master节点作为ntp服务器与外界对时中心同步时间,随后对所有datanode节点提供时间同步服务。
所有datanode节点以master节点为基础同步时间。
所有节点安装相关组件:
- yum install ntp
启动 ntp:
- service ntpd start
设置开机启动:
- chkconfig ntpd on
检查是否设置成功:chkconfig –list ntpd其中2-5为on状态就代表成功。
可以通过以下命令先进行时间同步:
- ntpdate us.pool.ntp.org
主节点配置(master节点)
- vim /etc/ntp.conf
ntp服务只有一个配置文件,配置好了就OK。 这里只给出有用的配置,不需要的配置都用#注掉,这里就不在给出(大部分把#去掉即可,不需要添加):
- driftfile /var/lib/ntp/drift
- # Permit time synchronization with our time source, but do not
- # permit the source to query or modify the service on this system.
- restrict default kod nomodify notrap nopeer noquery
- restrict -6 default kod nomodify notrap nopeer noquery
- # Permit all access over the loopback interface. This could
- # be tightened as well, but to do so would effect some of
- # the administrative functions.
- restrict 127.0.0.1
- restrict -6 ::1
- # Hosts on local network are less restricted.
- restrict 192.168.3.0 mask 255.255.255.0 nomodify notrap
- # Use public servers from the pool.ntp.org project.
- # Please consider joining the pool (http://www.pool.ntp.org/join.html).
- server 0.centos.pool.ntp.org iburst
- server 1.centos.pool.ntp.org iburst
- server 2.centos.pool.ntp.org iburst
- server 3.centos.pool.ntp.org iburst
配置文件完成,保存退出,启动服务,执行如下命令:service ntpd start
检查是否成功,用ntpstat命令查看同步状态,出现以下状态代表启动成功:
synchronisedto NTP server () at stratum 2time correct towithin74 mspolling server every 128 s
如果出现异常请等待几分钟,一般等待5-10分钟才能同步。
在其他节点,直接运行
- ntpdate -u node1
(主节点ntp服务器) 即可,和node1同步
这里可能出现同步失败的情况,请不要着急,一般是本地的ntp服务器还没有正常启动,一般需要等待5-10分钟才可以正常同步。启动服务:service ntpd start
因为是连接内网,这次启动等待的时间会比master节点快一些,但是也需要耐心等待一会儿。
八:克隆虚拟机
参见:https://jingyan.baidu.com/article/6b97984d9798f11ca2b0bfcd.html
九:所有节点修改网络配置
修改主机名:
- vim /etc/sysconfig/network
- HOSTNAME=node1
- vim /etc/hostname
- node1
注意 :/etc/hostname 不可以有其他和主机名无关的内容 #注释也不行,下面的就是错误的
#localhost.localdomain
node1
十:所有节点配置host
修改ip与主机名的对应关系:
- vim /etc/hosts
- 192.168.231.128 node1
- 192.168.231.129 node2
- 192.168.231.130 node3
- 192.168.231.131 node4
十一:所有节点设置ssh无密码登陆,打通SSH
执行
- ssh-keygen -t rsa
一路回车,生成无密码的密钥对。
将公钥添加到认证文件中:
- cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
并设置authorized_keys的访问权限:
- chmod 600 ~/.ssh/authorized_keys
通过scp命令将各节点的认证文件拷贝到所有其他节点并追加到authorized_keys,使得各节点能够相互访问。具体如下:
在node1上执行
- ssh-keygen -t rsa
- cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
- scp ~/.ssh/id_rsa.pub root@192.168.231.129:~/.ssh/id_rsa_node2.pub
- scp ~/.ssh/id_rsa.pub root@192.168.231.130:~/.ssh/id_rsa_node1.pub
- scp ~/.ssh/id_rsa.pub root@192.168.231.131:~/.ssh/id_rsa_node1.pub
注意,如果sshd 不是默认的22端口,这需要加上端口号,如:scp ~/.ssh/id_rsa.pub -p 45685 root@192.168.231.131:~/.ssh/id_rsa_node1.pub
在node2上执行
- ssh-keygen -t rsa
- cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
- scp ~/.ssh/id_rsa.pub root@192.168.231.128:~/.ssh/id_rsa_node2.pub
- scp ~/.ssh/id_rsa.pub root@192.168.231.130:~/.ssh/id_rsa_node2.pub
- scp ~/.ssh/id_rsa.pub root@192.168.231.131:~/.ssh/id_rsa_node2.pub
在node3上执行
- ssh-keygen -t rsa
- cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
- scp ~/.ssh/id_rsa.pub root@192.168.231.128:~/.ssh/id_rsa_node3.pub
- scp ~/.ssh/id_rsa.pub root@192.168.231.129:~/.ssh/id_rsa_node3.pub
- scp ~/.ssh/id_rsa.pub root@192.168.231.131:~/.ssh/id_rsa_node3.pub
在node4上执行
- ssh-keygen -t rsa
- cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
- scp ~/.ssh/id_rsa.pub root@192.168.231.128:~/.ssh/id_rsa_node4.pub
- scp ~/.ssh/id_rsa.pub root@192.168.231.129:~/.ssh/id_rsa_node4.pub
- scp ~/.ssh/id_rsa.pub root@192.168.231.130:~/.ssh/id_rsa_node4.pub
在node1上执行
- cat ~/.ssh/id_rsa_node2.pub >> ~/.ssh/authorized_keys
- cat ~/.ssh/id_rsa_node3.pub >> ~/.ssh/authorized_keys
- cat ~/.ssh/id_rsa_node4.pub >> ~/.ssh/authorized_keys
在node2上执行
- cat ~/.ssh/id_rsa_node1.pub >> ~/.ssh/authorized_keys
- cat ~/.ssh/id_rsa_node3.pub >> ~/.ssh/authorized_keys
- cat ~/.ssh/id_rsa_node4.pub >> ~/.ssh/authorized_keys
在node3上执行
- cat ~/.ssh/id_rsa_node1.pub >> ~/.ssh/authorized_keys
- cat ~/.ssh/id_rsa_node2.pub >> ~/.ssh/authorized_keys
- cat ~/.ssh/id_rsa_node4.pub >> ~/.ssh/authorized_keys
在node4上执行
- cat ~/.ssh/id_rsa_node1.pub >> ~/.ssh/authorized_keys
- cat ~/.ssh/id_rsa_node2.pub >> ~/.ssh/authorized_keys
- cat ~/.ssh/id_rsa_node3.pub >> ~/.ssh/authorized_keys
十二 :开始安装Cloudera Manager
12.1)在所有节点创建cloudera-scm用户
- useradd --system --home-dir /opt/cm-5.12.1/run/cloudera-scm-server/ --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm
12.2)安装Cloudera Manager Server
安装前先保证机器上安装了python,不过一般centos7都默认安装了python2.7.5
主节点解压安装
cloudera manager的目录在/app下,解压:tar xzvf cloudera-manager*.tar.gz 将解压后的cm-5.12.1和cloudera目录放到/opt目录下:
- tar -zxvf /app/cloudera-manager-centos7-cm5.12.1_x86_64.tar.gz -C /opt
12.3)将mysql驱动copy到/opt/cm-5.12.1/share/cmf/lib/中:
- cp /app/cdh5.12.1/mysql-connector-java-5.1.44-bin.jar /opt/cm-5.12.1/share/cmf/lib/
12.4)在主节点初始化CM5的数据库:
启动mysql,然后
- /opt/cm-5.12.1/share/cmf/schema/scm_prepare_database.sh mysql cm -hnode1 -uroot -proot --scm-host node1 scm
在这里后面的参数分别是:数据库类型 数据库名称 数据库主机名 数据库用户名 密码 –scm-host cmserver主机名 scm scm scm
会要求输入scm密码
Enter SCM password: scm
如果是非root用户,可能会出现下面这样JAVA_HOME找不到
解决方案:修改scm_prepare_database.sh,在文件开头加上
- vim /opt/cm-5.12.1/share/cmf/schema/scm_prepare_database.sh
- JAVA_HOME=/app/jdk1.8.0_144
- export JAVA_HOME=/app/jdk1.8.0_144
这时我们发现数据库多了一个cm 的数据库
并且mysql.user表里多了一个叫scm的用户
然后mysql shell 客户端登录 修改允许scm远程登录
- update user set host = '%' where user = 'scm';
然后授权
- GRANT all ON *.* TO 'scm'@'%' ;
- GRANT all ON *.* TO 'root'@'%' ;
- flush privileges;
重启mysql
十三:安装Cloudera Manager Agent
13.1)修改/opt/cm-5.12.1/etc/cloudera-scm-agent/config.ini中的server_host为主节点的主机名。
13.2)同步Agent到其他所有节点:
- scp -r /opt/cm-5.12.1 root@node2:/opt/
13.3)准备Parcels,用以安装CDH5
将CHD5相关的Parcel包放到主节点的/opt/cloudera/parcel-repo/目录中(如没有parcel-repo,需要手动创建)
- node1 app]# cp CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel /opt/cloudera/parcel-repo/
- node1 app]# cp CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel.sha1 /opt/cloudera/parcel-repo/
- node1 app]# cp manifest.json /opt/cloudera/parcel-repo/
相关的文件如下:
CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel
CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel.sha1
manifest.json
最后将CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel.sha1,重命名为CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel.sha,
这点必须注意,否则,系统会重新下载CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel.sha1文件。
13.4)启动 cloudera-scm-server
- mkdir -p /var/lib/cloudera-scm-server
- mkdir -p /var/lib/cloudera-scm-agent
- mkdir -p /var/lib/cloudera-scm-server-db/data
在主机节点创建上面的目录,否则会出错,7180端口起不来。
主节点通过/opt/cm-5.12.1/etc/init.d/cloudera-scm-server start启动服务端。
server启动成功后会多出7180等端口
问题1):启动server时,显示OK,但是7180端口没起来
- [root@node1 ~]# service cloudera-scm-server-db status
- Redirecting to /bin/systemctl status cloudera-scm-server-db.service
- cloudera-scm-server-db.service
- Loaded: not-found (Reason: No such file or directory)
- Active: inactive (dead)
- [root@node1 ~]# service cloudera-scm-server-db start
- Redirecting to /bin/systemctl start cloudera-scm-server-db.service
- Failed to start cloudera-scm-server-db.service: Unit cloudera-scm-server-db.service failed to load: No such file or directory.
解决办法:
- mkdir -p /var/lib/cloudera-scm-server-db/data
问题2)如果是非root用户,可能会出现下面这样JAVA_HOME找不到
修改/opt/cm-5.12.1/etc/init.d/cloudera-scm-server,在文件开头加上
- JAVA_HOME=/app/jdk1.8.0_144
- export JAVA_HOME=/app/jdk1.8.0_144
问题3)非root用户,启动显示OK,但是7180端口起不来,查看日志报如下错误
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Access denied for user 'scm'@'%' to database 'cm'
解决办法:用mysql shell 客户端登录 后执行下面命令
grant all on cm.* to 'scm'@'%' identified by 'scm' with grant option;
问题4)非root用户,启动显示OK,但是7180端口起不来,查看日志报如下错误
- 2017-09-28 12:48:52,618 ERROR WebServerImpl:com.cloudera.server.web.cmf.search.components.SearchRepositoryManager: The server storage directory [/var/lib/cloudera-scm-server] doesn't exist.
- 2017-09-28 12:48:52,618 ERROR WebServerImpl:com.cloudera.server.web.cmf.search.components.SearchRepositoryManager: No read permission to the server storage directory [/var/lib/cloudera-scm-server]
- 2017-09-28 12:48:52,618 ERROR WebServerImpl:com.cloudera.server.web.cmf.search.components.SearchRepositoryManager: No write permission to the server storage directory [/var/lib/cloudera-scm-server]
- 2017-09-28 12:48:54,663 INFO WebServerImpl:org.springframework.web.servlet.handler.SimpleUrlHandlerMapping: Root mapping to handler of type [class org.springframework.web.servlet.mvc.ParameterizableViewController]
- 2017-09-28 12:48:54,716 INFO WebServerImpl:org.springframework.web.servlet.DispatcherServlet: FrameworkServlet 'Spring MVC Dispatcher Servlet': initialization completed in 2536 ms
- 2017-09-28 12:48:54,738 INFO WebServerImpl:com.cloudera.server.web.cmon.JobDetailGatekeeper: ActivityMonitor configured to allow job details for all jobs.
- 2017-09-28 12:48:55,813 ERROR SearchRepositoryManager-0:com.cloudera.server.web.cmf.search.components.SearchRepositoryManager: The server storage directory [/var/lib/cloudera-scm-server] doesn't exist.
- 2017-09-28 12:48:55,813 ERROR SearchRepositoryManager-0:com.cloudera.server.web.cmf.search.components.SearchRepositoryManager: No read permission to the server storage directory [/var/lib/cloudera-scm-server]
- 2017-09-28 12:48:55,813 ERROR SearchRepositoryManager-0:com.cloudera.server.web.cmf.search.components.SearchRepositoryManager: No write permission to the server storage directory [/var/lib/cloudera-scm-server]
解决办法:
- sudo mkdir /var/lib/cloudera-scm-server
13.5)启动cloudera-scm-agent
所有节点通过/opt/cm-5.12.1/etc/init.d/cloudera-scm-agent start启动Agent服务。 (所有节点都要启动Agent服务,包括服务端)
我们启动的其实是个service脚本,需要停止服务将以上的start参数改为stop就可以了,重启是restart。
agent启动成功后会多出19001和9000等端口
agent 有时候第一次启动后会立马stop,再启动一次就好了,没弄明白什么原因!
如果启动报错可以去 /opt/cm-5.12.1/log/ 查看错误日志。例如:
启动时agent时,如果出现“cmf-agent: error: argument –hostname is required”错误,则是因为/etc/hosts 和/etc/hostname 的配置没有对于那个好.
下面是node1上的正确配置
/etc/hosts
#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.231.128 node1
192.168.231.129 node2
192.168.231.130 node3
192.168.231.131 node4
/etc/hostname
node1
注意:启动server时,不会立即查询到7180端口,启动过程比较慢,可能需要等待5-10分钟
十四:启动Cloudera Manager
server 和所有节点agent启动成功后就可以在浏览器访问Cloudera Manager
http://192.168.231.128:7180/cmf/login
默认的用户名和密码均为admin:
十五:CDH5的安装配和集群配置
欢迎页面版本选择页面
我们选择Cloudera Express免费版,现在已经没有50个节点的限制
继续
选择主机节点
在这里看到了我们的4个节点node1,node2,node3,node4。勾选所有节点,继续
假如在安装的时候出现问题而中断或重装,如网络连接中断,机器死机,继续安装的时候可能会出现查询不到机器,并且根据ip搜索机器的时候,出现“当前受管”
的状态为“是”,安装失败的机器不能再选择了。
先停止所有服务。清除数据库。
- 1> 删除Agent节点的UUID
- rm -rf /opt/cm-5.12.1/lib/cloudera-scm-agent/*
- 2> 清空主节点CM数据库 进入主节点的Mysql数据库,然后
- drop database cm
- 3> 在主节点上重新初始化CM数据库
- /opt/cm-5.12.1/share/cmf/schema/scm_prepare_database.sh mysql cm -hnode1 -uroot -proot --scm-host node1 scm
第6步解释:......../scm_prepare_database.sh 数据库类型 数据库名 主机 账号 密码 --scm.......
等待一下,连接访问master:7180即可
集群安装
出现以下包名,说明本地Parcel包配置无误,直接点继续就可以了。如果此处发现不到parcel包,就重启所有节点的agent服务,和master的server服务。
如果parcel包不在默认的/opt/cloudera下面,则需要手动配置,如下图,然后重启cloudera-scm-server 和各节点的cloudera-scm-agent
继续,如果配置本地Parcel包无误,那么下图中的已下载,应该是很快就出现了,然后就是耐心等待分配过程就行了,这个过程的速度就取决于节点之间的传输速度。
如果安装过程中出现过中断再重新安装可能会出现报错“一个或多个主机没有报告其操作系统分配。这可能是由于运行已过期的 Cloudera Manager Agent 版本造成的。请运行 Host Inspector 检查 Agent 版本。”
这个不要慌,耐心等等就好了
在等待的过程中可以打开浏览器控制台查看是否有报错
等待了半个小时左右可以继续了
检测主机正确性
主机检测结果,除了两个黄色警告提示,基本没问题
第一个警告:
Cloudera 建议将 /proc/sys/vm/swappiness 设置为 10。当前设置为 60。使用 sysctl 命令在运行时更改该设置并编辑 /etc/sysctl.conf 以在重启后保存该设置。
echo 10 > /proc/sys/vm/swappiness
这样操作重启机器还是还原,要永久改变
vim /etc/sysctl.conf
vm.swappiness=10
第二个警告,提示执行命令:
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
执行完毕,重启后,警告依然,暂时不处理
接下来是选择安装服务,选择自定义,继续
主机角色分配
续
我们zokeeper选择三个节点,hdfs dataNode选择3个节点 ,继续
数据库设置,这一步前先建好相应的数据库 hive,oozie,hue
点击测试连接之前先拷贝好mysql驱动
- cp /app/cdh5.12.1/mysql-connector-java-5.1.44-bin.jar /opt/cloudera/parcels/CDH-5.12.1-1.cdh5.12.1.p0.3/lib/hive/lib
- cp /app/cdh5.12.1/mysql-connector-java-5.1.44-bin.jar /var/lib/oozie
数据库检测成功successful,继续。
如果出现如下错误,hue连不上:
这是因为服务器上缺少了一个组件,安装一下即可
- yum install -y python-lxml
图15.15 审核更改,主要是可以设置一些目录,可以修改成自己想要的,如果修改前提是要先创建目录,否侧hdfs会无法启动,并且报错文件夹不存在,并确保访问权限。
我这里保持默认
注意:在进行下一步继续前我们还要做几个事情,不然下一步会报错,会很郁闷,很无解
1)修改/var/log目录权限
- chmod -R 777 /var/log
2)修改hadoop-env.sh ,添加JAVA_HOME配置项
vim /opt/cloudera/parcels/CDH-5.12.1-1.cdh5.12.1.p0.3/lib/hadoop/etc/hadoop/hadoop-env.sh
添加
- JAVA_HOME=/app/jdk1.8.0_144
- export JAVA_HOME=/app/jdk1.8.0_144
3)编辑 vim /opt/cm-5.12.1/lib64/cmf/service/client/deploy-cc.sh
直接在上面加上
- JAVA_HOME=/app/jdk1.8.0_144
- export JAVA_HOME=/app/jdk1.8.0_144
所有节点都这样设置一下!
4)复制mysql驱动
- cp /app/cdh5.12.1/mysql-connector-java-5.1.44-bin.jar /opt/cloudera/parcels/CDH-5.12.1-1.cdh5.12.1.p0.3/lib/hive/lib
- cp /app/cdh5.12.1/mysql-connector-java-5.1.44-bin.jar /var/lib/oozie
继续,首次运行
这一步完成漫长的安装之旅就结束了。
然后就可以进入管理界面,可能有些组件在安装过程中没能启动成功,那么在管理界面上可以操作启动!!
十六:后续设置
16.1) 设置yarn.scheduler.maximum-allocation-mb' and/or 'yarn.nodemanager.resource.memory-mb 分别设置为2G ,可在cm管理界面设置
16.2)设置dfs权限,取消超级用户限制,可在cm管理界面设置
相关报错:
1)首次运行命令部署spark客户端配置报
Failed to deploy client configuration to the cluster.
仅完成 0/3 个步骤。首个失败:主机 node1 (id=1) 上的客户端配置 (id=2) 已使用 1 退出,而预期值为 0。
解决方法:
- find / -type f -name "*cc.sh"
定位到编辑 vim /opt/cm-5.12.1/lib64/cmf/service/client/deploy-cc.sh
直接在上面加上
- JAVA_HOME=/app/jdk1.8.0_144
- export JAVA_HOME=/app/jdk1.8.0_144
所有节点都这样设置一下!
然后刷新页面再点击重试,否则会出现下面很无脑的报错
明明文件是存在的,偏偏说瞎话
2)首次运行命令,创建oozie数据库表失败主机 node1 (id= 1) 上的进程 oozie-OOZIE-SERVER-createdbtables (id=57) 通过 1 退出并预期 0
解决办法:oozie缺少mysql驱动
- cp /app/cdh5.12.1/mysql-connector-java-5.1.44-bin.jar /var/lib/oozie
3)HDFS-副本不足的块
原因:原因是设置的副本备份数与DataNode的个数不匹配。我们在之前理论篇中已经说明了dfs. replication属性默认是3,也就是说副本数—块的备份数默认为3份。但是我们这里集群只有两个DataNode。所以导致了达不到目标—副本备份不足。解决方法:这种情况下的修复有2个步骤,1是设置目标备份数为2,2是通过命令更改当前备份数。副本不足和副本过多都可以用这2个步骤解决,主要是跟DataNode的个数对应。设置目标备份数为2点击集群-HDFS-配置搜索dfs. replication,设置为2后保存更改。
dfs.replication这个参数其实只在文件被写入dfs时起作用,虽然更改了配置文件,但是不会改变之前写入的文件的备份数。所以我们还需要步骤2在node1中通过命令更改备份数:
- su hdfs
- hadoop fs -setrep -R 2 /
- sudo -u hdfs hadoop fs -setrep -R 2 /
这里的-R 2的数字2就对应我们的DataNode个数。然后还要重新部署相关客户端配置,cm会有提示
4)yarn job history 起不来,报“Service org.apache.hadoop.mapreduce.v2.hs.JobHistoryServer failed in state INITED; cause: org.apache.hadoop.yarn.exceptions.YarnRuntimeException: Error creating done directory: [hdfs://node1:8020/user/history/done]”
原因:dfs目录权限不够
解决办法 :
- chmod -R 777 /dfs
5)spark启动出错命令行执行spark-submit,报错,java.lang.IllegalArgumentException: Required executor memory (1024+384 MB) is above the max threshold (1024 MB) of this cluster! Please check the values of 'yarn.scheduler.maximum-allocation-mb' and/or 'yarn.nodemanager.resource.memory-mb'在Yarn中同时修改上述两个参数的值,调整到2G 。