此为突发奇想写的,还没更新完成,里面有的内容出入还没更改,图片明天再加,内容再改。
由于本人需求,所以在四个树莓派上搭建了一个极小的Hadoop集群,请勿喷我的工作无用,都说了是我需要才这样做的,手动再见!
工作并非完全个人创造,在基于网上貌似唯一一篇介绍树莓派搭建Hadoop集群的过程文章后根据个人现状进行修改完成,原本已有人搭建过相应内容,所以树莓派系统内部混乱,后来也没有完全清理,有些易于常人的错误表示摸索很久才得以解决,总之,没有得到就有学到!
具体搭建过程参考,过程详细,从理论上来说没有问题。感谢博主干货!
具体选择版本内容如下:
名称 | 参数 |
---|---|
JDK | (硬浮点版本) |
Eclipse | |
Hadoop |
一、:改变host
pi@slave2 ~ $ su root
Password:
root@slave2:/home/pi# vim /etc/hosts
以上后来全部追加一个127.0.0.1 localhost以方便后面进行测试
二:建立hadoop运行帐号
即为hadoop集群专门设置一个用户组及用户,这部分比较简单,参考示例如下:
sudo groupadd hadoop //设置hadoop用户组
后来改变用户的权限为:
usermod -d /home/hduser -g hadoop -G root hduser
其中各选项含义如下:
-c comment 指定一段注释性描述。
-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-g 用户组 指定用户所属的用户组。
-G 用户组,用户组 指定用户所属的附加组。
-s Shell文件 指定用户的登录Shell。
-u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
用户名 指定新账号的登录名。上述3个虚机结点均需要进行以上步骤来完成hadoop运行帐号的建立。
三:配置免密码登录的SSH
三个都要配置,先是在slave2上配置讲解(是在hduser用户下)
1、 生成dsa类的密码公钥和私钥
命令:ssh-keygen –t dsa –P ''
默认目录在Hduser主目录下的.ssh/目录中(完全目录是:/home/hduser/.ssh),可以查看内容。
2、id_rsa.pub为公钥,id_rsa为私钥,紧接着将公钥文件复制成authorized_keys文件,这个步骤是必须的,过程如下:
命令:cat id_rsa.pub >> authorized_keys
本来我是使用的dsa,后来在将Hadoop集群链接到WIN7下的Eclipse中时经常出现连接错误,各个节点不可联通,需要密码,为了方便,没有深入的研究,将无密登录改换成默认的rsa后,世界就美丽了!
3、在slave2上进行回环测试
命令:ssh localhost
4、在hduser用户下使用命令从master远端获取master的id_dsa.pub公钥
命令:scp hduser@master:~/.ssh/id_dsa.pub ./master_dsa.pub
需要输一次密码
5、slave2中公钥文件必须包含master的公钥,所以将传输所得的master公钥,加入到authorized_key中
命令:cat master_rsa.pub >> authorized_keys
6、如上过程显示了slave2结点通过scp命令远程登录master结点,并复制master的公钥文件到当前的目录下,这一过程需要密码验证。接着,将master结点的公钥文件追加至authorized_keys文件中,通过这步操作,如果不出问题,master结点就可以通过ssh远程免密码连接slave2结点了,下面在master上面进行验证
命令(master上):ssh slave2
7、由上述步骤可知,slave2结点首次连接时需要,“YES”确认连接,这意味着master结点连接slave2结点时需要人工询问,无法自动连接,输入yes后成功接入,紧接着注销退出至master结点。要实现ssh免密码连接至其它结点,还差一步,只需要再执行一遍ssh slave2,如果没有要求你输入”yes”,就算成功了。
三:配置hadoop
安装hadoop。在hduser的主目录下创建新的文件夹hadoop,然后将hadoop-1.2.1.tar.gz放在其中,然后解压到该目录下面
进入/etc/profile中更改hadoop的环境变量,在文本末尾追加:
# set java environment
export JAVA_HOME=/usr/java/jdk1.8.0_33
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
# set hadoop path
export HADOOP_HOME=/home/hduser/hadoop/hadoop-1.2.1
export PATH=$PATH:$HADOOP_HOME/bin
1:在hduser主目录下创建一个新的文件夹hadoop_tmp
其实可以默认放置于Hadoop本身的tmp文件夹中,看个人,但是这个文件夹的位置至关重要
命令(master):mkdir /home/hduser/Hadoop_tmp
2:进入root权限下在hadoop安装的文件夹里面进行配置,用root用户进入/usr/hadoop/conf文件夹,打开hadoop-env.sh文件:
在文件尾部添加如下内容:
# set java environment
export JAVA_HOME=/usr/java/jdk1.8.0_33
JAVA_HOME后面的路径是jdk的安装路径。
3:修改另一个文件,core-site.xml文件
命令:root@master:/usr/hadoop/conf# vim 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>hadoop.tmp.dir</name>
<value>/home/hduser/hadoop_tmp</value>
<description>A base for other temporary directories.</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
<final>true</final>
</property>
</configuration>
~
4:配置hdfs-site.xml文件
命令:root@master:/usr/hadoop/conf# vim 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>/home/hduser/hdfs/name</value>
<description>Determines where on the local filesystem the DFS name node should store the name table. If this is a comma-delimited list of directories then the name table is replicated in all of the directories, for redundancy. </description>
</property>
<property>
<name>dfs.data.dir</name>
<value>/home/hduser/hdfs/data</value>
<description>Determines where on the local filesystem an DFS data node should store its blocks. If this is a comma-delimited list of directories, then data will be stored in all named directories, typically on different devices. Directories that do not exist are ignored. </description>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
5:配置mapred-site.xml文件
打开mapred-site.xml文件:vim 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>master:9001</value>
</property>
</configuration>
~
~
~
6:配置masters文件
打开masters文件:vim masters
命令:root@master:/usr/hadoop/conf# vim masters
7:配置slaves文件
命令:root@master:/usr/hadoop/conf# vim slaves
8:现在在Master机器上的Hadoop配置就结束了,剩下的就是配置Slave机器上的Hadoop。是将 Master上配置好的hadoop所在文件夹”/usr/hadoop”复制到所有的Slave的”/usr”目录下(实际上Slave机器上的slavers文件是不必要的, 复制了也没问题)。用下面命令格式进行。此时hduser是没有操作/usr目录下的文件的权利,所以都用root权限进行操作呀
scp -r /usr/hadoop root@slave1:/usr
root@master:/usr# scp -r /usr/hadoop root@slave2:/usr
Slave2中的/usr的列表,表示传输成功。
改变hadoop文件的所有者
root@master:/usr# chown -R hduser:hadoop Hadoop
root@slave1:/usr# chown -R hduser:hadoop Hadoop
root@slave2:/usr# chown -R hduser:hadoop Hadoop
接着在slave上修改”/etc/profile”文件(配置 java 环境变量的文件),将以下语句添加到末尾,并使其有效(source /etc/profile):
# set hadoop environment
export HADOOP_HOME=/usr/hadoop
export PATH=$PATH :$HADOOP_HOME/bin
四:格式化master
1:格式化hdfs文件系统
在master上使用普通用户hadoop进行操作。(备注:只需一次,下次启动不再需要格式化,只需 start-all.sh):
hduser@master ~ $ hadoop namenode –formate
2:启动hadoop
!!!!!!!!!!!!!!!!!!!很重要的帮我解决了一定问题的文章。好人一生平安!!!!
http://chenzhou123520.iteye.com/blog/1826002
!!!!!!!!!!!!!!!!!再次出现错误,原因是没有修改好ID
http://blog.sina.com.cn/s/blog_4c248c5801014nd1.html
再次感谢一篇神一样的文章给予的支持:(就是没有改变为-client的模式,但是有个问题,slave1也并没有改变client的模式,也是可以用的,)
http://www.lediouris.net/RaspberryPI/Hadoop/readme.html
我测试mapreduce的时候用wordcount这种小的程序的时候,输出文件夹一定是不可以存在的,就是输出的路径要写一个不存在的而文件路径,让它自己去创建,就是这么烦人,我草了~~~~~~~~~
export HADOOP_HOME_WARN_SUPPRESS=1
具体目录请更改为安装目录,HADOOP_HOME_WARN_SUPPRESS变量为抑制HADOOP_HOME变量重复时的告警。
Administrator
http://www.cnblogs.com/shitouer/archive/2012/05/29/2522860.html
这个是配置win7下面的hadoop还只实验中,但是基本是没什么问题的
http://my.oschina.net/u/999578/blog/180343
这个链接也是看了一下的