本文将讲解在Linux下以伪分布模式配置Hadoop,网上的方案大致都试了试,期间各种报错,现在解决了,所以整理一版本人觉得比较简洁的方案出来。
1. Hadoop简介
Hadoop是一个由Apache基金会所开发的分布式系统基础架构,用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
既然Hadoop能处理海量处理,那么,肯定有一个存储过程和处理过程。即,Hadoop的框架最核心的设计就是:HDFS和MapReduce。
- 存储
分布式文件系统:HDFS,hadoop distributed file system. - 运算
mapreduce : map + reduce
下面将讲解Hadoop的伪分布配置模式。
2. 伪分布模式
伪分布式模式下,Hadoop将所有进程运行于同一台主机上,但此时Hadoop将使用分布式文件系统,而且各jobs也是由JobTracker服务管理的独立进程。同时,由于伪分布式的Hadoop集群只有一个节点,因此HDFS的块复制将限制为单个副本,其secondary-master和slave也都将运行于本地主机。此种模式除了并非真正意义的分布式之外,其程序执行逻辑完全类似于完全分布式,因此,常用于开发人员测试程序执行。
hadoop的配置共有四种级别:集群、进程、作业和单独操作,前两类由集群管理员负责配置,后面的两类则属于程序员的工作范畴。
hadoop的配置文件位于conf目录中,其中的core-site.xml、mapred-site.xml和hdfs-site.xml三个配置文件最为关键。core-site.xml用于配置hadoop集群的特性,它作用于全部进程及客户端,mapred-site.xml配置mapreduce集群的工作属性,hdfs-site.xml配置hdfs集群的工作属性。
3. 配置hadoop文件
首先进入目录:
编辑core-site.xml文件:
sudo vim core-site.xml
修改为如下内容(这里是设置主机名称和地址和tmp目录的位置)
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/soft/hadoop/hadoop-2.7.4/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
编辑hdfs-site.xml文件:
sudo vim hdfs-site.xml
修改为如下内容(设置副本数量,伪分布为1,并设置datanode和namenode的目录路):
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/soft/hadoop/hadoop-2.7.4/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/soft/hadoop/hadoop-2.7.4/tmp/dfs/data</value>
</property>
</configuration>
编辑mapred-site.xml文件:
sudo vim mapred-site.xml
修改为如下内容
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
<property>
<name>mapred.local.dir</name>
<value>/usr/soft/hadoop/hadoop-2.7.4/tmpdir/mapred/local</value>
</property>
<property>
<name>mapred.system.dir</name>
<value>/usr/soft/hadoop/hadoop-2.7.4/tmpdir/mapred/system</value>
</property>
</configuration>
编辑yarn-site.xml 文件:
sudo vim yarn-site.xml
修改为如下内容
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
4. 配置SSH
在伪分布模式下,如果要启动守护进程,我们就需要配置SSH。SSH命令的作用就是由于不同计算机间通信需要一个认证过程,配置ssh免密码登录,可以方便计算机间的相互通信,不必每次通信都进行输入密钥进行认证。
首先,先确认SSH是否安装
发现已经有SSH了,这是因为Ubuntu会自带SSH,但是它不是服务器版的,所以我们得手动安装:
sudo apt-get install ssh
安装上后,可以通过一个指令查看执行文件
which ssh-keygen
然后,为了数据传输更加安全,我们需要生成秘钥,对数据进行加密。
使用下面命令生成一对秘钥,增加主机之间数据传输的安全性:
ssh-keygen -t rsa -P ” -f ~/.ssh/id_rsa (rsa就是加密方式,~/.ssh是秘钥存放路径)
可以查看秘钥是否生成成功:
其中,id_rsa是私钥,id_rsa.pub是公钥。(我是之前就做好的,所以其他两个文件先不用管)
下面,对公钥进行授权:
cat id_rsa.pub >> authorized_keys
也就是说,经过认证的公钥都会存储在一个文件夹(authorized_keys)中,只有从这个文件夹中的公钥发出来的请求,才无需登录。
第一次登录会提示是否继续连接:
此时,我们已经通过SSH以远程的方式登录到了本机。并且会在文件夹中生成known_hosts文件夹,存放已经感知到的主机。
5. 启动守护进程
首先,需要格式化文件系统,回到hadoop目录下执行:
bin/hadoop namenode -format
再开启所有守护进程
./sbin/
期间,可能会报错,显示没有创建文件的权限,则需要修改hadoop文件权限
chmod -R 777 hadoop-2.7.4
最后,使用jps命令查看守护进程
如果出现namenode,datanode和secondarynamenode则说明成功。我们也可以通过网页的形式查看守护进程是否配置成功:
通过http://localhost:50070 访问namenode,如果出现下面情况,则说明namenode成功开启:
通过http://localhost:8088 访问资源管理器界面:
下面,我们可以查看HDFS目录,此时,我们需要配置Hadoop环境变量,如果不配置的话,它会默认显示下面的本地文件信息:
所以,我们先设置环境变量export HADOOP_CONF_DIR=$HADOOP_INSTALL/etc/hadoop
其中,HADOOP_INSTALL为Hadoop的安装目录。(有人会命名为HADOOP_HOME)
然后,可以通过下面命令查看HDFS目录
hadoop fs -ls /
由于我们之前格式化了HDFS,此处,应该显示空的,由于我之间创建了一个文件,所以解释下。
我们可以通过 fd -mkdir 文件名 创建文件。
最后,可以通过下面命令停掉所有进程
./sbin/