好久都没写了啊。感觉自己都不像是一个搞技术都了。
来个存货吧!

hadoop 集群搭建

3台机器 suse 系统

规划

IP 主机名 hostname hadoop角色
10.96.91.93 namenode93 NameNode、SecondaryNameNode 、ResourceManage、 DataNode 、NodeManager
10.96.91.129 datanode129 DataNode NodeManager
10.96.91.130 datanode130 DataNode NodeManager
创建 hadoop 用户

useradd -u 501 -g users -d /home/hadoop -s /bin/bash hadoop
mkdir /home/hadoop
chown -R hadoop:users /home/hadoop
passwd hadoop 密码设置
方便记忆,我设置到用户名和密码一样

修改主机名

文件位置 /etc/HOSTNAME

vim /etc/HOSTNAME文件
/etc/rc.d/boot.localnet start

修改host文件 !三台机器都要修改!

文件位置 /etc/hosts

10.96.91.93 namenode93
10.96.91.129 datanode129
10.96.91.130 datanode130
配置ssh免密码登录

ssh-keygen -t rsa
.ssh目录下

cat id_rsa.pub >> authorized_keys
把自己本机公钥发送到目标机器

ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@datanode129
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@datanode130
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@namenode93
配置环境

文件位置 /etc/profile

export JAVA_HOME=/home/hadoop/jdk1.8.0_191
export JRE_HOME=/home/hadoop/jdk1.8.0_191/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME:$PATH

export HADOOP_HOME=/home/hadoop/hadoop-2.9.1
export PATH="$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH"
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
最重要到-----Hadoop文件配置

创建hdfs文件夹

文件夹不是必须这样创建,但是,一定要和配置文件对应上。 创建后如下:

/home/hadoop/hadoop-2.9.1/hdfs
/home/hadoop/hadoop-2.9.1/hdfs/tmp
/home/hadoop/hadoop-2.9.1/hdfs/name
/home/hadoop/hadoop-2.9.1/hdfs/data
进入配置目录

cd /home/hadoop/hadoop-2.9.1/etc/hadoop
配置core-site.xml

在<configuration></configuration>中加入

<property>
   <name>hadoop.tmp.dir</name>
   <value>/home/hadoop/hadoop-2.9.1/hdfs/tmpp</value>
   <description>A base for other temporary directories.</description>
 </property>
 <property>
  <name>io.file.buffer.size</name>
   <value>131072</value>
 </property>
 <property>
   <name>fs.defaultFS</name>
   <value>hdfs://namenode93:9000</value>
 </property>

注意:hadoop.tmp.dir的value和我们之前创建的/home/hadoop/hadoop-2.9.1/hdfs/tmp路径要一致

配置 hadoop-env.sh文件

将JAVA_HOME文件配置为本机JAVA_HOME路径

export JAVA_HOME=/home/hadoop/jdk1.8.0_191
配配置 yarn-env.sh

将其中的JAVA_HOME修改为本机JAVA_HOME路径

export JAVA_HOME=/home/hadoop/jdk1.8.0_191
配置hdfs-site.xml

在<configuration></configuration>中加入

<property>
 <name>dfs.replication</name>
   <value>2</value>
 </property>
 <property>
   <name>dfs.namenode.name.dir</name>
   <value>file:/home/hadoop/hadoop-2.9.1/hdfs/name</value>
   <final>true</final>
</property>
 <property>
   <name>dfs.datanode.data.dir</name>
   <value>file:/home/hadoop/hadoop-2.9.1/hdfs/data</value>
   <final>true</final>
 </property>
 <property>
  <name>dfs.namenode.secondary.http-address</name>
   <value>namenode93:9001</value>
 </property>
 <property>
   <name>dfs.webhdfs.enabled</name>
   <value>true</value>
 </property>
 <property>
   <name>dfs.permissions</name>
   <value>false</value>
 </property>

注意:dfs.namenode.name.dir和dfs.datanode.data.dir的value和之前创建的/hdfs/name和/hdfs/data路径一致

配置mapred-site.xml

复制mapred-site.xml.template文件,并命名为mapred-site.xml

cp mapred-site.xml.template mapred-site.xml
配置 mapred-site.xml,在标签<configuration>中添加

 <property>
   <name>mapreduce.framework.name</name>
   <value>yarn</value>
 </property>

配置yarn-site.xml

在<configuration>标签中添加以

<property>
 <name>yarn.resourcemanager.address</name>
   <valu>namenode93:18040</value>
 </property>
 <property>
   <name>yarn.resourcemanager.scheduler.address</name>
   <value>namenode93:18030</value>
 </property>
 <property>
   <name>yarn.resourcemanager.webapp.address</name>
   <value>namenode93:18088</value>
 </property>
 <property>
   <name>yarn.resourcemanager.resource-tracker.address</name>
   <value>namenode93:18025</value>
 </property>
 <property>
   <name>yarn.resourcemanager.admin.address</name>
   <value>namenode93:18141</value>
 </property>
 <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
 </property>
 <property>
     <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
     <value>org.apache.hadoop.mapred.ShuffleHandler</value>
 </property>

配置slaves 文件

把原本的localhost删掉,改为

namenode93
datanode129
datanode130
将hadoop-2.9.1文件夹传到其他虚拟机上

scp -r hadoop-2.9.1 hadoop@datanode129:~/
scp -r hadoop-2.9.1 hadoop@datanode130:~/
注意:hadoop是虚拟机的用户名,

初始化hadoop 在namenode机器上

hdfs namenode -format

启动Hadoop

start-dfs.sh
start-yarn.sh
或者

start-all.sh
停止Hadoop

stop-yarn.sh
stop-dfs.sh
或者

stop-all.sh
查看命令

可以查看到当前登录机器到角色

jps
jps查询结果如下

hadoop@namenode93:~> jps
15314 SecondaryNameNode
15484 ResourceManager
14956 NameNode
15116 DataNode
15612 NodeManager
16781 Jps

129 130两个机器是 DataNode,在Hadoop到配置里,可以灵活配置各个机器角色 详细到配置官网上有 jps查询结果如下

hadoop@datanode130:~> jps
10233 NodeManager
10365 Jps
10110 DataNode
到这里,三台机器搭建的Hadoop集群就组建完毕了。

用自带的样例测试hadoop集群跑任务

使用命令

hadoop jar /home/hadoop/hadoop-2.9.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.1.jar pi 10 10
用来求圆周率,pi是类名,第一个10表示Map次数,第二个10表示随机生成点的次数

最后出现结果

Job Finished in 32.014 seconds
Estimated value of Pi is 3.20000000000000000000
ok,集群测试可用。 网上还有测试统计字数到例子,有兴趣可以尝试一下

HDFS管理界面

http://10.96.91.93:50070/

yarn管理界面

http://10.96.91.93:18088/

其他suse命令

查看版本

lsb_release -d
SUSE11下: 关闭防

service SuSEfirewall2_setup stop
service SuSEfirewall2_init stop
取消开机启动防火墙:

chkconfig SuSEfirewall2_setup off
chkconfig SuSEfirewall2_init off
查看端口情况

netstat -ntpl
参考资料

CentOs6搭建Hadoop环境,这是一个网上比较好的例子。尤其是Hadoop HA安装这部分比较全面。
Hadoop配置文件参数详解,这个只是参考,Hadoop版本不一样可能使用到配置也有一些差别。具体查看项目对应版本的配置部分文档。
Apache Hadoop 2.9.1项目