记一次蜜汁BUG

hadoop任务出错

但是看userlog下无日志
追查好久后发现任务结束居然会自动删container的日志,MDZZ

然后使用watch -n 'cp -r ./* ..'把日志考出去

发现错误日志如下

????黑人问号,不过总算找到问题根源了
但是Insights.Ginkgo.2:35639这个地址咋了??
网上说是没配置jobhistory的地址,但是这个服务器是克隆的镜像啊,之前也没配置过啊
在mapred-site.xml加上下面的配置

搜了下这个名字在hadoop配置文件没找到
查了下当前主机hostname是Insights
而/etc/hosts写的是
127.0.0.1 localhost
127.0.1.1 Insights.Ginkgo.2 Insights

尝试改成这样重启hadoop再试
127.0.0.1 localhost
127.0.1.1 Insights Insights.Ginkgo.2

成功了!!!不过不知道是哪个影响的,需要后续再确认下

另外Insights数据分析配置中override.cfg,新的配置格式有点变化

注意pattern和source变成了json,反斜杠要转义一次的,但是也不能写\\\\否则读到pathutil.py中的正则会多一层转义,要写成图中的样子,这格式是re包的正则,不是shell中的正则,所以开头是.*不是*

CDH5性能调优

为了增加pipeline的运算速度,所以利用集群来进行日志的分析统计。测试数据规模:某机构edX的D版在真实场景下一年多使用记录。
开始日期 2016/11/27
开始时间 2:26:00
结束日期 2016/11/28
结束时间 3:34:00
总时间 23:10:54
日志开始日期 2015/6/7
日志结束日期 2016/11/24
在没有任何设置的情况下,运行完所有任务的时间如上表。。。。将近一天的时间=-=太慢了。
经过不断的尝试、分析如下:
慢的原因是每个任务都会有很多的map和reduce任务生成、而每个mapreduce任务都会占用一个worker节点的容器、每个服务器能申请到的容器数量和每个mapreduce占用的内存CPU资源,决定了同时运行的容器数量。
所以,想提高速度,就要尽可能多的让每个mapreduce节省内存、让容器的大小和mapreduce任务所需内存大小尽可能相等。
以我实验的集群规模为例进行参数设置方法。
1.资源计算
3台worker服务器,每个服务器CPU有8个core,16GB内存。
所以一共有24个CPU核心、48GB内存
虚拟cpu系数定为2,每个服务器预留两个核心给操作系统
所以每个服务器CPU vcore数量为8 * 2 – 2 = 14
内存留8G给操作系统,剩下12GB给Container
所以总memory为12 * 3 = 36GB
2.参数配置
需要配置YARN的参数如下(均为CDH5中YARN2的配置)
yarn.app.mapreduce.am.resource.mb 1024//这是Resource Manager需要的内存、我给了1G
yarn.app.mapreduce.am.resource.cpu-vcores 2//这是Resource Manager需要的CPU、我给了2
ApplicationMaster Java 最大堆栈 819.2 //这个数字是yarn.app.mapreduce.am.resource.mb * 0.8得到的
mapreduce.map.memory.mb 640 //这个是每个map任务需要的内存,实测在512时候会有个reduce任务失败,所以给了600多
mapreduce.map.cpu.vcores 2 //这个是每个map任务需要的CPU
mapreduce.reduce.memory.mb 640 //这个是每个reduce任务需要的内
mapreduce.reduce.cpu.vcores 2 //这个是每个reduce任务需要的CPU
mapreduce.map.java.opts.max.heap 512 //这是mapreduce.map.memory.mb * 0.8得到的
mapreduce.reduce.java.opts.max.heap 512 //这是mapreduce.reduce.memory.mb * 0.8得到的
客户端 Java 堆大小(字节) 512 //这里的客户端指的是yarn客户端的大小
JobHistory Server 的 Java 堆栈大小(字节) 1024
NodeManager 的 Java 堆栈大小(字节) 512
yarn.nodemanager.resource.memory-mb 12288 //这个是刚刚说的12G
yarn.nodemanager.resource.cpu-vcores 14 //这是刚刚说的14个vcore
ResourceManager 的 Java 堆栈大小(字节) 1024
yarn.scheduler.minimum-allocation-mb 1024 //一个容器最小内存占用
yarn.scheduler.increment-allocation-mb 128 //一个容器每次多申请多少内存
yarn.scheduler.maximum-allocation-mb 2048 //一个容器最大内存占用
yarn.scheduler.minimum-allocation-vcores 1 //一个容器最小CPU占用
yarn.scheduler.increment-allocation-vcores 1 //一个容器每次多申请多少CPU
yarn.scheduler.maximum-allocation-vcores 4 //一个容器最大内存占用

这样配置的实验结果时间为
开始日期 2016/12/2
开始时间 12:02:00
结束日期 2016/12/2
结束时间 15:34:00
总时间 3:06:50
日志开始日期 2015/6/7
日志结束日期 2016/11/24

比最开始节省了很多时间。。。因为同时在运行的container增加了,所以速度也变快了。
问题:发现map任务的数量每次处理的数据并不多,能不能合并一些数据,而不是每个map只处理一个文件?并且内存占用我觉得还可以在省一些,因为每个map的数据量不是很大。。。待解决=-=

CDH5使用准备

前言

本次搭建CDH主要用于edX的数据分析,用于安装pipeline加快运算速度。

架构设计

3+N结构,3台主机负责HDFS主节点、CDH自身服务、YARN的ResourceManager等主要服务。 其他N台负责HDFS的NameNode和YARN的NodeManager,承担计算任务。现初步设计为6台、即3+3

硬件配置

主节点

CPU:双核E5*4
内存:16G

工作节点

CPU :双核E5*4
内存:16G

操作系统

Ubuntu 14.04 64位

准备工作

hostname、hosts

每台hostname统一前缀,我写的是hadoop。域名有dns的情况下使用dns更方便。
sudo vim /etc/hostname
sudo vim /etc/hosts

127.0.0.1 localhost
IP1 hadoop1.xxx.cn hadoop1
IP2 hadoop2.xxx.cn hadoop2
IP3 hadoop3.xxx.cn hadoop3
IP4 hadoop4.xxx.cn hadoop4
IP5 hadoop5.xxx.cn hadoop5
IP6 hadoop6.xxx.cn hadoop6

关闭防火墙

sudo ufw disable
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -F
sudo apt-get remove iptables

配置网络

sudo vim /etc/sysctl.conf

在最后添加
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf.eth0.disable_ipv6 = 1
vm.swappiness = 10

然后运行sudo sysctl -p

配置CDH库

安装Apache
sudo apt-get install apache2

从官网下载CDH的库并解压到/var/www/html/cm
从官网下载CDH的parcels并解压到/var/www/html/CDH

配置ssh

切换到root下生成密钥和公钥并添加信任
sudo su
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

添加本地库

sudo vim /etc/apt/sources.list.d/my-private-cloudera-repo.list
添加以下内容

deb [arch=amd64] http://这里替换IP/cm trusty-cm5.0.0 contrib
deb [arch=amd64] http://这里替换IP/cm trusty-cm5.7.0 contrib
deb [arch=amd64] http://这里替换IP/cm trusty-cm5.7 contrib

添加信任
curl -s http://这里替换IP/cm/archive.key | sudo apt-key add -

下载安装程序开始安装

wget https://archive.cloudera.com/cm5/installer/latest/cloudera-manager-installer.bin
sudo chmod u+x ./cloudera-manager-installer.bin
sudo ./cloudera-manager-installer.bin --skip_repo_package=1

如果报错查看/var/log下的错误日志

初始化集群

访问http://这里替换IP:7180执行安装向导
安装成功后即可开始使用

扩展集群

为了方便其他学校使用,遂制作了单节点镜像、安装了所有最基本的CDH角色。内存要求32G、CPU要求8核以上。镜像中已经做完了之前说的所有工作,可直接使用。
扩展节点时裸机要求和之前写的一样、做到下载安装程序之前就可以了(也要给root添加公钥信任),之后通过主节点添加角色实例即可。在主节点的apt缓存中有下载好的5.7.0所有安装包,可直接拷贝加快安装速度。路径:/var/cache/apt/archives