学习之前,先把环境安装好,系统使用的是centos6.5系统,
1、下载hadoop安装包,地址:http://hadoop.apache.org/releases.html
2、解压安装包 tar -zxvf hadoop.tar.gz
3、配置环境变量
(1)因为hadoop是java项目,首先配置java虚拟机的,环境变量中添加JAVA_HOME指向java安装路径,网上可以搜索java的配置;
(2)编辑解压好的hadoop文件,修改配置文件: vi hadoop/etc/hadoop/hadoop-env.sh,添加配置:export JAVA_HOME=/usr/local/jdk1.7.0_67,指向java安装路径
(3)配置hadoop的bin和sbin目录至环境变量中:
export HADOOP_HOME=/usr/local/hadoop-2.7.1
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin
以上环境变量配置好后,可以输入以下命令判断hadoop是否工作:
hadoop version
4、 hadoop文件配置
hadoop 组件均可利用xml文件配置。
core-site.xml 配置通用属性;
hdfs-site.xml 配置hdfs属性;
mapred-site.xml配置mapReduce属性。均放在hadoop/etc/hadoop/中
hadoop 主要有三种运行模式:
(1) 独立(本地)模式,不用运行守护进程,都在一个JVM上,适合开发模式;
(2)伪分布式模式,守护进行运行在本地机器,模拟分布式集群;
(3)全分布式模式,守护进程运行在集群上,
不同模式配置属性
组件名称
|
配置的文件名
| 属性名称 |
独立模式
|
伪分布模式
|
全分布模式
|
Common
|
core-site.xml
|
fs.default,name
|
file:///(默认)
|
hdfs://localhost/
|
hafs://namenode/
|
HDFS
|
hdfs-site.xml
|
dsf.replication
|
N/A
|
1
|
3
|
MapReduce 1
|
mapred-site.xml
|
mapred.job.tracker
|
local(默认)
|
localhost:8021
|
jobtracker:8021
|
YARN(MapReduce 2)
|
yarn-site.xml
|
yarn.resurcemanager.address
|
N/A
|
localhost:8032
| resourcemanager:803 |
默认的属性即为独立模式;
伪分布式模式
配置如下:
core-site.xml:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost</value>
<description>HDFS的URI,文件系统://namenode标识:端口号</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/root/hadoop/hadoop-0.20.2/hadooptmp</value>
<description>namenode上本地的hadoop临时文件夹</description>
</property>
</configuration>
hdfs-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/root/hadoop/hadoop-0.20.2/hdfs/name</value>
<description>namenode上存储hdfs名字空间元数据 </description>
</property>
<property>
<name>dfs.data.dir</name>
<value>/root/hadoop/hadoop-0.20.2/hdfs/data</value>
<description>datanode上数据块的物理存储位置</description>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
<description>副本个数,不配置默认是3,应小于datanode机器数量</description>
</property>
</configuration>
mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:8021</value>
<description>jobtracker标识:端口号,不是URI</description>
</property>
<property>
<name>mapred.local.dir</name>
<value>/root/hadoop/hadoop-0.20.2/mapred/local</value>
<description>tasktracker上执行mapreduce程序时的本地目录</description>
</property>
<property>
<name>mapred.system.dir</name>
<value>/tmp/hadoop/mapred/system</value>
<description>这个是hdfs中的目录,存储执行mr程序时的共享文件</description>
</property>
</configuration>
配置ssh
在伪分布模式下运行时必须启动守护进程,而启动守护进程的前提是已经成功安装SSH。NameNode将使用SSH协议启动DataNode进程,伪分布模式下DataNode和NameNode均是本身,所以必须配置SSH localhost的无密码验证。
首先,确保SSH已经安装,且服务器正在运行。我机器上是默认安装了的,所以这里不谈。
然后,基于空口令创建一个新SSH密钥,以启用无密码登录:
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
用以下指令进行测试:
$ ssh localhost
若成功,这无需输入秘密
注:
ssh localhost 出现报错信息:localhost: ssh: connect to host localhost port 22: Connection refused
该情况一般为 未安装ssh服务,自行查找安装ssh服务的方法(ubuntu中,安装命令为:sudo apt-get install openssh-server )
格式化hdfs系统
使用之前 ,必须先格式化系统,
命令: hadoop namenode -format
启动进程
启动HDFS和MapReduce守护进程,输入一下命令:
$ start-dfs.sh
输出如下(可以看出分别启动了namenode, datanode, secondarynamenode,也给出了日志的存放位置):
localhost: starting namenode, logging to /usr/local/hadoop-2.7.1/logs/hadoop-root-namenode-localhost.localdomain.out
localhost: starting datanode, logging to /usr/local/hadoop-2.7.1/logs/hadoop-root-datanode-localhost.localdomain.out
Starting secondary namenodes [0.0.0.0]
0.0.0.0: starting secondarynamenode, logging to /usr/local/hadoop-2.7.1/logs/hadoop-root-secondarynamenode-localhost.localdomain.out
$ start-yarn.sh 输出如下,可以看出启动了yarn资源管理器和节点管理器,资源管理器的web地址是http://localhost:8088/
starting yarn daemons
starting resourcemanager, logging to /usr/local/hadoop-2.7.1/logs/yarn-song-resourcemanager-localhost.localdomain.out
localhost: starting nodemanager, logging to /usr/local/hadoop-2.7.1/logs/yarn-root-nodemanager-localhost.localdomain.out