没有他们,什么AI、BI和BD都是空中楼阁!—–hadoop、spark、CM、CDH之数据构架实务

1403b2d428a271294149e662f548726c

写在最前面:

目前技术生态基础,无论大数据分析、BI或AI,也无论OLTP或者OLAP,都无一例外的指向分布式并行计算,同时也无一列外的指向了“文件系统和数据计算方法”,要解开这些问题和企业实际操作都必须处理好系统层面、分布式存储和分布式运算问题,目前,能够提供底层解决方案的,在国内最流行的是hadoop及其生态系统,本文就从实操层面来说明一下(含实际即决方案):

技术参考文档和地址:

#阿里云博客之使用yum源安装CDH HADOOP集群文章

https://yq.aliyun.com/articles/26407

#cdh的clouder manager安装和下载

http://www.cnblogs.com/jasondan/p/4011153.html        //完全安装

http://archive.cloudera.com/cm5/cm/5/    //cdh-manage下载

#cdh的hadoop的下载地址:

http://archive.cloudera.com/cdh5/cdh/5/      //cdh5   hadoop2

http://archive.cloudera.com/cdh/       //cdh0.20    hadoop1

hadoop基本分类:

hadoop主要有两个支线,1.0版和2.0版,具有非常不一样的功能和组件,需要根据自己的需要选择定位。

#两个支线:

hadoop=HDFS+MapReduce

hadoop0.20—>hadoop1.*

hadoop0.23—>hadoop2.*

#要构建完整的Hadoop生态,请参考以下的图示选型:

#学习和掌握流程:企业级应用一般至少20个机器才使用

HDFS集群—>MapReduce集群—>HBASE(zookeeper)—>Hive—>sqoop—>spark—>flume/scribe/chukwa

#openstack是否可以支撑hadoop,一般不建议如此,主要是hadoop处理数据,对于磁盘iops的要求比较高,对于cpu的开销也比较大比较快,目前一般都是一群物理机集中给Hadoop使用;相反hadoop也很少用来跑openstack,主要是

HDFS不支持文件修改。(HDFS特性是可以读,可以追加,但不支持修改HDFS上的数据)

#hadoop 2.0伪分布式搭建

hadoop是基于分布式集群的,所以Hadoop主要为分布式,不过为了学习和研究需要,往往只能在一台机器上使用,那就是Hadoop伪分布式,伪分布式实际还是按照完全分布式思想构建,以下是伪分布式搭建方法:

#搭建hadoop伪分布式环境

#准备:软硬件环境:CentOS 7.2 64位、OpenJDK-1.8、Hadoop-2.7.1

yum install java-1.8.0-openjdk* -y

#从http://hadoop.apache.org/releases.html 找到一个你想要的版本,

wget http://apache.claz.org/hadoop/common/hadoop-2.7.1/hadoop-2.7.1.tar.gz

tar zxf hadoop-2.7.1.tar.gz

#安装SSH:

sudo yum install openssh-clients openssh-server

ssh localhost       #测试ssh;输入root账户的密码,如果可以正常登录,则说明SSH安装没有问题。测试正常后使用exit命令退出ssh。

#使用yum来安装1.8版本OpenJDK:

sudo yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel            #安装完成后,输入java和javac命令,如果能输出对应的命令帮助,则表明jdk已正确安装。

#配置 JAVA 环境变量;执行命令: 编辑 ~/.bashrc,在结尾追加:

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk.x86_64

#保存文件后执行下面命令使JAVA_HOME环境变量生效:

source ~/.bashrc

#为了检测系统中JAVA环境是否已经正确配置并生效,可以分别执行下面命令:若两条命令输出的结果一致,且都为我们前面安装的openjdk-1.8.0的版本,则表明JDK环境已经正确安装并配置。

java -version

$JAVA_HOME/bin/java -version

#安装 Hadoop

wget http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.7.1/hadoop-2.7.1.tar.gz

#将Hadoop安装到/usr/local目录下:

tar -zxf hadoop-2.7.1.tar.gz -C /usr/local

#对安装的目录进行重命名,便于后续操作方便:

cd /usr/local

mv ./hadoop-2.7.1/ ./hadoop

#检查Hadoop是否已经正确安装:

/usr/local/hadoop/bin/hadoop version        #如果成功输出hadoop的版本信息,表明hadoop已经成功安装。

#Hadoop 伪分布式环境配置    Hadoop伪分布式模式使用多个守护线程模拟分布的伪分布运行模式。

#设置 Hadoop 的环境变量    编辑 ~/.bashrc,在结尾追加如下内容:

export HADOOP_HOME=/usr/local/hadoop

export HADOOP_INSTALL=$HADOOP_HOME

export HADOOP_MAPRED_HOME=$HADOOP_HOME

export HADOOP_COMMON_HOME=$HADOOP_HOME

export HADOOP_HDFS_HOME=$HADOOP_HOME

export YARN_HOME=$HADOOP_HOME

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

#使Hadoop环境变量配置生效:

source ~/.bashrc

#修改 Hadoop 的配置文件    Hadoop的配置文件位于安装目录的/etc/hadoop目录下,在本教程中即位于/url/local/hadoop/etc/hadoop目录下,需要修改的配置文件为如下两个:

/usr/local/hadoop/etc/hadoop/core-site.xml

/usr/local/hadoop/etc/hadoop/hdfs-site.xml

#编辑 core-site.xml,修改<configuration></configuration>节点的内容为如下所示:

<configuration>

<property>

<name>hadoop.tmp.dir</name>

<value>file:/usr/local/hadoop/tmp</value>

<description>location to store temporary files</description>

</property>

<property>

<name>fs.defaultFS</name>

<value>hdfs://localhost:9000</value>

</property>

</configuration>

#同理,编辑 hdfs-site.xml,修改<configuration></configuration>节点的内容为如下所示:

<configuration>

<property>

<name>dfs.replication</name>

<value>1</value>

</property>

<property>

<name>dfs.namenode.name.dir</name>

<value>file:/usr/local/hadoop/tmp/dfs/name</value>

</property>

<property>

<name>dfs.datanode.data.dir</name>

<value>file:/usr/local/hadoop/tmp/dfs/data</value>

</property>

</configuration>

#格式化 NameNode

/usr/local/hadoop/bin/hdfs namenode -format

#在输出信息中看到如下信息,则表示格式化成功:

Storage directory /usr/local/hadoop/tmp/dfs/name has been successfully formatted.

Exiting with status 0

#启动 NameNode 和 DataNode 守护进程

/usr/local/hadoop/sbin/start-dfs.sh         #执行过程中会提示输入用户密码,输入root用户密码即可。另外,启动时ssh会显示警告提示是否继续连接,输入yes即可。

#检查 NameNode 和 DataNode 是否正常启动:

jps

#如果NameNode和DataNode已经正常启动,会显示NameNode、DataNode和SecondaryNameNode的进程信息:

$ jps

3689 SecondaryNameNode

3520 DataNode

3800 Jps

3393 NameNode

#运行 Hadoop 伪分布式实例       Hadoop自带了丰富的例子,包括 wordcount、grep、sort 等。下面我们将以grep例子为教程,输入一批文件,从中筛选出符合正则表达式dfs[a-z.]+的单词并统计出现的次数。

#查看 Hadoop 自带的例子        Hadoop 附带了丰富的例子, 执行下面命令可以查看:

cd /usr/local/hadoop

./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar

#在 HDFS 中创建用户目录         在 HDFS 中创建用户目录 hadoop:

/usr/local/hadoop/bin/hdfs dfs -mkdir -p /user/hadoop

#准备实验数据             本教程中,我们将以 Hadoop 所有的 xml 配置文件作为输入数据来完成实验。执行下面命令在 HDFS 中新建一个 input 文件夹并将 hadoop 配置文件上传到该文件夹下:

cd /usr/local/hadoop

./bin/hdfs dfs -mkdir /user/hadoop/input

./bin/hdfs dfs -put ./etc/hadoop/*.xml /user/hadoop/input

#使用下面命令可以查看刚刚上传到 HDFS 的文件:

/usr/local/hadoop/bin/hdfs dfs -ls /user/hadoop/input

#运行实验

cd /usr/local/hadoop

./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar grep /user/hadoop/input /user/hadoop/output ‘dfs[a-z.]+’

#上述命令以 HDFS 文件系统中的 input 为输入数据来运行 Hadoop 自带的 grep 程序,提取其中符合正则表达式 dfs[a-z.]+ 的数据并进行次数统计,将结果输出到 HDFS 文件系统的 output 文件夹下。

#查看运行结果     上述例子完成后的结果保存在 HDFS 中,通过下面命令查看结果:

/usr/local/hadoop/bin/hdfs dfs -cat /user/hadoop/output/*

#如果运行成功,可以看到如下结果:

1       dfsadmin

1       dfs.replication

1       dfs.namenode.name.dir

1       dfs.datanode.data.dir

#删除 HDFS 上的输出结果

/usr/local/hadoop/bin/hdfs dfs -rm -r /user/hadoop/output           #运行 Hadoop 程序时,为了防止覆盖结果,程序指定的输出目录不能存在,否则会提示错误,因此在下次运行前需要先删除输出目录。

#关闭 Hadoop 进程

/usr/local/hadoop/sbin/stop-dfs.sh

#再起启动只需要执行下面命令:

/usr/local/hadoop/sbin/start-dfs.sh

#CDH安装时默认:

username: cloudera

password: cloudera

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

企业级hadoop和spark使用实战认知:

hadoop主要有两个模块:文件系统模块HDFS和运算模块MapReduce(简称MR),HDFS解决读写和分布式存储问题,MR解决运算输入和运算输出,MR实际属于IO型运算,对比spark,spark实际属于内存运算,这两者有很多不同,需要分开认识,具体仅从使用层看,spark的方法比较单纯,适合于算法模型师和数据分析师,与本片架构不是一个范畴。spark的安装比较简单(略)。

hadoop\yarn\hive\hbase\impala

#hadoop 1.0 主要组件:

#hadoop 2.0 主要组件:

#企业级大数据分析阶段划分:

#大数据的技能图谱

# 企业级大数据应用主要架构现状:

#主要的企业级大数据分析两个例子:

#大数据应用选型:

#大数据仓库的主要指标:TPC-H

#构件仓库的主要指标考量:

#企业级hadoop集群部署要点:

#hadoop任务调度

#hadoop集群监控

#hadoop集群的问题

#hadoop的DBA是个高级的角色:

#必要的工具

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

集成式使用hadoop生态全工具:

离线安装Cloudera Manager 5和CDH5(最新版5.11.1) 完全教程  (以下方法为参考方法)

#安装CDH和cloudera manage的方案:

官方共给出了3中安装方式:第一种方法必须要求所有机器都能连网,由于最近各种国外的网站被墙的厉害,我尝试了几次各种超时错误,巨耽误时间不说,一旦失败,重装非常痛苦。第二种方法下载很多包。第三种方法对系统侵入性最小,最大优点可实现全离线安装,而且重装什么的都非常方便。后期的集群统一包升级也非常好。这也是我之所以选择离线安装的原因。

基于离线安装的方法可根据自己的实际需要来选择,前期要点有两个:jdk安装和本地yum源;jdk建议选择rpm和openjdk,版本1.8以上,RPM源安装最好在本地有准备好的rpm包,JAVA_HOME对于openjdk的需要设置成/user,rpm包的设置成/usr/java/**即可。

#CM和CDH的离线安装方法:

1、系统环境:centos6,准备两个以上centos6的系统

2、下载四个:cloudera manager 、 CDH安装包2个 、 mysql_connecter

#cm5.11.1

http://archive.cloudera.com/cm5/cm/5/cloudera-manager-el6-cm5.11.1_x86_64.tar.gz

#cdh

http://archive.cloudera.com/cdh5/parcels/5.11.1/CDH-5.11.1-1.cdh5.11.1.p0.4-el6.parcel

http://archive.cloudera.com/cdh5/parcels/5.11.1/CDH-5.11.1-1.cdh5.11.1.p0.4-el6.parcel.sha1

#mysql_connect

https://dev.mysql.com/downloads/connector/j/

3、系统准备

#网络配置(所有节点)

vi /etc/sysconfig/network修改hostname:

vi /etc/hosts,修改ip与主机名的对应关系:

192.168.1.106 n1

192.168.1.107 n2

192.168.1.108 n3

#打通SSH,设置ssh无密码登陆(所有节点)

在主节点上执行ssh-keygen -t rsa一路回车,生成无密码的密钥对。

将公钥添加到认证文件中:cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys,并设置authorized_keys的访问权限:chmod 600 ~/.ssh/authorized_keys。

scp文件到所有datenode节点:yum install openssh-clients -y

scp ~/.ssh/authorized_keys root@n2:~/.ssh/

测试:在主节点上ssh n2,正常情况下,不需要密码就能直接登陆进去了。

#安装jdk(所有节点),本处使用rpm,CDH5至少需要jdk7以上支持

卸载openjdk,然后安装rpm的jdk

CentOS,自带OpenJdk,不过运行CDH5需要使用Oracle的Jdk,需要Java 7的支持。

卸载自带的OpenJdk,使用rpm -qa | grep java查询java相关的包,使用rpm -e –nodeps 包名卸载之。

去Oracle的官网下载jdk的rpm安装包,并使用rpm -ivh 包名安装之。

由于是rpm包并不需要我们来配置环境变量,我们只需要配置一个全局的JAVA_HOME变量即可,执行命令:

echo “JAVA_HOME=/usr/java/latest/” >> /etc/environment

#安装配置MySql(主节点)

通过yum install mysql-server安装mysql服务器。chkconfig mysqld on设置开机启动,并service mysqld start启动mysql服务,并根据提示设置root的初试密码:mysqladmin -u root password ‘xxxx’。

mysql -uroot -pxxxx进入mysql命令行,创建以下数据库:

#hive

create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

#activity monitor

create database amon DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

设置root授权访问以上所有的数据库:

#授权root用户在主节点拥有所有数据库的访问权限

grant all privileges on *.* to ‘root’@’edu1’ identified by ‘root’ with grant option;

flush privileges;

#关闭防火墙和selinux

注意: 需要在所有的节点上执行,因为涉及到的端口太多了,临时关闭防火墙是为了安装起来更方便,安装完毕后可以根据需要设置防火墙策略,保证集群安全。

关闭防火墙:

service iptables stop (临时关闭)

chkconfig iptables off (重启后生效)

关闭SELINUX(实际安装过程中发现没有关闭也是可以的,不知道会不会有问题,还需进一步进行验证):

setenforce 0 (临时生效)

修改 /etc/selinux/config 下的 SELINUX=disabled (重启后永久生效)

#安装配置NTP服务(所有节点)

集群中所有主机必须保持时间同步,如果时间相差较大会引起各种问题。 具体思路如下:

master节点作为ntp服务器与外界对时中心同步时间,随后对所有datanode节点提供时间同步服务。

所有datanode节点以master节点为基础同步时间。

所有节点安装相关组件:yum install ntp。完成后,配置开机启动:chkconfig ntpd on,检查是否设置成功:chkconfig –list ntpd其中2-5为on状态就代表成功。

主节点配置

在配置之前,先使用ntpdate手动同步一下时间,免得本机与对时中心时间差距太大,使得ntpd不能正常同步。这里选用65.55.56.206作为对时中心,ntpdate -u  time1.aliyun.com

ntp服务只有一个配置文件,配置好了就OK。 这里只给出有用的配置,不需要的配置都用#注掉,这里就不在给出:

driftfile /var/lib/ntp/drift

restrict 127.0.0.1

restrict -6 ::1

restrict default nomodify notrap

server 65.55.56.206 prefer

includefile /etc/ntp/crypto/pw

keys /etc/ntp/keys

配置文件完成,保存退出,启动服务,执行如下命令:service ntpd start

检查是否成功,用ntpstat命令查看同步状态,出现以下状态代表启动成功:

synchronised to NTP server () at stratum 2

time correct to within 74 ms

polling server every 128 s

如果出现异常请等待几分钟,一般等待5-10分钟才能同步。

配置ntp客户端(所有datanode节点)

driftfile /var/lib/ntp/drift

restrict 127.0.0.1restrict -6 ::1restrict default kod nomodify notrap nopeer noquery

restrict -6 default kod nomodify notrap nopeer noquery

#这里是主节点的主机名或者ip

server n1

includefile /etc/ntp/crypto/pw

keys /etc/ntp/keys

ok保存退出,请求服务器前,请先使用ntpdate手动同步一下时间:ntpdate -u n1 (主节点ntp服务器)

这里可能出现同步失败的情况,请不要着急,一般是本地的ntp服务器还没有正常启动,一般需要等待5-10分钟才可以正常同步。启动服务:service ntpd start

因为是连接内网,这次启动等待的时间会比master节点快一些,但是也需要耐心等待一会儿。

#正式安装CDH5、clouder manage、mysql_connect

说明:安装顺序和要点,cm解压到/opt目录出现两个目录:cm-5.11.1和cloudera;然后将mysql_connect.jar放到/opt/cm-5.11.1/share/cmf/lib/中并初始化数据库,并将CDH两个文件放到主节点的/opt/cloudera/parcel-repo/目录中

安装Cloudera Manager Server 和Agent

主节点解压安装

cloudera manager的目录默认位置在/opt下,解压:tar xzvf cloudera-manager*.tar.gz将解压后的cm-5.1.3和cloudera目录放到/opt目录下。

为Cloudera Manager 5建立数据库

首先需要去MySql的官网下载JDBC驱动,http://dev.mysql.com/downloads/connector/j/,解压后,找到mysql-connector-java-5.1.33-bin.jar,放到/opt/cm-5.1.3/share/cmf/lib/中。

在主节点初始化CM5的数据库:

/opt/cm-5.1.3/share/cmf/schema/scm_prepare_database.sh mysql cm -hlocalhost -uroot -pxxxx –scm-host localhost scm scm scm

Agent配置

修改/opt/cm-5.1.3/etc/cloudera-scm-agent/config.ini中的server_host为主节点的主机名。

同步Agent到其他节点

scp -r /opt/cm-5.1.3 root@n2:/opt/

在所有节点创建cloudera-scm用户

useradd –system –home=/opt/cm-5.1.3/run/cloudera-scm-server/ –no-create-home –shell=/bin/false <span style=”vertical-align: middle; font-size: 0.9em; background-image: none; border: none; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; height: auto; overflow-x: auto; background-color: rgb(238, 238, 238); color: rgb(102, 102, 102); font-family: Monaco, Menlo, Consolas, ‘Courier New’, monospace; line-height: 1.5;”–<comment “Cloudera SCM User” cloudera-scm

准备Parcels,用以安装CDH5

将CHD5相关的Parcel包放到主节点的/opt/cloudera/parcel-repo/目录中(parcel-repo需要手动创建)。

相关的文件如下:

  • CDH-5.1.3-1.cdh5.1.3.p0.12-el6.parcel
  • CDH-5.1.3-1.cdh5.1.3.p0.12-el6.parcel.sha1
  • manifest.json

最后将CDH-5.1.3-1.cdh5.1.3.p0.12-el6.parcel.sha1,重命名为CDH-5.1.3-1.cdh5.1.3.p0.12-el6.parcel.sha,这点必须注意,否则,系统会重新下载CDH-5.1.3-1.cdh5.1.3.p0.12-el6.parcel文件。

相关启动脚本

通过/opt/cm-5.1.3/etc/init.d/cloudera-scm-server start启动服务端。

通过/opt/cm-5.1.3/etc/init.d/cloudera-scm-agent start启动Agent服务。

我们启动的其实是个service脚本,需要停止服务将以上的start参数改为stop就可以了,重启是restart。

CDH5的安装配置

Cloudera Manager Server和Agent都启动以后,就可以进行CDH5的安装配置了。

这时可以通过浏览器访问主节点的7180端口测试一下了(由于CM Server的启动需要花点时间,这里可能要等待一会才能访问),默认的用户名和密码均为admin:

#web界面设置:

可以看到,免费版本的CM5已经没有原来50个节点数量的限制了。

各个Agent节点正常启动后,可以在当前管理的主机列表中看到对应的节点。选择要安装的节点,点继续。

接下来,出现以下包名,说明本地Parcel包配置无误,直接点继续就可以了。

点击,继续,如果配置本地Parcel包无误,那么下图中的已下载,应该是瞬间就完成了,然后就是耐心等待分配过程就行了,大约10多分钟吧,取决于内网网速。

接下来是服务器检查,可能会遇到以下问题:

Cloudera 建议将 /proc/sys/vm/swappiness 设置为 0。当前设置为 60。使用 sysctl 命令在运行时更改该设置并编辑 /etc/sysctl.conf 以在重启后保存该设置。您可以继续进行安装,但可能会遇到问题,Cloudera Manager 报告您的主机由于交换运行状况不佳。以下主机受到影响:

通过echo 0 > /proc/sys/vm/swappiness即可解决。

接下来是选择安装服务:

服务配置,一般情况下保持默认就可以了(Cloudera Manager会根据机器的配置自动进行配置,如果需要特殊调整,自行进行设置就可以了):

接下来是数据库的设置,检查通过后就可以进行下一步的操作了:

下面是集群设置的审查页面,我这里都是保持默认配置的:

终于到安装各个服务的地方了,注意,这里安装Hive的时候可能会报错,因为我们使用了MySql作为hive的元数据存储,hive默认没有带mysql的驱动,通过以下命令拷贝一个就行了:

cp /opt/cm-5.1.3/share/cmf/lib/mysql-connector-java-5.1.33-bin.jar /opt/cloudera/parcels/CDH-5.1.3-1.cdh5.1.3.p0.12/lib/hive/lib/

服务的安装过程大约半小时内就可以完成:

安装完成后,就可以进入集群界面看一下集群的当前状况了。

这里可能会出现无法发出查询:对 Service Monitor 的请求超时的错误提示,如果各个组件安装没有问题,一般是因为服务器比较卡导致的,过一会刷新一下页面就好了:

测试

在集群的一台机器上执行以下模拟Pi的示例程序:

sudo -u hdfs hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi 10 100

执行过程需要花一定的时间,通过YARN的后台也可以看到MapReduce的执行状态:

MapReduce执行过程中终端的输出如下:

Number of Maps = 10

Samples per Map = 100

Wrote input for Map #0

Wrote input for Map #1

Wrote input for Map #2

Wrote input for Map #3

Wrote input for Map #4

Wrote input for Map #5

Wrote input for Map #6

Wrote input for Map #7

Wrote input for Map #8

Wrote input for Map #9

Starting Job

14/10/13 01:15:34 INFO client.RMProxy: Connecting to ResourceManager at n1/192.168.1.161:803214/10/13 01:15:36 INFO input.FileInputFormat: Total input paths to process : 1014/10/13 01:15:37 INFO mapreduce.JobSubmitter: number of splits:1014/10/13 01:15:39 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1413132307582_0001

14/10/13 01:15:40 INFO impl.YarnClientImpl: Submitted application application_1413132307582_0001

14/10/13 01:15:40 INFO mapreduce.Job: The url to track the job: http://n1:8088/proxy/application_1413132307582_0001/14/10/13 01:15:40 INFO mapreduce.Job: Running job: job_1413132307582_0001

14/10/13 01:17:13 INFO mapreduce.Job: Job job_1413132307582_0001 running in uber mode : false

14/10/13 01:17:13 INFO mapreduce.Job: map 0% reduce 0%

14/10/13 01:18:02 INFO mapreduce.Job: map 10% reduce 0%

14/10/13 01:18:25 INFO mapreduce.Job: map 20% reduce 0%

14/10/13 01:18:35 INFO mapreduce.Job: map 30% reduce 0%

14/10/13 01:18:45 INFO mapreduce.Job: map 40% reduce 0%

14/10/13 01:18:53 INFO mapreduce.Job: map 50% reduce 0%

14/10/13 01:19:01 INFO mapreduce.Job: map 60% reduce 0%

14/10/13 01:19:09 INFO mapreduce.Job: map 70% reduce 0%

14/10/13 01:19:17 INFO mapreduce.Job: map 80% reduce 0%

14/10/13 01:19:25 INFO mapreduce.Job: map 90% reduce 0%

14/10/13 01:19:33 INFO mapreduce.Job: map 100% reduce 0%

14/10/13 01:19:51 INFO mapreduce.Job: map 100% reduce 100%

14/10/13 01:19:53 INFO mapreduce.Job: Job job_1413132307582_0001 completed successfully

14/10/13 01:19:56 INFO mapreduce.Job: Counters: 49

File System Counters

FILE: Number of bytes read=91

FILE: Number of bytes written=1027765

FILE: Number of read operations=0

FILE: Number of large read operations=0

FILE: Number of write operations=0

HDFS: Number of bytes read=2560

HDFS: Number of bytes written=215

HDFS: Number of read operations=43

HDFS: Number of large read operations=0

HDFS: Number of write operations=3

Job Counters

Launched map tasks=10

Launched reduce tasks=1

Data-local map tasks=10

Total time spent by all maps in occupied slots (ms)=118215

Total time spent by all reduces in occupied slots (ms)=11894

Total time spent by all map tasks (ms)=118215

Total time spent by all reduce tasks (ms)=11894

Total vcore-seconds taken by all map tasks=118215

Total vcore-seconds taken by all reduce tasks=11894

Total megabyte-seconds taken by all map tasks=121052160

Total megabyte-seconds taken by all reduce tasks=12179456

Map-Reduce Framework

Map input records=10

Map output records=20

Map output bytes=180

Map output materialized bytes=340

Input split bytes=1380

Combine input records=0

Combine output records=0

Reduce input groups=2

Reduce shuffle bytes=340

Reduce input records=20

Reduce output records=0

Spilled Records=40

Shuffled Maps =10

Failed Shuffles=0

Merged Map outputs=10

GC time elapsed (ms)=1269

CPU time spent (ms)=9530

Physical memory (bytes) snapshot=3792773120

Virtual memory (bytes) snapshot=16157274112

Total committed heap usage (bytes)=2856624128

Shuffle Errors

BAD_ID=0

CONNECTION=0

IO_ERROR=0

WRONG_LENGTH=0

WRONG_MAP=0

WRONG_REDUCE=0

File Input Format Counters

Bytes Read=1180

File Output Format Counters

Bytes Written=97

Job Finished in 262.659 seconds

Estimated value of Pi is 3.14800000000000000000

检查Hue

首次登陆Hue会让设置一个初试的用户名和密码,设置好,登陆到后台,会做一次检查,一切正常后会提示:

到这里表明我们的集群可以使用了。

遇到的问题

Agent启动后,安装阶段“当前管理的主机”中显示的节点不全,每次刷新显示的都不一样。

Agent的错误日志表现如下:

[18/Nov/2014 21:12:56 +0000] 22681 MainThread agent ERROR Heartbeating to master:7182 failed.

Traceback (most recent call last):

File “/home/opt/cm-5.2.0/lib64/cmf/agent/src/cmf/agent.py”, line 820, in send_heartbeat

response = self.requestor.request(‘heartbeat’, dict(request=heartbeat))

File “/home/opt/cm-5.2.0/lib64/cmf/agent/build/env/lib/python2.6/site-packages/avro-1.6.3-py2.6.egg/avro/ipc.py”, line 139, in request

return self.issue_request(call_request, message_name, request_datum)

File “/home/opt/cm-5.2.0/lib64/cmf/agent/build/env/lib/python2.6/site-packages/avro-1.6.3-py2.6.egg/avro/ipc.py”, line 255, in issue_request

return self.read_call_response(message_name, buffer_decoder)

File “/home/opt/cm-5.2.0/lib64/cmf/agent/build/env/lib/python2.6/site-packages/avro-1.6.3-py2.6.egg/avro/ipc.py”, line 235, in read_call_response

raise self.read_error(writers_schema, readers_schema, decoder)

File “/home/opt/cm-5.2.0/lib64/cmf/agent/build/env/lib/python2.6/site-packages/avro-1.6.3-py2.6.egg/avro/ipc.py”, line 244, in read_error

return AvroRemoteException(datum_reader.read(decoder))

File “/home/opt/cm-5.2.0/lib64/cmf/agent/build/env/lib/python2.6/site-packages/avro-1.6.3-py2.6.egg/avro/io.py”, line 444, in read

return self.read_data(self.writers_schema, self.readers_schema, decoder)

File “/home/opt/cm-5.2.0/lib64/cmf/agent/build/env/lib/python2.6/site-packages/avro-1.6.3-py2.6.egg/avro/io.py”, line 448, in read_data

if not DatumReader.match_schemas(writers_schema, readers_schema):

File “/home/opt/cm-5.2.0/lib64/cmf/agent/build/env/lib/python2.6/site-packages/avro-1.6.3-py2.6.egg/avro/io.py”, line 379, in match_schemas

w_type = writers_schema.type

AttributeError: ‘NoneType’ object has no attribute ‘type’

这是由于在主节点上启动了Agent后,又将Agent scp到了其他节点上导致的,首次启动Agent,它会生成一个uuid,路径为:/opt/cm-5.1.3/lib/cloudera-scm-agent/uuid,这样的话每台机器上的Agent的uuid都是一样的了,就会出现紊乱的情况。

解决方案:

删除/opt/cm-5.1.3/lib/cloudera-scm-agent/目录下的所有文件。

清空主节点CM数据库。

最佳实践

在内网单独搭建yum的repo,然后CM的管理界面安装Agent,这样安装比较快,也不会出现什么问题。

如果手动添加添加Agent的话,需要注意启动之前删除相关的标示文件,否则Server端在数据库中记录Agent的信息,还得清理数据库中的信息,就麻烦了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注