Hadoop平台日志结构
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集群生態組件的日志,加以分析輔助運維。
總結
以上是生活随笔為你收集整理的Hadoop平台日志结构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql表数据以本地文件方式导入Hiv
- 下一篇: HtmlUnit解析动态网页并采集网页列