赞
踩
要尝试Hadoop,第一步就是要部署一个Hadoop的集群.
之前看官网上的教程,遇到了很多的问题,看博客又零零散散,而且大多基于原来的版本,和现在的目录结构也不同,所以重新整理了一下自己搭建的过程.若有不对之处,还望指正.
建议在root用户下操作
$ groupadd hadoop #创建hadoop用户组
$ useradd -d /usr/hadoop/ -m -g hadoop hadoop #在hadoop组下创建用户hadoop,并分配主目录
$ passwd hadoop #初始化hadoop用户密码
修改/etc/sudoers文件,为Hadoop组用户添加sudo权限
%hadoop ALL=(ALL:ALL) ALL
在/etc/hosts文件中添加集群节点的信息
XXX.XXX.XXX.XXX master
XXX.XXX.XXX.XXX node1
XXX.XXX.XXX.XXX node2
同时可以将/etc/hostname文件中的内容(即当前机器名称)改为master,node1,node2,有助于之后查看日志等时便于区分,该操作重启后方生效.
建议在hadoop用户下操作
JDK不必多说了吧,我想大家应该都很熟练,若真有不懂的,可以去搜搜别的博客,都很全面,给我留言也可以.
Hadoop包下载后,解压放着,先暂且不管.
$ sudo apt-get install ssh
$ sudo apt-get install rsync
在本地生成密钥,将master,node1,node2的公钥添加到/.ssh/authorized_key文件中,一行一个,若是没有该文件,自己生成一个即可.
$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
因为通常我们是在master上启动hadoop,所以只要master上有node1,node2的公钥,就可以免密码登陆node1和node2了,你可以在另外的节点上重复以上操作来实现更多的免密码登陆
建议在系统环境变量中添加一行(即/etc/profile)
export HADOOP_PREFIX=/usr/hadoop/hadoop-2.7.1 #路径为hadoop文件实际所在的路径
加入后source /etc/profile
刷新系统环境变量
这部分讲的都是hadoop目下,etc/hadoop/下的文件,部分是来自官网文档中提到的
修改JAVA_HOME,改成你实际的JDK路径
你可以选择不修改,但若是运行是出现找不到jdk的错误时,再回来修改.
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
配置为NameNode所在的http地址
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
官网介绍
<configuration>
<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>
<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>
<!-- Site specific YARN configuration properties -->
</configuration>

地址都指向master
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>hmaster:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hmaster:19888</value>
</property>
</configuration>
实际上是没有这个文件的,你可以通过复制 mapred-site.xml.template文件生成一个,然后再修改.这么做的原因是,我发现修改 mapred-site.xml.template文件是没有用的,实际上并没有生效,而网上很多前辈都是说,修改 mapred-site.xml文件的,所以我猜测在读取配置的时候读取的是 mapred-site.xml文件,而不是 mapred-site.xml.template文件.至于hadoop为什么放一个 mapred-site.xml.template文件,这就不是很清楚了.
这样改完之后,启动historyserver就可以看到Application了,没改之前,我一直看不到.
只要简单的加入
node1
node2
这两行就可以了,之后就可以通过脚本一次启动集群,而不用一个节点一个节点的启动了.
在真正运行之前,需要执行一行代码,将master上的hdfs转为NameNode的格式
$ HADOOP_PREFIX/bin/hdfs namenode -format
#然后就可以启动了
$ HADOOP_PREFIX/sbin/start-all.sh #尽管已经被desperated了,但暂时目前还是可用的
#或者用官方推荐的方式启动
$ HADOOP_PREFIX/sbin/start-dfs.sh #启动hdfs
$ HADOOP_PREFIX/sbin/start-yarn.sh #启动yarn
#此外启动historyserver的命令如下
$ HADOOP_PREFIX/sbin/mr-jobhistory-daemon.sh start historyserver
如果要停止的话,把上述命令中的start,改为stop就可以了
在hdfs中创建了文件目录,填入你创建的用户名,这里我用的是hadoop
$ bin/hdfs dfs -mkdir /user
$ bin/hdfs dfs -mkdir /user/<username>
$ bin/hdfs dfs -put etc/hadoop input #将文件放入input目录下
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar grep input output 'dfs[a-z.]+' #执行官方提供的grep方法,从input中读取,输出到output
$ bin/hdfs dfs -get output output #讲输出从hdfs上输出到本地
上诉也可用另一个wordcount函数来测试,将第四行命令改为$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar wordcount input output
即可
另外删除语句为$ bin/hdfs dfs -rm -r input
,input是指目录
输出包含两个文件part-r-00000
,_SUCCESS
,在part-r-00000
文件中可以看到计算的结果,例如
(string, 1
(which 1
09, 1
1 1
10 1
2015 1
5 4
5x10=50 1
Again 1
An 1
And 2
Another 1
Are 1
But 1
CPU 1
Do 1
Don’t 1
Elasticsearch 3
Fields 2
First 1
For 4
Future 1
Grand 1
Here 1
However 1
I 3
If 3
In 3
Index 1
Lucene 7
One 1
Or 1
Otherwise 1
Otherwise, 1
Scores 1
Sparse 1
...

若有啰嗦之处还望见谅~
本文为作者原创,请勿随意转载(大牛们必然不会如此啰嗦~~),谢谢.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。