准备文件
从 http://archive.cloudera.com/cdh5/parcels/中下载CDH5.14.0的相关文件
原因就是,mysql连接驱动没有放到Hive和Oozie的相应目录中。下文有详解,这里不再重复。
其他都是一路绿灯通过,安装过程相当顺畅。
安装parcel
本地通过Parcel安装过程与本地通过Package安装过程完全一致,不同的是两者的本地源的配置。
区别如下:
Package本地源:软件包是.rpm格式的,数量通常较多,下载的时候比较麻烦。通过”createrepo .”的命令创建源,并要放到存放源文件主机的web服务器的根目录下,详见创建本地yum软件源,为本地Package安装Cloudera Manager、Cloudera Hadoop及Impala做准备
Parcel本地源:软件包是以.parcel结尾,相当于压缩包格式的,一个系统版本对应一个,下载的时候方便。如centos 6.x使用的CDH版本为CDH-X.X.X-1.cdhX.X.X.p0.22-el6.parcel,而centos 5.x使用的CDH版本为CDH-X.X.X-1.cdhX.X.X.p0.22-el5.parcel。
这些文件放好之后,CM会获取这个包,并出现在主机->包裹的页面。出现的快慢跟你设置的包的刷新频率有关,默认是1小时。也可以重启CM服务和agent服务识别。
可以在管理页面的属性标签下的包裹种类里修改。
等待parcel安装
正常情况下 内网网速速好的话 10分钟左右激活完毕,最多不超过30分钟 如果卡住了 建议看看日志
安装过程中有什么问题 可以用
/opt/cm-5.14.0/etc/init.d/cloudera-scm-agent status
/opt/cm-5.14.0/etc/init.d/cloudera-scm-server status
查看服务器客户端状态
也可以通过
/var/log/cloudera-scm-server/cloudera-scm-server.log
/var/log/cloudera-scm-agent/cloudera-scm-agent.log
查看日志
如果上面的路径找不到则在
日志文件夹"/opt/cm-5.14.0/log"查看日志,里面包含server和agent的log,使用命令如下:
tail -f /opt/cm-5.14.0/log/cloudera-scm-server/cloudera-scm-server.log
tail -f /opt/cm-5.14.0/log/cloudera-scm-agent/cloudera-scm-agent.log
例如我这里NTP因为没有外网,所以会报错,不过有些错误不影响的话不需要管。
成功激活后继续右下角点击继续
主机检查
会进入自动检查主机(耗时2分钟左右)然后给出报告,包括需要修改的部分和组件的版本
解决警告
这里有2个警告需要解决一下,至于版本里的不可用不适用不需要管。
警告一
Cloudera 建议将 /proc/sys/vm/swappiness 设置为最大值 10。当前设置为 60。使用 sysctl 命令在运行时更改该设置并编辑 /etc/sysctl.conf,以在重启后保存该设置。您可以继续进行安装,但 Cloudera Manager 可能会报告您的主机由于交换而运行状况不良。以下主机将受到影响
解决方法
每台受影响的主机运行
echo 10 > /proc/sys/vm/swappiness 即可解决。
警告二
已启用透明大页面压缩,可能会导致重大性能问题。请运行“echo never > /sys/kernel/mm/transparent_hugepage/defrag”以禁用此设置,然后将同一命令添加到 /etc/rc.local 等初始脚本中,以便在系统重启时予以设置。以下主机将受到影响
解决方法
每台受影响的主机运行命令
echo never > /sys/kernel/mm/transparent_hugepage/defrag
并且
vim /etc/rc.local
加入echo never > /sys/kernel/mm/transparent_hugepage/defrag这条命令。
然后点击重新运行进行重新检查
全部绿勾了,然后点击右下角的完成。
选择安装哪些组件服务--这里根据需求选择即可。
选择组件服务
右下角点击继续,然后配置角色。一般情况下保持默认就可以了(Cloudera Manager会根据机器的配置自动进行配置,如果需要特殊调整,自行进行设置就可以了)。
我这里使用默认配置,所以直接点击继续就可以了。
配置数据库
然后配置数据库
这里需要输入自己的mysql的对应数据库名称和用户名以及密码。
我们之前在mysql中新建的数据名分布对应填入 然后点击测试连接。
hive root 123456
oozie root 123456
hue root 123456
如果测试连接全部是Successful,则点击右下角的继续。
可能遇到的问题---hue--unable to verify
查看日志后发现原因是
Error loading MySQLdb module: libmysqlclient_r.so.16: cannot open shared object file: No such file or directory
这个是因为cm的服务端是用java编写的,cm的客户端是python编写的,这里测试连接时是用python去连接数据库。但是CentOS系统本身会缺少一些python连接数据库需要的关联库。
解决方法
在mysql的安装目录找到系统缺少的这个包,关联到系统即可。
根据最后提示,应该是找不着一个交libmysqlclient_r.so.16的文件,于是到mysql安装目录里找到这个文件并且做一个软连接到/usr/lib
如果是按照我们之前的离线安装mysql步骤安装的话 默认的mysql安装目录是/var/lib/mysql/
ln -s /var/lib/mysql/lib/libmysqlclient_r.so.16 /usr/lib64/libmysqlclient_r.so.16
但是/var/lib/mysql/ 目录下没有找到lib目录
使用
find / -name libmysqlclient_r.so.16
whereis libmysqlclient_r.so.16
也找不到libmysqlclient_r.so.16。
我们在之前解压mysql文件的目录里发现了除了
MySQL-client-5.6.34-1.linux_glibc2.5.x86_64.rpm
MySQL-server-5.6.34-1.linux_glibc2.5.x86_64.rpm
这两个安装文件之外另外的rpm包。
我们把其他几个关联rpm包也安装一下。
rpm -ivh MySQL-shared-5.6.34-1.linux_glibc2.5.x86_64.rpm
rpm -ivh MySQL-devel-5.6.34-1.linux_glibc2.5.x86_64.rpm
rpm -ivh MySQL-shared-compat-5.6.34-1.linux_glibc2.5.x86_64.rpm
rpm -ivh MySQL-embedded-5.6.34-1.linux_glibc2.5.x86_64.rpm
rpm -ivh MySQL-test-5.6.34-1.linux_glibc2.5.x86_64.rpm
安装完成后再查找
whereis libmysqlclient_r.so.16
发现已经有了libmysqlclient_r.so.16而且已经在/usr/lib64路径下了。
再次点击测试连接,成功。
审核更改
审核更改中列出相关目录和配置,如果有需要的话就修改,无特殊需求使用默认的即可,点击右下角的继续。
另外如果需要自己设定文件夹,一定要先mkdir文件夹,否侧hdfs会无法启动,并且报错文件夹不存在,并确保访问权限。
集群启动
集群会首次运行所有的组件,这过程中可能会有一些错误,不要担心,解决重试即可。下面会依次给出我遇到的情况供大家参考,基本上都是权限或者驱动问题。
正确首次启动后如下图(是不是很激动^^)
右下角继续,离成功安装一步之遥。
可能遇到的问题---hdfs启动失败--创建/tmp目录失败
Directory /tmp does not currently exist
Can't open /opt/cm-5.8.2/run/cloudera-scm-agent/process/61-hdfs-NAMENODE-createtmp/supervisor.conf: Permission denied.
报错信息
Mon Nov 28 14:20:59 CST 2016
JAVA_HOME=/usr/java/latest/
using /usr/java/latest/ as JAVA_HOME
using 5 as CDH_VERSION
using /opt/cm-5.8.2/run/cloudera-scm-agent/process/61-hdfs-NAMENODE-createtmp as CONF_DIR
using as SECURE_USER
using as SECURE_GROUP
unlimited
Directory /tmp does not currently exist.
+ HADOOP_CLASSPATH=/opt/cm-5.8.2/share/cmf/lib/plugins/event-publish-5.8.2-shaded.jar:/opt/cm-5.8.2/share/cmf/lib/plugins/tt-instrumentation-5.8.2.jar:/opt/cm-5.8.2/share/cmf/lib/plugins/navigator/cdh57/audit-plugin-cdh57-2.7.2-shaded.jar
+ set -x
+ replace_conf_dir
+ find /opt/cm-5.8.2/run/cloudera-scm-agent/process/61-hdfs-NAMENODE-createtmp -type f '!' -path '/opt/cm-5.8.2/run/cloudera-scm-agent/process/61-hdfs-NAMENODE-createtmp/logs/*' '!' -name '*.log' '!' -name '*.keytab' '!' -name '*jceks' -exec perl -pi -e 's#{{CMF_CONF_DIR}}#/opt/cm-5.8.2/run/cloudera-scm-agent/process/61-hdfs-NAMENODE-createtmp#g' '{}' ';'
Can't open /opt/cm-5.8.2/run/cloudera-scm-agent/process/61-hdfs-NAMENODE-createtmp/supervisor.conf: Permission denied.
+ make_scripts_executable
+ find /opt/cm-5.8.2/run/cloudera-scm-agent/process/61-hdfs-NAMENODE-createtmp -regex '.*\.py∥shpy‖sh$' -exec chmod u+x '{}' ';'
+ '[' DATANODE_MAX_LOCKED_MEMORY '!=' '' ']'
+ ulimit -l
+ export HADOOP_IDENT_STRING=hdfs
+ HADOOP_IDENT_STRING=hdfs
+ '[' -n '' ']'
+ acquire_kerberos_tgt hdfs.keytab
+ '[' -z hdfs.keytab ']'
+ '[' -n '' ']'
+ '[' validate-writable-empty-dirs = mkdir ']'
+ '[' file-operation = mkdir ']'
+ '[' bootstrap = mkdir ']'
+ '[' failover = mkdir ']'
+ '[' transition-to-active = mkdir ']'
+ '[' initializeSharedEdits = mkdir ']'
+ '[' initialize-znode = mkdir ']'
+ '[' format-namenode = mkdir ']'
+ '[' monitor-decommission = mkdir ']'
+ '[' jnSyncWait = mkdir ']'
+ '[' nnRpcWait = mkdir ']'
+ '[' -safemode = supergroup -a get = 1777 ']'
+ '[' monitor-upgrade = mkdir ']'
+ '[' finalize-upgrade = mkdir ']'
+ '[' rolling-upgrade-prepare = mkdir ']'
+ '[' rolling-upgrade-finalize = mkdir ']'
+ '[' nnDnLiveWait = mkdir ']'
+ '[' refresh-datanode = mkdir ']'
+ '[' mkdir = mkdir ']'
+ '[' 5 -ne 5 ']'
+ DIR=/tmp
+ USER=hdfs
+ GROUP=supergroup
+ PERMS=1777
+ RET=0
+ /opt/cloudera/parcels/CDH-5.8.0-1.cdh5.8.0.p0.42/lib/hadoop-hdfs/bin/hdfs --config /opt/cm-5.8.2/run/cloudera-scm-agent/process/61-hdfs-NAMENODE-createtmp dfs -test -d /tmp
原因是hdfs用户或者cm用户对这个文件没有操作权限。我们进入这个目录查看
cd /opt/cm-5.8.2/run/cloudera-scm-agent/process/61-hdfs-NAMENODE-createtmp/
ls -l
发现确实是这个文件只有root才能读写,那么我们应该设置一下权限,因为cm是用hdfs用户在操作的。
使用命令
cd /opt/cm-5.8.2/run/cloudera-scm-agent/process/61-hdfs-NAMENODE-createtmp/
chmod 666 supervisor.conf
ls -l
然后点击右下角的重试。
可能遇到的问题--启动 Key-Value Store Indexer, YARN (MR2 Included)---Create Job History Dir 失败
启动 Key-Value Store Indexer, YARN (MR2 Included)
仅完成 0/2 个步骤。首个失败:在服务 Key-Value Store Indexer 上执行命令 Start 失败
仅完成 0/2 个步骤。首个失败:在服务 YARN (MR2 Included) 上执行命令 Create Job History Dir 失败
使用用户 mapred 组 hadoop 和权限 1777 创建 DFS 目录 /tmp/logs
主机运行状况变成不良时,主机 cm0 (id=3) 上的进程 dfs-create-dir (id=72) 被标记为失败
Mon Nov 28 14:53:18 CST 2016
JAVA_HOME=/usr/java/latest/
using /usr/java/latest/ as JAVA_HOME
using 5 as CDH_VERSION
using /opt/cm-5.8.2/run/cloudera-scm-agent/process/72-dfs-create-dir as CONF_DIR
using as SECURE_USER
using as SECURE_GROUP
unlimited
Directory /tmp/logs does not currently exist.
Created directory /tmp/logs.
Changed ownership of /tmp/logs to mapred:hadoop.
Can't open /opt/cm-5.8.2/run/cloudera-scm-agent/process/72-dfs-create-dir/supervisor.conf: Permission denied.
+ HADOOP_CLASSPATH=/opt/cm-5.8.2/share/cmf/lib/plugins/event-publish-5.8.2-shaded.jar:/opt/cm-5.8.2/share/cmf/lib/plugins/tt-instrumentation-5.8.2.jar:/opt/cm-5.8.2/share/cmf/lib/plugins/navigator/cdh57/audit-plugin-cdh57-2.7.2-shaded.jar
+ set -x+ replace_conf_dir+ find /opt/cm-5.8.2/run/cloudera-scm-agent/process/72-dfs-create-dir -type f '!' -path '/opt/cm-5.8.2/run/cloudera-scm-agent/process/72-dfs-create-dir/logs/*' '!' -name '*.log' '!' -name '*.keytab' '!' -name '*jceks' -exec perl -pi -e 's#{{CMF_CONF_DIR}}#/opt/cm-5.8.2/run/cloudera-scm-agent/process/72-dfs-create-dir#g' '{}' ';'Can't open /opt/cm-5.8.2/run/cloudera-scm-agent/process/72-dfs-create-dir/supervisor.conf: Permission denied.+ make_scripts_executable+ find /opt/cm-5.8.2/run/cloudera-scm-agent/process/72-dfs-create-dir -regex '.*\.py∥shpy‖sh$' -exec chmod u+x '{}' ';'+ '[' DATANODE_MAX_LOCKED_MEMORY '!=' '' ']'+ ulimit -l+ export HADOOP_IDENT_STRING=hdfs+ HADOOP_IDENT_STRING=hdfs+ '[' -n '' ']'+ acquire_kerberos_tgt hdfs.keytab+ '[' -z hdfs.keytab ']'+ '[' -n '' ']'+ '[' validate-writable-empty-dirs = mkdir ']'
点击stderr看了详细的报错发现仍然是权限问题,解决方法跟之前一样,进入这个路径后更改下权限即可。
可能遇到的问题--Solr, HBase--Command Start is not currently available for execution
这种情况界面上没有详细的信息但是在日志中可以看到是超时了,这种情况下确保局域网网络好的情况下并且master服务器服务良好的情况下直接重试。
可能遇到问题---启动hive---Failed to Create Hive Metastore Database Tables
++ false++ exec /opt/cloudera/parcels/CDH-5.8.0-1.cdh5.8.0.p0.42/lib/hadoop/bin/hadoop jar /opt/cloudera/parcels/CDH-5.8.0-1.cdh5.8.0.p0.42/lib/hive/lib/hive-cli-1.1.0-cdh5.8.0.jar org.apache.hive.beeline.HiveSchemaTool -verbose -dbType mysql -initSchemaJava HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512M; support was removed in 8.0org.apache.hadoop.hive.metastore.HiveMetaException: Failed to load driverorg.apache.hadoop.hive.metastore.HiveMetaException: Failed to load driverat org.apache.hive.beeline.HiveSchemaHelper.getConnectionToMetastore(HiveSchemaHelper.java:79)at org.apache.hive.beeline.HiveSchemaTool.getConnectionToMetastore(HiveSchemaTool.java:113)at org.apache.hive.beeline.HiveSchemaTool.testConnectionToMetastore(HiveSchemaTool.java:159)at org.apache.hive.beeline.HiveSchemaTool.doInit(HiveSchemaTool.java:257)at org.apache.hive.beeline.HiveSchemaTool.doInit(HiveSchemaTool.java:243)at org.apache.hive.beeline.HiveSchemaTool.main(HiveSchemaTool.java:473)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.apache.hadoop.util.RunJar.run(RunJar.java:221)at org.apache.hadoop.util.RunJar.main(RunJar.java:136)Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driverat java.net.URLClassLoader.findClass(URLClassLoader.java:381)at java.lang.ClassLoader.loadClass(ClassLoader.java:424)at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)at java.lang.ClassLoader.loadClass(ClassLoader.java:357)at java.lang.Class.forName0(Native Method)at java.lang.Class.forName(Class.java:264)at org.apache.hive.beeline.HiveSchemaHelper.getConnectionToMetastore(HiveSchemaHelper.java:70)... 11 more*** schemaTool failed ***
这是hive的lib包中缺少mysql的驱动导致的。我们之前已经把mysql驱动包mysql-connector-java-*-bin.jar放到主节点cm0的/opt中,现在复制一份到/opt/cloudera/parcels/CDH-5.8.0-1.cdh5.8.0.p0.42/lib/hive/lib(这里CDH-5.8.0-1.cdh5.8.0.p0.42要跟自己的版本对应)
使用命令如下
cd /opt/mysql-connector-java-5.1.40cp mysql-connector-java-5.1.40-bin.jar /opt/cloudera/parcels/CDH-5.8.0-1.cdh5.8.0.p0.42/lib/hive/lib把mysql-connector-java-5.1.40-bin.jar放到/opt/cloudera/parcels/CDH-5.8.0-1.cdh5.8.0.p0.42/lib/hive/lib中。 cd /opt/cloudera/parcels/CDH-5.8.0-1.cdh5.8.0.p0.42/lib/hive/libls|more确认已经放进去了。
然后点击右下角的重试。
可能遇到的问题---启动 Oozie, Impala---Create Oozie Database Tables 失败
Error: Could not connect to the database: java.lang.ClassNotFoundException: com.mysql.jdbc.DriverStack trace for the error was (for debug purposes):--------------------------------------java.lang.Exception: Could not connect to the database: java.lang.ClassNotFoundException: com.mysql.jdbc.Driverat org.apache.oozie.tools.OozieDBCLI.validateConnection(OozieDBCLI.java:905)at org.apache.oozie.tools.OozieDBCLI.createDB(OozieDBCLI.java:185)at org.apache.oozie.tools.OozieDBCLI.run(OozieDBCLI.java:129)at org.apache.oozie.tools.OozieDBCLI.main(OozieDBCLI.java:80)Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driverat java.net.URLClassLoader.findClass(URLClassLoader.java:381)at java.lang.ClassLoader.loadClass(ClassLoader.java:424)at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)at java.lang.ClassLoader.loadClass(ClassLoader.java:357)at java.lang.Class.forName0(Native Method)at java.lang.Class.forName(Class.java:264)at org.apache.oozie.tools.OozieDBCLI.createConnection(OozieDBCLI.java:894)at org.apache.oozie.tools.OozieDBCLI.validateConnection(OozieDBCLI.java:901)... 3 more--------------------------------------
+ '[' 0 = 1 ']'+ '[' CLOUDERA_MYSQL_CONNECTOR_JAR '!=' '' ']'+ eval 'JAR_LOCATION=$CLOUDERA_MYSQL_CONNECTOR_JAR'++ JAR_LOCATION=/usr/share/java/mysql-connector-java.jar+ echo 'Copying JDBC jar from /usr/share/java/mysql-connector-java.jar to /var/lib/oozie'+ cp /usr/share/java/mysql-connector-java.jar /var/lib/oozie/cp: cannot stat `/usr/share/java/mysql-connector-java.jar': No such file or directory+ OOZIECPPATH=
跟hive启动的问题一样,缺少驱动。
Oozie的lib包中缺少mysql的驱动导致的。我们之前已经把mysql驱动包mysql-connector-java-*-bin.jar放到主节点cm0的/opt中,现在复制一份到/opt/cloudera/parcels/CDH-5.8.0-1.cdh5.8.0.p0.42/lib/Oozie/lib(这里CDH-5.8.0-1.cdh5.8.0.p0.42要跟自己的版本对应)
再复制一份到/var/lib/oozie/
使用命令如下把mysql-connector-java-5.1.40-bin.jar放到/opt/cloudera/parcels/CDH-5.8.0-1.cdh5.8.0.p0.42/lib/oozie/lib中。
cd /opt/mysql-connector-java-5.1.40
cp mysql-connector-java-5.1.40-bin.jar /opt/cloudera/parcels/CDH-5.8.0-1.cdh5.8.0.p0.42/lib/oozie/lib
cp mysql-connector-java-5.1.40-bin.jar /var/lib/oozie
cd /opt/cloudera/parcels/CDH-5.8.0-1.cdh5.8.0.p0.42/lib/oozie/lib
ls|more
确认已经放进去了。
cd /var/lib/oozie
ls|more
点击右下角重试。
安装完成
恭喜您,安装完成。
点击完成后会进入监控界面。如果有红色的话,还是需要我们去解决的。。。
主机报错是没有启动ntpd服务或者是cm客户端没启用。
每台机器都执行如下命令启动ntpd并设置为开机启动
[root@cdh1 ~]# systemctl start ntpd
[root@cdh1 ~]# systemctl enable ntpd
如果还不行,就打开主机的抑制功能,如下图:
然后主机报错的就排查了。
其他服务错误,启动一下试试,如果重启不行就按照下面文章的方法排查错误。
具体排查的情况可以参考文章或者自己查资料。
hadoop基础----hadoop实战(九)-----hadoop管理工具---CDH的错误排查(持续更新)
全部解决后就全绿了。
备份安装配置完好的系统
到这里我们的安装就算完成了。为了以后的修复方便,我们可以对分别对linux系统进行备份。虚拟机的就很方便,直接复制压缩虚拟机文件即可。
参考文章:https://www.cnblogs.com/felixzh/p/9082344.html