RaspberryPi Model 3B–Hadoop集群

说过要搭个简易Hadoop集群,so 就简单记录一下,搭建的过程好了。

手里现在有两块RP 3B.

整个环境搭建起来还是蛮快的.

首先确保两块板子已经固定好了静态IP,然后就是java环境已经到达1.8(具体可以看一下NAS篇),

修改一下主机名字(非必需)

sudo vi /etc/hostname

把名字改成你想用的,我这边一台master,一台node1。

修改host文件,做好IP映射.

sudo vim /etc/hosts

准备组和用户

sudo addgroup hadoop
sudo adduser –ingroup hadoop hduser
sudo adduser hduser sudo

配置SSH

su hduser
mkdir ~/.ssh
ssh-keygen -t rsa -P “”
cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys

验证hduser是否可以通过SSH登陆

su hduser
ssh localhost

返回root shell,下载并安装Hadoop.

cd ~/
wget http://apache.mirrors.spacedump.net/hadoop/core/hadoop-1.2.1/hadoop-1.2.1.tar.gz
sudo mkdir /opt
sudo tar -xvzf hadoop-1.2.1.tar.gz -C /opt/
cd /opt
sudo mv hadoop-1.2.1 hadoop
sudo chown -R hduser:hadoop hadoop

配置环境变量,也可以将其配置到 ~/.bashrc

export JAVA_HOME=$(readlink -f /usr/bin/java | sed “s:bin/java::”)
export HADOOP_INSTALL=/opt/hadoop
export PATH=$PATH:$HADOOP_INSTALL/bin

登陆hduser,验证Hadoop安装。

exit
su hduser
hadoop version

hduser@node1 /home/hduser $ hadoop version

退回root,配置Hadoop环境变量

sudo vim /opt/hadoop/conf/hadoop-env.sh

修改如下内容

# The java implementation to use. Required.
export JAVA_HOME=$(readlink -f /usr/bin/java | sed “s:bin/java::”)

# The maximum amount of heap to use, in MB. Default is 1000.
export HADOOP_HEAPSIZE=250

# Command specific options appended to HADOOP_OPTS when specified
export HADOOP_DATANODE_OPTS=”-Dcom.sun.management.jmxremote $HADOOP_DATANODE_OPTSi -client

注意-client的参数一定要加上,否则会报错:

Error occurred during initialization of VM
Server VM is only supported on ARMv7+ VFP

如果你的SSH使用的是不同的端口,还需要配置:

# Extra ssh options. Empty by default.
# export HADOOP_SSH_OPTS="-o ConnectTimeout=1 -o SendEnv=HADOOP_CONF_DIR"
export HADOOP_SSH_OPTS="-p <YOUR_PORT>"

否则会报错:

connect to host localhost port 22: Address family not supported by protocol

配置Hadoop,两块板子一样的配置

sudo vim /opt/hadoop/conf

core-site.xml,添加如下配置

<configuration>
   <property>
      <name>hadoop.tmp.dir</name>
      <value>/hdfs/tmp</value>
   </property>
   <property>
         <name>fs.default.name</name>
         <value>hdfs://192.168.1.64:54310</value>
   </property>
</configuration>

mapred-site.xml,添加如下配置(这里的配置,还动了MapReduce的配置,因为自己跑的时候,发现RP确实只是个玩具。。。。)

<configuration>
   <property>
      <name>mapred.job.tracker</name>
      <value>192.168.1.64:54311</value>
   </property>
   <property>
      <name>mapred.tasktracker.map.tasks.maximum</name>
      <value>1</value>
   </property>
   <property>
      <name>mapred.tasktracker.reduce.tasks.maximum</name>
      <value>1</value>
   </property>
</configuration>

hdfs-site.xml,添加如下配置

<configuration>
   <property>
      <name>dfs.replication</name>
      <value>1</value>
   </property>
   <property>
      <name>dfs.block.size</name>
      <value>5242880</value>
   </property>

创建HDFS文件系统

sudo mkdir -p /hdfs/tmp
sudo chown hduser:hadoop /hdfs/tmp
sudo chmod 750 /hdfs/tmp
hadoop namenode -format

登陆hduser,启动Hadoop

/opt/hadoop/bin/start-dfs.sh
/opt/hadoop/bin/start-mapred.sh

运行jps指令检测当前所有Hadoop服务运行状态

jps

16640 JobTracker
16832 Jps
16307 NameNode
16550 SecondaryNameNode
16761 TaskTracker
16426 DataNode

如果没有看到上述的进程,可以看下/opt/hadoop/logs下的报错信息,根据相关信息,搜索一下解决方案即可。

擦除HDFS指令,该操作会擦除HDFS,并格式化文件系统。

rm -rf /hdfs/tmp/*

Hadoop集群配置,之前我们已经做好了两块板子的hosts映射了。

所以接下来就是配置master.

在master和node1板子上,直接编辑,填入自己的主机名或者是IP,我这里直接填入的是板子的静态IP,确保hosts文件失效后,依然保证可以访问。

sudo vim /opt/hadoop/conf/masters

配置master和node1的slaves文件,确保主从节点的关系,由于咱在此的配置,master主机也拥有Hadoop的全部功能,而不只是负责管理其余节点,所以这边得把自己的IP也填上去,而node1节点不管理其他的节点,所以,填自己的IP即可。

sudo vim /opt/hadoop/conf/slaves

配置SSH,确保master可以无需密码直接连接到其他节点。

之前已经生成key了,这个只需要在master上生成即可,然后通过scp指令将key送到被控主机上既可以,也就是在master上生成key,送到node1上去,具体…自己找下指令把,我也忘了.

弄好这个之后,就可以直接在master上无需密码登陆node1了

su hduser
ssh node1
exit

在master上,格式化HDFS,然后启动服务

hadoop namenode -format
/opt/hadoop/bin/start-dfs.sh
/opt/hadoop/bin/start-mapred.sh

验证后台服务是否正常启动

master主节点

jps
3729 SecondaryNameNode
4003 Jps
3607 DataNode
3943 TaskTracker
3819 JobTracker
3487 NameNode

node1从节点

jps
2307 TaskTracker
2227 DataNode
2363 Jps

如果服务启动失败,你还可以通过hadoop指令单独启动相应的服务,如

hadoop namenode
hadoop datanode

接下来,可以通过WEB界面来观察节点的状态数据和统计数据了。

http://192.168.1.64:50030
http://192.168.1.64:50070

到此,环境搭建了个大概。

在上面跑过sample,也用过HDFS….再次证明了一点,玩具!

放个3GB的文件,拷了半天。

顺便说一下平衡HDFS数据的问题,刚开始的时候发现数据,并没有分布到node1上,调了Block size也没有效果。

拷贝文件指令

hadoop dfs -copyFromLocal sourcefile /targetfile

查看文件状态的指令

hadoop fsck /yourfile -files -blocks -racks

通过上述指令,即可查看到文件的储存和分布状况。

为了让文件分布存储到node1上去,还要运行以下指令

hadoop balancer -threshold 0.1

这个阈值参数是一个0-100的浮点数(百分比),该参数越小,文件的Block就越加的平衡的分布到节点中去。

Leave a Reply

Your email address will not be published. Required fields are marked *