Hadoop平台日志结构

时间:2021-09-01 22:22:25

1.Hadoop集群部署

Hadoop集群:

Master:10.18.18.1

Slave1:10.18.18.100

Slave2:10.18.18.101

可互相通信、可连外网,操作系统均为:

#cat/etc/issue

Ubuntu14.04.4 LTS \n \l

# uname -a

Linux XXX3.13.0-66-generic #108-Ubuntu SMP Wed Oct 7 15:20:27 UTC 2015 x86_64x86_64x86_64 GNU/Linux

1.1Master部署

1)创建用户hadoop

#sudo addgroup hadoop

#sudoadduser--ingroup hadoop hadoop  //password:hadoop

#vi/etc/sudoers  //在root下面增加一行,如下:

hadoop  ALL=(ALL:ALL) ALL

$ls -l /home   //看到有hadoop文件夹。

$su hadoop//切换到hadoop用户

2)jdk安装

#cd/home/hadoop

#ls–ljdk1.8.0_20 //jdk解压并通过cp–r命令复制到/home/hadoop文件夹下

drwxrwxr-x 2hadoophadoop     4096 May 12 11:39 bin

drwxrwxr-x 3hadoophadoop     4096 May 12 11:39include

drwxrwxr-x 5hadoophadoop     4096 May 12 11:39 jre

配置jdk路径

#vi .bashrc

exportJAVA_HOME=/home/hodoop/jdk1.8.0_20

exportJRE_HOME=$JAVA_HOME/jre

exportPATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib

#source.bashrc

#java –version

java version"1.8.0_20"

Java(TM) SERuntime Environment (build 1.8.0_20-b26)

JavaHotSpot(TM) 64-Bit Server VM (build 25.20-b23, mixed mode)

3)SSH免密码

#sudoapt-get install ssh  //安装ssh

#ls–a //看到.ssh文件夹,没有mkdir .ssh创建

#ssh-keygen-t rsa  //提示输入,直接回车

#ls -a .ssh  //.ssh文件下生成密钥对:私钥id_rsa和公钥id_rsa.pub

.  .. id_rsa  id_rsa.pub

#cat.ssh/id_rsa.pub >> .ssh/authorized_keys //追加到授权key中

4)设置主机名及与IP地址映射关系

#sudo vi/etc/hostname  //主机名修改为Master

或者通过#hostname Master

重启生效

#sudo vi/etc/hosts  //映射IP地址

10.18.18.100    Slave1

10.18.18.101    Slave2

10.18.18.1      Master

5)Hadoop安装

下载hadoop-2.7.2.tar.gz解压到/home/hadoop目录下。

#tar -zxvf hadoop-2.7.2.tar.gz

#ls -lhadoop-2.7.2

drwxr-xr-x 2hadoophadoop  4096 Jan 26 08:20 bin

drwxr-xr-x 3hadoophadoop  4096 Jan 26 08:20 etc

drwxr-xr-x 2hadoophadoop  4096 Jan 26 08:20 include

drwxr-xr-x 3hadoophadoop  4096 Jan 26 08:20 lib

drwxr-xr-x 2hadoophadoop  4096 Jan 26 08:20 libexec

-rw-r--r-- 1hadoophadoop 15429 Jan 26 08:20 LICENSE.txt

-rw-r--r-- 1hadoophadoop   101 Jan 26 08:20NOTICE.txt

-rw-r--r-- 1hadoophadoop  1366 Jan 26 08:20README.txt

drwxr-xr-x 2hadoophadoop  4096 Jan 26 08:20 sbin

drwxr-xr-x 4hadoophadoop  4096 Jan 26 08:20 share

如果文件夹所有者非hadoop用户,要授权,命令如下:

#sudochown-R hadoop:hadoop hadoop-2.7.2

#cdhadoop-2.7.2 //进入hadoop目录下增加

#mkdirhdfs

#mkdirhdfs/name

#mkdirhdfs/data

#mkdirhdfs/tmp

#ls -l hdfs

drwxrwxr-x 2hadoophadoop 4096 May 12 16:54 data

drwxrwxr-x 2hadoophadoop 4096 May 12 16:54 name

drwxrwxr-x 2hadoophadoop 4096 May 12 16:54 tmp

6)Hadoop配置

Set1:配置JDK路径

#vi etc/hadoop/hadoop-env.sh

export JAVA_HOME=/home/hadoop/jdk1.8.0_20

#vi etc/hadoop/yarn-env.sh

export JAVA_HOME=/home/hadoop/jdk1.8.0_20

Set2:配置core-site

#vietc/hadoop/core-site.xml

<property>

<name>fs.default.name</name>

<value>hdfs://Master:9000/</value>

</property>

<property>

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

<value>/home/hadoop/hadoop-2.7.2/hdfs/tmp/hadoop-${user.name}</value>

</property>

Set3:配置hdfs-site

#vietc/hadoop/hdfs-site.xml

<property>

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

<value>/home/hadoop/hadoop-2.7.2/hdfs/name</value>

</property>

<property>

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

<value>/home/hadoop/hadoop-2.7.2/hdfs/data</value>

</property>

<property>

<name>dfs.replication</name>

<value>1</value>

</property>

<property>

<name>dfs.namenode.secondary.http-address</name>

<value>Master:9001</value>

</property>

Set4:配置yarn-site

<property>

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

</property>

<property>

<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>

<value>org.apache.hadoop.mapred.ShuffleHandler</value>

</property>

<property>

<name>yarn.resourcemanager.address</name>

<value>Master:8032</value>

</property>

<property>

<name>yarn.resourcemanager.scheduler.address</name>

<value>Master:8030</value>

</property>

<property>

<name>yarn.resourcemanager.resource-tracker.address</name>

<value>Master:8031</value>

</property>

<property>

<name>yarn.resourcemanager.admin.address</name>

<value>Master:8033</value>

</property>

<property>

<name>yarn.resourcemanager.webapp.address</name>

<value>Master:8088</value>

</property>

<property>

<name>yarn.nodemanager.resource.memory-mb</name>

<value>4096</value>

</property>

Set5:配置mapred-site

#vietc/hadoop/mapred-site.xml

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

<property>

<name>mapreduce.jobhistory.address</name>

<value>Master:10020</value>

</property>

<property>

<name>mapreduce.jobhistory.webapp.address</name>

<value>Master:19888</value>

</property>

Set6:配置Slaves

#vietc/hadoop/slaves

加入:Slave1和Slave2作为节点。

1.2Slave部署

1)、2)两个步骤和Master步骤一样,其中jdk文件包可通过scp远程复制。如将master的jdk包复制到Slave1下:#scp-r /home/hadoop/jkd1.8.0_20 hadoop@10.18.18.100:/home/hadoop/

3)步骤安装ssh后,复制master节点生成的文件,如:

$ssh-copy-idhadoop@Slave1

复制在Master服务器测试是否可以免密码登录:

$sshhadoop@Slave1

4)步骤和Master一样,主机名分别设置为Slave1、Slave2,并和Master一样建立映射IP地址。

5)和6)步骤直接将Master上配置好的Hadoop包复制到Slave1和Slave2的/home/hadoop目录下。

#scp -r/home/hadoop/hadoop-2.7.2 hadoop@10.18.18.100:/home/hadoop/

1.3集群启动

Master服务器进入/home/hadoop目录

1)配置HADOOP_HOME

#vi .bashrc

export HADOOP_HOME=/home/hadoop/hadoop-2.7.2

exportPATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/bin

#source.bashrc

2)初始化:

#hdfsnamenode-format

3)启动hdfs集群

进入hadoop-2.7.2目录

#sbin/start-dfs.sh

通过ssh远程连接Master,启动集群出现22端口无法连接。

Master: ssh: connect to host master port 22:Connection refused

#vi /etc/ssh/sshd_config

port配置成22000,增加port端口22

4)启动yarn集群

Master启动resourcemanager

#sbin/yarn-daemon.shstart resourcemanager

Slave启动nodemanager

#sbin/yarn-daemon.shstart nodemanager

5)查看进程

#jps  //master

13616 SecondaryNameNode

13763 Jps

7028ResourceManager

6645NameNode

#jps  //salve

1632 Jps

1285DataNode

1519NodeManager

集群启动和停止也可分别执行sbin/start-all.sh和sbin/stop-all.sh命令。

1.4集群监控

集群监控命令:#hadoopdfsadmin-report

也可通过页面监控:http://master:50070

问题:发现datanode已启动,但网页Live Nodes=0和 DFS=0 B,通过log查了好久,发现master对应的IP地址不是10.18.18.1,推测可能是/etc/hosts的映射出现问题,于是修改/etc/hosts文件,只保留如下四行:

10.18.18.100    Slave1

10.18.18.101    Slave2

10.18.18.1      Master

127.0.0.1       localhost

重新启动集群,可以看到2个节点的信息。

1.5作业执行

Master服务器下提交作业。

#hadoopfs-mkdir /data

#hadoopfs-putLICENSE.txt /data

#hadoop jar

/home/hadoop/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jarwordcount/data /output

#hadoopfs-ls /output

-rw-r--r--   1 hadoopsupergroup          0 2016-05-17 09:49 /output/_SUCCESS

-rw-r--r--   1 hadoopsupergroup       8006 2016-05-17 09:49/output/part-r-00000

#hadoopfs-cat /output/part-r-00000  //看结果

1.6Yarn框架

1)要重点理解下yarn框架,梳理master和slave的组件运作关系:

ResourceManager:RM,YARN的中控模块,负责统一规划资源的使用。

NodeManager:NM,YARN的资源结点模块,负责启动管理container。

ApplicationMaster:AM,YARN中每个应用都会启动一个AM,负责向RM申请资源,请求NM启动container,并告诉container执行的任务内容。

Container:资源容器,YARN中的AM在container上运行的, AM的container向RM申请。

当客户向RM提交作业时,由AM负责向RM提出资源申请,和向NM提出task执行。RM负责资源调度,AM 负责任务调度。RM负责整个集群的资源管理与调度;NM负责单个节点的资源管理与调度;NM定时的通过心跳的形式与RM进行通信,报告节点的健康状态与内存使用情况;AM通过与RM交互获取资源,然后通过与NM交互,启动计算任务。

2)在配置yarn-site.xml和mapred-site.xml时要注意不同集群内存资源配置不同的运行参数。

RM内存资源配置项(yarn-site.xml):

yarn.scheduler.minimum-allocation-mb

yarn.scheduler.maximum-allocation-mb

RM加载的调度器类实例(yarn-site.xml):

yarn.resourcemanager.scheduler.class

值可选:FairScheduler/CapacityScheduler

NM内存资源配置项(yarn-site.xml):

yarn.nodemanager.resource.memory-mb

yarn.nodemanager.vmem-pmem-ratio

AM内存配置项(mapred-site.xml):

mapreduce.map.memory.mb

mapreduce.reduce.memory.mb

JVM参数配置项(mapred-site.xml):

mapreduce.map.java.opts

mapreduce.reduce.java.opts

2.Hive部署

2.1元数据库mysql

Master服务器Hadoop用户:

#sudoapt-get install mysql-server

#mysql -uroot –p

mysql>createdatabase hive;

mysql>grantall on hive.* to hive@'%'  identified by'hive';

mysql>flushprivileges;

下载mysql的JDBC驱动包并复制到Hive的lib目录下。

#cp

mysql-connector-java-5.1.39/mysql-connector-java-5.1.39-bin.jar

apache-hive-2.0.0-bin/lib

2.2Hive安装配置

1)#tar-zxvfapache-hive-2.0.0-bin.tar.gz  //解压到/home/hadoop

2)配置hive环境变量

#vi .bashrc

exportHIVE_HOME=/home/hadoop/apache-hive-2.0.0-bin

exportPATH=$PATH:$HIVE_HOME/bin

exportCLASSPATH=$CLASSPATH.:HIVE_HOME/lib

#source.bashrc

3)配置conf/hive-env.sh文件

复制hive-env.sh.template并命名为hive-env.sh

#mvconf/hive-env.sh.template conf/hive-env.sh

指定HADOOP_HOME及HIVE_CONF_DIR的路径如下:

#viconf/hive-env.sh

HADOOP_HOME=/home/hadoop/hadoop-2.7.2

exportHIVE_CONF_DIR=/home/hadoop/apache-hive-2.0.0-bin/conf

4)新建conf/hive-site.xml文件

<?xmlversion="1.0"?>

<?xml-stylesheettype="text/xsl"href="configuration.xsl"?>

<configuration>

<property>

<name>javax.jdo.option.ConnectionURL</name>

<value>jdbc:mysql://Master:5306/hive</value>

</property>

<property>

<name>javax.jdo.option.ConnectionDriverName</name>

<value>com.mysql.jdbc.Driver</value>

</property>

<property>

<name>javax.jdo.option.ConnectionUserName</name>

<value>hive</value>

</property>

<property>

<name>javax.jdo.option.ConnectionPassword</name>

<value>hive</value>

</property>

<property>

 <name>hive.metastore.local</name>

 <value>true</value>

 </property>

</configuration>

2.3Hive运行

1)初始化:第一次

#schematool-dbTypemysql-initSchema

#schematool-dbTypemysql-info//查看

2)启动Hadoop服务:$sbin/start-all.sh

3)#hive  //运行进入hive

4)查看hive元数据

#mysql -uhive -p

mysql>select*from VERSION;

3.日志结构

Hadoop平台的运维需要从日志从寻找蛛丝马迹,本文试着梳理下Hadoop平台的各类日志,包括生态圈内相关组件。

3.1Linux日志

Linux日志路径:/var/log,记录日志文件是syslogd服务。

syslog的记录一般包含:事件发生的日期和时间、事件发生的主机名、启动时间的服务名、信息内容。日志记录格式如下:

May 1016:34:09 server-128-15 sshd[638]: pam_unix(sshd:session): session opened foruser root by (uid=0)

syslog的配置文件在/etc/rsyslog.conf,规定不同服务的不同等级信息以及记录输出位置(设备或文件),如下:

# Log allthe mail messages in one place.

mail.*                                                  -/var/log/maillog

如果要汇集Linux日志文件到日志文件服务器,则启动日志文件服务器server的514端口,修改/etc/sysconfig/rsyslog文件的SYSLOGD_OPTIONS。对客户端来说,要指定将信息传送到主机上,假设日志文件服务器IP为:192.168.1.10,可在客户端/etc/rsyslog.conf上增加如下一行:

*.*   @192.168.1.10

重新启动服务器和客户端的syslogd服务,就可以在日志文件服务器上看到每行记录上增加了客户端主机名信息。

3.2Hadoop日志

默认日志路径:${HADOOP_HOME}/logs目录,日志的命名均包含用户名称、守护进程名称和本地主机名等信息。

1)Master服务器日志

master中存放以log与out为后缀的两类日志:

log日志文件通过log4j记录的,大部分应用程序的日志消息都写到该日志文件中,故障诊断的首要步骤即为检查该文件;

hadoop-hadoop-namenode-Master.log

hadoop-hadoop-secondarynamenode-Master.log

yarn-hadoop-resourcemanager-Master.log

out日志文件记录标准输出和标准错误日志,由于大多日志均使用log4j输出至log日志文件中,因此文件很小或者为空。系统仅保留最新的5个日志;

hadoop-hadoop-namenode-Master.out

hadoop-hadoop-secondarynamenode-Master.out

yarn-hadoop-resourcemanager-Master.Out

对于SecurityAuth-hadoop.audit日志文件暂不清楚其具体意义。

2)Slave服务器日志

和Master命名规则一致,也是输出log和out为后缀的两类日志:

hadoop-hadoop-datanode-Slave1.log

May 16 16:20hadoop-hadoop-datanode-Slave1.out

同样也有SecurityAuth-hadoop.audit文件。

不同master的是,Slave服务器中还有userlogs文件夹,里面存放着application相关的日志信息。

#ls -llogs/userlogs

drwx--x--- 3hadoophadoop 4096 May 16 15:53 application_1463385140428_0001

drwx--x--- 3hadoophadoop 4096 May 16 14:57 application_1463381663123_0002

drwx--x--- 3hadoophadoop 4096 May 16 14:58 application_1463381663123_0003

3)log日志结构

每行记录基本结构是:日期时间、类型、程序类、信息内容,类型分为:INFO、WARN、ERROR,如下:

2016-05-16 14:13:40,016 INFOorg.apache.hadoop.hdfs.server.namenode.FSNamesystem: fsLock is fair:true

2016-05-13 15:53:41,212 WARNorg.apache.hadoop.hdfs.server.common.Util: Path/home/hadoop/hadoop-2.7.2/hdfs/name should be specified as a URI inconfiguration files. Please update hdfs configuration.

2016-05-13 15:52:51,025 ERRORorg.apache.hadoop.hdfs.server.namenode.NameNode: RECEIVED SIGNAL 15: SIGTERM

4)out日志结构

RM和NM上的基本结构看是:日期时间、组件名、程序类、信息类型、信息内容,如下:

May 17, 2016 9:47:23

AM

com.sun.jersey.guice.spi.container.GuiceComponentProviderFactorygetComponentProvider

INFO:

Bindingorg.apache.hadoop.yarn.server.resourcemanager.webapp.JAXBContextResolver toGuiceManagedComponentProvider with the scope "Singleton"

Namenode和Datanode上貌似是提供程序的资源使用情况,如下:

ulimit -a for user hadoop

core file size          (blocks, -c) 0

dataseg size           (kbytes, -d) unlimited

scheduling priority             (-e) 0

file size               (blocks, -f) unlimited

pending signals                 (-i) 256823

max locked memory       (kbytes, -l) 64

max memory size         (kbytes, -m) unlimited

open files                      (-n) 1024

pipe size            (512 bytes, -p) 8

POSIX message queues     (bytes, -q) 819200

real-time priority              (-r) 0

stack size              (kbytes, -s) 8192

cpu time               (seconds, -t) unlimited

max user processes              (-u) 256823

virtual memory          (kbytes, -v) unlimited

file locks                      (-x) unlimited

3.3Hive日志

Hive中的日志分为两种:系统日志,记录了hive的运行情况、错误状况;Job 日志,记录Hive 中job的执行的历史过程。

1)日志存储位置:

在hive/conf/hive-log4j.properties文件中记录Hive日志的默认存储情况,如下:

# list ofproperties

property.hive.log.level= INFO

property.hive.root.logger= DRFA

property.hive.log.dir= ${sys:java.io.tmpdir}/${sys:user.name}

property.hive.log.file= hive.log

到linux的根目录下/tmp/hadoop查看hive.log文件。

2)#more/tmp/hadoop/hive.log

日志记录结构:日期时间、类型、程序类、信息内容,看出类型有WARN、INFO、FATAL三类,如下:

2016-05-17T12:18:30,617 WARN  [main]: conf.HiveConf(HiveConf.java:initialize(3327)) - HiveConf of name hive.metastore.local doesnot exist

2016-05-17T12:19:09,666 INFO  [973807a9-510f-47a2-acec-4b24489b1e31973807a9-510f-47a2-acec-4b24489b1e31 main]: CliDriver (SessionState.java:printInfo(1007))- Time taken: 1.103 seconds

2016-05-17T11:44:21,969 FATAL [main]:conf.Configuration (Configuration.java:loadResource(2644)) - error parsing conffile:/home/hadoop/apache-hive-2.0.0-bin/conf/hive-site.xml

 

4.总结

Hadoop生态平台存在大量日志,在hadoop运维过程中存在很多盲点,需要采集linux系统syslog以及其上hadoop集群生态组件的日志,加以分析辅助运维。