Hadoop简介及安装过程
概述:Hadoop是Apache软件基金会旗下的一个开源分布式计算平台,以Hadoop分布式文件
系统(HDFS,Hadoop Distributed Filesystem)和MapReduce(Google MapReduce的开源
实现)为核心的hadoop为用户提供了系统底层细节透明的分布式基础框架。HDFS的高容错
性、高伸缩性等优点允许用户将Hadoop部署在低廉的硬件上,形成分布式系统;MapReduce
分布式编程模型允许用户在不了解分布式系统底层细节的情况下开发并行应用程序。所以
用户可以利用Hadoop轻松地组织计算机资源,从而搭建自己的分布式计算平台,并且可以
充分利用集群的计算和存储能力,完成海量数据的处理。
安装过程:
创建用户组
groupadd hadoop 添加一个组
useradd hadoop -g hadoop 添加用户
IP的配置
vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
TYPE=Ethernet
NETMASK=255.255.255.0
IPADDR=192.168.10.11
USERCTL=no
PEERDNS=yes
GATEWAY=192.168.10.1(路由器的IP地址)
保存退出,重启网卡
$ service network restart
查看ip
$ifconfig
关闭防火墙
$chkconfig iptables off
$iptables -F
$service iptables save
修改主机名
vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=master-1
GATEWAY=192.168.10.11
#其它节点依次修改
配置hosts文件
vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.10.11 master-1
192.168.10.12 master-2
192.168.10.13 slave-1
192.168.10.14 slave-2
语言配置
如果不配置语言,中文打印出来的可能会是乱码,因为Hadoop默认的输出写死的是utf-8
vi /etc/sysconfig/i18n
LANG=en_US.UTF-8
查看修改后的情况
$echo $LANG
en_US.UTF-8
在linux服务器安装Hadoop之前,首先安装两个准备软件
1.JDK1.6或者更高版本,Hadoop 2.7.0仅支持JDK1.7+
2.SSH(安全外壳协议),推荐安装OpenSSH
之所以安装这两个软件,首先Hadoop的编译及MapReduce的运行都需要使用JDK.
其次,Hadoop需要通过SSH来启动slave列表中各台主机的守护进程,因为SSH也是必须安装的。
(1)下载和安装JDK1.7
下载地址:
http://www.oracle.com/technetwork/java/javase/downloads/java-se-jdk-7-download-432154.html 执行安装:
rpm -ivh jdk-7-linux-i586.rpm
配置环境变量:
$vi /etc/profile
在该profile文件中最下面添加:
export JAVA_HOME="/usr/java/jdk1.7.0"
export PATH="$PATH : $JAVA_HOME/bin:$JAVA_HOME/jre/bin:"
export CLASSPATH="$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib"
添加完毕保存退出
$java -version
出现java version "1.7.0"的时候表示安装成功。
(2)SSH免身份登录
进入集群用户 home目录
生成公钥和私钥 主节点到其它节点
ssh-keygen -t rsa
默认在 ~/.ssh目录生成两个文件:
id_rsa :私钥
id_rsa.pub :公钥
导入公钥到认证文件,更改权限
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
首先将公钥复制到其他服务器,主节点向其它节点复制.
scp ~/.ssh/id_rsa.pub xxx@host:/home/xxx/id_rsa.pub
以下命令需要在子节点上操作
cat ~/id_rsa.pub >> ~/.ssh/authorized_key
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
执行完以上几步,主节点主可以和子节点无密码连接了.测试命令
ssh 子节点主机名或ip地址,第一次连接需确认,第二次以后就不用了
(3)安装运行Hadoop
Hadoop分别从三个角度将主机划分为两种角色。第一,划分为master和slave,
即主人与奴隶;第二,从HDFS的角度,将主机划分为NameNode和DataNode;第三,
从MapReduce的角度,将主机划分为JobTracker和TaskTracker。
Hadoop版本方面有官方发行版与cloudera版,其中cloudera版是Hadoop的商用版本。
Hadoop有三种运行方式:单节点方式、单机伪分布方式及全分布方式
解压介质:
$tar zxvf hadoop-2.0.0-cdh4.4.0.tar.gz
增加Hadoop环境变量
$vi .bashrc
HADOOP_HOME=/home/cup/hadoop-2.0.0-cdh4.2.1
HADOOP_MAPRED_HOME=$HADOOP_HOME
HADOOP_COMMON_HOME=$HADOOP_HOME
HADOOP_HDFS_HOME=$HADOOP_HOME
YARN_HOME=$HADOOP_HOME
HADOOP_CONF_HOME=${HADOOP_HOME}/etc/hadoop
YARN_CONF_DIR=${HADOOP_HOME}/etc/hadoop
保存并退出
修改Hadoop配置文件
首先,在hadoop中添加JAVA环境
vi hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.7.0
保存并退出
其次,配置hadoop相关配置文件
$vi core-site.xml
<property>
<name>fs.defaultFS</name> 主节点名字,确定主节点机器
<value>hdfs://master-1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp</value>
</property>
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
$vi hdfs-site.xml
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoop/hadoopworkspace/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/hadoop/hadoopworkspace/dfs/data</value>
</property>
<property>
<name>dfs.replication</name> 备份数量
<value>3</value>
</property>
<property>
<name>dfs.permissions</name> 权限认证(默认false)
<value>false</value>
</property>
$vi mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.job.tracker</name>
<value>hdfs://master-1:9001</value>
<final>true</final>
</property>
<property>
<name>mapreduce.jobtracker.address</name>
<value>master-1:9002</value>
<description>The host and port that the MapReduce job tracker runs
at. If "local", then jobs are run in-process as a single map
and reduce task.
</description>
</property>
<property>
<name>mapred.system.dir</name>
<value>/home/hadoop/hadoopworkspace/mapred/system</value>
<final>true</final>
</property>
<property>
<name>mapred.local.dir</name>
<value>/home/hadoop/hadoopworkspace/mapred/local</value>
<final>true</final>
</property>
$vi yarn-site.xml
<property>
<name>yarn.resourcemanager.address</name>
<value>master-1:8080</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master-1:8081</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master-1:8082</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce.shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
============
配置节点,当然如果要是安装的伪分布模式,slaves可以配置成master-1
$vi slaves
slave-1
slave-2
保存并退出
启动集群
$hdfs namenode -format //格式化文件系统
$bin/start-all.sh
浏览器中输入
http://192.168.10.11:8088可以查看mapreduce集群状态 http://192.168.10.11:50070可以查看hdfs状态
$jps 查看进程
NameNode:
ResourceManager
NameNode
SecondaryNameNode
DataNode:
NodeManager
DataNode
注:有些朋友在构建集群的过程中,可能第一次的时候搭建成功了,然后又修改了某些配置文件、又执行了
hdfs namenode -format,结果发现怎么都启动不了datanode了。
原因:数据节点的namespaceID与NN的namespaceID不一致,namespaceID是文件系统的唯一标识,当文件系统
第一次格式化时便会被创建,这个标识符也要求各DataNode和NameNode保持一致。
解决方案:
修改namespaceID, $vi /hadoop/dfs/data/current/VERSION
#Tue Jul 25 17:31:22 JST 2015 namespaceID=590008784 storageID=DS-230267979-192.168.10.12-50010-1342056014871 cTime=0