hadoop安装
java
一个分布式系统基础架构,由Apache基金会所开发。node
用户能够在不了解分布式底层细节的状况下,开发分布式程序。充分利用集群的威力高速运算和存储。apache
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特色,而且设计用来部署在低廉的(low-cost)硬件上;并且它提供高传输率(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,能够以流的形式访问(streaming access)文件系统中的数据。vim
主节点包括名称节点、从属名称节点和 jobtracker 守护进程(即所谓的主守护进程)以及管理
集群所用的实用程序和浏览器。从节点包括 tasktracker 和数据节点(从属守护进程)。两种设
置的不一样之处在于,主节点包括提供 Hadoop 集群管理和协调的守护进程,而从节点包括实现
Hadoop 文件系统(HDFS)存储功能和 MapReduce 功能(数据处理功能)的守护进程。
每一个守护进程在 Hadoop 框架中的做用。namenode 是 Hadoop 中的主服务器,它管理文件系
统名称空间和对集群中存储的文件的访问。还有一个 secondary namenode,它不是
namenode 的冗余守护进程,而是提供周期检查点和清理任务。在每一个 Hadoop 集群中能够找
到一个 namenode 和一个 secondary namenode。
datanode 管理链接到节点的存储(一个集群中能够有多个节点)。每一个存储数据的节点运行一
个 datanode 守护进程。
每一个集群有一个 jobtracker,它负责调度 datanode 上的工做。每一个 datanode 有一个
tasktracker,它们执行实际工做。jobtracker 和 tasktracker 采用主-从形式,jobtracker 跨
datanode 分发工做,而 tasktracker 执行任务。jobtracker 还检查请求的工做,若是一个
datanode 因为某种缘由失败,jobtracker 会从新调度之前的任务。
浏览器
namenode,JobTracker,SecondaryNameNode server2.example.com安全
datanode,TaskTracker server{3,4,5}.example.com服务器
首先在以上节点配置java环境(个人java安装在/usr/local/jdk下)架构
下来配置hadoop环境框架
[root@server2 hadoop-1.1.2]# mkdir /usr/local/hadoop/ #在全部节点上建立hadoop安装目录 [root@server2 ~]# useradd -u 600 hadoop #在全部节点上建立hadoop用户 [root@server2 hadoop]# tar -zxvf hadoop-1.1.2.tar.gz -C /usr/local/hadoop/ #解压到hadoop安装目录 [root@server2 hadoop]#chown -R hadoop.hadoop /usr/local/hadoop/hadoop-1.1.2/ [hadoop@server2 hadoop-1.1.2]$ vim conf/hadoop-env.sh #指定java环境 |
# The java implementation to use. Required. export JAVA_HOME=/usr/local/jdk # Extra Java CLASSPATH elements. Optional. # export HADOOP_CLASSPATH= |
[hadoop@server2 hadoop-1.1.2]$ vim conf/core-site.xml <configuration> <property> <name>fs.default.name</name> <value>hdfs://192.168.122.2:9000</value>#指定namenode </property> <property> <name>hadoop.tmp.dir</name>#这个指定的是文件系统依赖,觉得hadoop集群的启动会读取里面的数据,默认在/tmp下,这样每次开机重启会丢失 <value>/hadoop/tmp</value> </property> </configuration> [hadoop@server2 hadoop-1.1.2]$ vim conf/hdfs-site.xml <configuration> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.datanode.max.xcievers</name>#指定文件保存的副本数 <value>4096</value> </property> <property> <name>dfs.data.dir</name>#指定datanode存储在哪里,只对datanode起做用 <value>/hadoop/dfs</value> </property> </configuration> [hadoop@server2 hadoop-1.1.2]$ vim conf/mapred-site.xml <configuration> <property> <name>mapred.job.tracker</name> <value>192.168.122.2:9001</value>#指定jobtracker </property> </configuration> [hadoop@server2 hadoop-1.1.2]$ vim conf/masters 192.168.122.2 #指定SecondaryNameNode [hadoop@server2 hadoop-1.1.2]$ vim conf/slaves 192.168.122.3 #指定slave 192.168.122.4 192.168.122.5 ~ 前面咱们指定了hadoop.tmp.dir和dfs.data.dir,因此要建立此目录 [root@server2 hadoop]# mkdir -p /hadoop/tmp/ #在全部节点上执行 [root@server2 hadoop]# mkdir -p /hadoop/dfs/#只在datanode上执行 [root@server2 hadoop]# chown -R hadoop.hadoop /hadoop/#赋予hadoop用户权限
下来就是要保证namenode与全部slave节点进行无密码通讯,这里我用ssh进行无密码通讯ssh
[hadoop@server2 ~]$ ssh-keygen [hadoop@server2 ~]$ ssh-copy-id 192.168.122.3
还有就是就是全部节点必须都有hadoop环境,全部我用nfs共享目录
[hadoop@server2 ~]$ vim /etc/exports /usr/local/hadoop *(rw,sync,anonuid=600,anongid=600) #如下两部操做在全部slave上进行 [hadoop@server3 tmp]$ showmount -e 192.168.122.2 [hadoop@server3 tmp]$ mount 192.168.122.2:/usr/local/hadoop/ /usr/local/hadoop/
下来就是hadoop集群的启动
#首先格式化namenode [hadoop@server2 hadoop-1.1.2]$ bin/hadoop namenode -fromat #下来线启动dfs,再启动mapred [hadoop@server2 hadoop-1.1.2]$ bin/start-dfs.sh [hadoop@server2 hadoop-1.1.2]$ bin/start-mapred.sh #经过jps来查看进程是否启动 [hadoop@server2 hadoop-1.1.2]$ jps#我这里安装了hbase和zookeeper,因此会多出来一些,主要看JobTracker,NameNode,SecondaryNameNode 3960 JobTracker 4302 QuorumPeerMain 3853 SecondaryNameNode 13158 Jps 3696 NameNode 4618 HMaster 8038 Main [hadoop@server3 tmp]$ jps#在slave中查看,主要看TaskTracker和DataNode 2304 HRegionServer 2158 TaskTracker 5124 Jps 1944 DataNode
也能够经过网页查看
分别访问http://192.168.122.2:50030/jobtracker.jsp和http://192.168.122.2:50070/dfshealth.jsp
搭建中遇到的问题
1)有时namenode和JobTracker没法启动,查看日志显示
org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source ugi registered. 2014-04-23 09:34:46,939 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in /hadoop/dfs: namenode namespaceID = 1017690817; datanode namespaceID = 1456060865 at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:232) at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:147) at org.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNode.java:399) at org.apache.hadoop.hdfs.server.datanode.DataNode.
解决办法删除tmp底下的文件,主要是文件/hadoop/tmp/dfs/name/current/VERSION
因此删除掉此目录下的文件,而后对hadoop进行格式化,从新启动
2)namenode没法启动,状况有tmp目录的权限,是否为hadoop用户,还有有时9000端口被占用,因此须要咱们手动去关掉9000端口
3)还有就是hadoop有时启动以后在安全模式下,可是它会在必定时间以后关掉安全模式,若是咱们想当即进行操做,那么咱们须要手动去关掉安全模式
[hadoop@server2 hadoop-1.1.2]$ bin/hadoop dfsadmin -safemode leave
4)不少错误咱们经过日志能够很好的解决