由于Spark以后会用到HDFS以及YARN,所以第一步可以先将Hadoop的最简单的集群搭建好,以便以后方便使用。
集群规划(根据我虚拟机而定):
- NameNode
- – Hadoop1 ( 192.168.52.151)
- DataNode
- – Hadoop1 ( 192.168.52.151)
- – Hadoop2 ( 192.168.52.162)
- – Hadoop3 ( 192.168.52.163)
系统环境:
- centos6.3 x64 vmware
- 硬盘:30G
- 内存:1G
- hadoop版本:hadoop-2.4.0(为了方便Spark1.1.0 for Hadoop2.4的版本,这样可以不必自己编译,因为自己编译会用很长时间,有几个包还被墙,比较慢,这样可以直接用)
环境准备:
系统设置
关闭iptables:
service iptables stop
chkconfig iptables off
chkconfig ip6tables off
关闭没用的服务
chkconfig postfix off
chkconfig bluetooth off
检查SSHD
chkconfig --list
找到SSHD 有4个on即可
修改文件句柄数(/etc/security/limits.conf) //** HBase 使用(以后的文件句柄会不够用)
hadoop - nofile 32768
hadoop soft/hard nproc 32000
修改登录配置文件(/etc/pam.d/login)
在最后增加如下内容:
session required pam_limits.so
sshd_config 配置(/etc/ssh/sshd_config)
打开三个开关,如word图,去掉前面井号即可
/etc/hosts 配置( /etc/hosts )
在最上面配置 如图
用户和组的增加
- 增加hadoop 组和hadoop 用户
- 增加组 groupadd -g 1000 hadoop
- 增加用户 useradd -u 2000 -g hadoop hadoop
- 增加密码:passwd hadoop
软件安装:
JDK安装
1、 我安装在/home/jvm下
2、 进入这个目录,然后解压
tar zvxf /home/congli/jdk-8u25-linux-x64.tar.gz
Scala配置
tar zxf scala-2.11.4.tgz
chown -R root:root scala-2.11.4 改一下用户所有者
配置环境变量
注意:这里我已经规划好spark的目录以及hadoop的目录,所以一并加进去,或者等安装了hadoop和spark再加进去也可以。
vi /etc/profile
export JAVA_HOME=/home/jvm/jdk1.8.0_25
export JRE_HOME=/home/jvm/jdk1.8.0_25/jre
export SCALA_HOME=/home/congli/scala-2.11.4
export HADOOP_COMMON_HOME=/app/hadoop/hadoop240
export HADOOP_CONF_DIR=/app/hadoop/hadoop240/etc/hadoop
export YARN_CONF_DIR=/app/hadoop/hadoop240/etc/hadoop
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:${SCALA_HOME}/bin:${HADOOP_COMMON_HOME}/bin:${HADOOP_COMMON_HOME}/sbin:$PATH
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_COMMON_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_COMMON_HOME/lib"
测试一下:先刷新一下profile:
source /etc/profile
然后测试
java –version scala –version
测试结果如下就是OK的:
安装hadoop
1、创建一个目录
mkdir -p /app/hadoop
2、解压到这个目录:
tar zxf /home/hadoop2.4.0/hadoop-2.4.0-bin.tar.gz
3、为了好记,我改名为
- hadoop240 hadoop-2.4.0/ hadoop240
4、执行
chown -R hadoop:hadoop hadoop
Haddop文件部署
1、 进入
hadoop240/etc/hadoop 进行配置文件的修改;
2、 配置slaves
删除localhost(3台机器是以后如果用HBase ,还要用zookeeper,一般都用奇数台)
3、 配置core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop1:8000</value>
</property>
4、 配置hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///app/hadoop/hadoop240/mydata/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///app/hadoop/hadoop240/mydata/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
这里的配置项涉及到几个目录,是HDFS的文件保存目录
元数据的保存目录
Datanode的数据保存目录
复制因子设置为1,缺省的是3,同一个数据块会在3个地方有保存,但是我们配置最简单的,就设置成1,让空间利用的更好
注意:mydata/name 和data目录都要创建好,不然会因为写不进去而启动不起来,这个问题我会在遇到的问题中(单开帖子)列出来
5、 配置yarn-site.xml
<property>
<description>The hostname of the RM.</description>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop1</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<description>The address of the applications manager interface in the RM.</description>
<name>yarn.resourcemanager.address</name>
<value>${yarn.resourcemanager.hostname}:8032</value>
</property>
<property>
<description>The address of the scheduler interface.</description>
<name>yarn.resourcemanager.scheduler.address</name>
<value>${yarn.resourcemanager.hostname}:8030</value>
</property>
<property>
<description>The address of the RM web application.</description>
<name>yarn.resourcemanager.webapp.address</name>
<value>${yarn.resourcemanager.hostname}:8088</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.https.address</name>
<value>${yarn.resourcemanager.hostname}:8090</value>
</property>
<property>
<description>The address of the resource tracker interface.</description>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>${yarn.resourcemanager.hostname}:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>${yarn.resourcemanager.hostname}:8033</value>
</property>
6、 配置mapred-site.xml
这个直接vi 编辑即可,无需从模板拷贝,直接vi 编辑即可建立;
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
7、 配置hadoop-env.sh
# The java implementation to use.
export JAVA_HOME=/home/jvm/jdk1.8.0_25
把这个替换文件里默认的即可。
集群安装
注意:
如果以上做好了,是虚拟机,就开始复制clone,然后设置好网卡等配置;
如果是物理机,几台机器都按照上面的配置好,复制相应目录并做好配置和环境变量的设置
虚拟机里的网卡如何更改,我就不讲了,以后可以单独写一个帖子;
SSH无密码登录设置
用ssh-keygen -t rsa 生成公钥
首先要生成hadoop用户的公钥,所以先su到hadoop用户
首先生成节点1(hadoop1)的公钥:
$ssh-keygen -t rsa然后一直按回车键,就会按照默认的选项将生成的密钥保存在.ssh/id_rsa文件中。
cd ~/.ssh然后
ls –lsa可以看到生成了两个文件
同样的第2、第3个节点也和上面一样生成公钥(注意:都先切换到hadoop目录)
用ssh 机器名
cat /home/hadoop/.ssh/id_rsa.pub>>authorized_keys 合成公钥
引用
例如:ssh hadoop1 cat /home/hadoop/.ssh/id_rsa.pub>>authorized_keys 之后要输入yes和hadoop用户的密码
修改authorized_keys 文件属性为600 ,并发放给各节点
chmod 600 authorized_keys
Copy到各个节点
scp authorized_keys hadoop@hadoop2:/home/hadoop/.ssh/
scp authorized_keys hadoop@hadoop3:/home/hadoop/.ssh/
scp authorized_keys hadoop@hadoop2:/home/hadoop/.ssh/
scp authorized_keys hadoop@hadoop3:/home/hadoop/.ssh/
用ssh 机器名 date 验证(去各个节点验证一下)
ssh hadoop1 date
ssh hadoop2 date
ssh hadoop3 date
成功后的截图如下:
Hadoop集群的启动
启动HDFS
引用
1、 进入hadoop目录,
cd /app/hadoop/hadoop240
2、
bin/hdfs namenode –format 执行格式化;
3、 启动hadoop;
sbin/start-dfs.sh(先启动HDFS)
注意:再启动hadoop的时候,最好是HDFS和yarn分开启动,因为HDFS启动的时候如果你保存了大量的文件之后,在启动之后有一个安全检查模式,会耗费大量时间,最好分开启动
4、HDFS的测试
bin/hdfs dfs –ls / 是空的,那么我们建立一个目录
bin/hdfs dfs -mkdir -p /datatest /test
这样就建立好目录了,可以用bin/hdfs dfs –ls / 进行查看
5、
bin/hdfs dfs -put NOTICE.txt /datatest/test/ 上传到这么目录
6、
bin/hdfs dfs -ls /datatest/test查看这个目录下的文件,会发现成功上传上去了,效果如下图;
启动yarn
1、
sbin/start-yarn.sh
2、 jps验证(终端里输入jps)
13473 NameNode
14643 Jps
13753 SecondaryNameNode
14329 ResourceManager
14425 NodeManager
13567 DataNode
如果yarn启动成功了 应该有
- ResourceManager
- NodeManager(做为datanode)
- NameNode
验证
验证HDFS
1、 http://hadoop1:50070/ 看HDFS
上面有三个节点,没问题
再看一下HDFS的文件:
点进去之后,看到我们之前通过命令行上传过的文件,确定了HDFS没问题。
验证yarn
1、 http://hadoop1:8088/cluster/nodes 看到图形界面
OK ,到此为止,一个最简单的hadoop集群就安装部署完毕了,Let`s Go!