一 试验环境
|
操作系统 |
IP |
主机名 |
Hadoop版本 |
|
CentOS 6.5 |
10.192.203.108 |
nn01 |
2.6.4 |
二 试验步骤
2.1 安装jdk
安装jdk可以参考:https://blog.csdn.net/yabingshi_tech/article/details/51498017
2.2 创建hadoop用户
useradd hadoop
passwd hadoop
#添加hadoop到sudoers(以下命令以root用户执行)列表,并使其有root权限
chmod u+w /etc/sudoers
然后用vi编辑器打开sudoers文件,在里面添加一句话:
hadoop ALL=NOPASSWD:ALL
2.3 安装Hadoop
tar xzvf hadoop-2.6.4.tar.gz
mv hadoop-2.6.4 hadoop
chown -R hadoop:hadoop hadoop
mv hadoop /usr/local
2.4 创建目录
mkdir -p /data/logs/hadoop
chown -R hadoop:hadoop /data/logs/hadoop
mkdir -p /data/hadoop/hdfs/nn
mkdir -p /data/hadoop/hdfs/dn
chown -R hadoop:hadoop /data/hadoop
2.5 设置环境变量
切换到hadoop用户,并编辑~/.bashrc文件,添加以下环境变量:
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_PREFIX=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YEAN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export HADOOP_INSTALL=$HADOOP_HOME
export JAVA_HOME=/usr/local/jdk1.8.0_92
source ~/.bashrc使修改生效
2.6 修改hadoop配置文件
2.6.1 配置hadoop-env.sh
编辑$HADOOP_PREFIX/etc/hadoop/hadoop-env.sh文件,
在文件开头添加以下变量:
export HADOOP_NAMENODE_OPTS=" -Xms1024m -Xmx1024m -XX:+UseParallelGC"
export HADOOP_DATANODE_OPTS=" -Xms1024m -Xmx1024m"
export HADOOP_LOG_DIR=/data/logs/hadoop
/*
这个配置最好不要按照默认配置来,因为:JVM运行的内存如果不设定占用大小的话,要么不够,要么就把机器的内存都占满了。曾经有一次我们项目组花了整整一个星期来解决Hadoop集群的节点频繁地自己挂掉的问题,最后发现是内存分配不足造成的。之后我就养成了只要用到JVM的地方都加入
内存参数,至少内存多少自己心里有数,让情况可控。
日志文件路径如果不设定的话,多半后期会遇到放日志的分区满了,各种奇怪故障层出不穷。
*/
2.6.2 配置core-site.xml
顾名思义,这个文件就是配置Hadoop的Web属性的文件。我们需要在<configuration>节点中增加配置项,添加后的<configuration>节点是这样的:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://nn01:8020</value>
</property>
</configuration>
备注:nn01是主机名
2.6.3 配置hdfs-site.xml
这个文件负责配置HDFS相关的属性。我们需要在<configuration>节点中增加配置项,添加后的<configuration>节点是这样的:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///data/hadoop/hdfs/nn</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///data/hadoop/hdfs/dn</value>
</property>
</configuration>
说明:
① dfs.replication是用于设置数据备份的,我们只是学习,所以暂时设置为1。实际开发中请千万不要设置成1,因为Hadoop的数据很容易坏。坏了不是问题,只要有备份就不算真得坏,Hadoop会自动使用备份;但是如果没有备份,就比较麻烦了。
② dfs.namenode.name.dir是namenode在硬盘上存储文件的位置
③ dfs.datanode.data.dir是datanode在硬盘上存储文件的位置
为什么在namenode上也要设定datanode的存储目录
其实为namenode节点设置datanode的存储目录的确没什么意义。不过在所有节点上用同一份配置文件是Hadoop官方的要求,所以哪怕是namenode节点的配置文件,也包含有datanode的存储目录。这样做的理由是:
① 实际生产环境中有可能有成百上千台机器,为不同角色的机器设定不同的配置文件实在太麻烦,干脆就都用同一份文件,各个角色分别读取属于自己的配置项就好了。
② 配置文件经常需要更新,用同一份文件的好处就是,当配置更新的时候,全部批量覆盖一遍就好了,简单粗暴
2.7 格式化namenode
切换到hadoop用户,然后用hdfs命令格式化namenode:
hdfs namenode -format
2.8 启动hadoop
$HADOOP_PREFIX/sbin/start-dfs.sh
我们用start-dfs.sh启动hadoop,hadoop就会在nn01上同时启动namenode、secondary namenode、datanode。这样一来,nn01就是一个独立节点模式(single node)的hadoop。
启动的时候注意看有没有什么异常,启动完记得看看启动日志有没有什么异常。
通过tail命令查看启动日志:
2.9 验证
#用浏览器访问Hadoop控制台
打开浏览器访问http://10.192.203.108:50070。如果没问题的话就可以看到以下画面,如图所示:
如果想停止单机模式的Hadoop,使用命令:stop-dfs.sh
--本篇文章主要参考了《hbase不睡觉书》。