首页 > 大数据 > Hadoop > 搭建Hadoop环境
在单节点(伪分布式)环境下运行Hadoop
一、配置
无论是在单机环境还是多机环境中,
安装完成后要保证防火墙对ssh的端口放行,如果仅是学习可以直接把防火墙关闭:
1)重启后永久性生效:
开启:
关闭:
2)即时生效,重启后失效:
开启:
关闭:
其次是配置
第一条命令将当前用户切换为hadoop(如果当前用户就是hadoop,则无需输入),第二条命令将生成一个公钥和私钥对(即id_dsa和
ssh
二、配置Hadoop
Hadoop的配置文件都放在${HADOOP_HOME}/conf这个文件夹下面,主要是四个配置文件,分别是core-site.xml,hadoop-env.sh,hdsf-site.xml和mapred-site.xml。
(1)修改conf/hadoop-env.sh,设置JAVA_HOME,在该文件中找到如下行,去掉前面的注释。
将
#
#
即使在环境变量里面已经配置了JAVA_HOME,这里也不可以用JAVA_HOME=${JAVA_HOME},一定要写成绝对路径
修改为:
#
接着修改HADOOP_PID_DIR的值,将
# The directory where pid files are stored. /tmp by default.
# export HADOOP_PID_DIR=/var/hadoop/pids
改为:
# The directory where pid files are stored. /tmp by default.
export HADOOP_PID_DIR=/opt/hadoop-0.20.2/pids(hadoop目录的下的pids文件夹)
这个值主要是用来存放HADOOP进程的pid文件,由于linux会定时清理/tmp下的文件,所以用默认值的话可能会导致找不到pid文件,使得hadoop进程无法正常运行
(2)修改core-site.xml内容如下:
<!-- Put site-specific property overrides in thisfile. -->
<!--默认的namenode的端口为8020
<!--路径中可以使用用${变量名},但路径名不可以用${...}以及~/...,一定要写成绝对路径-->
(3)修改conf/hdfs-site.xml为
version="1.0"?>
type="text/xsl"href="configuration.xsl"?>
设置复本数,默认是3
(4)修改conf/mapred-site.xml为:
version="1.0"?>
type="text/xsl"href="configuration.xsl"?>
jobtracker的ip和端口
三、运行Hadoop(当前用户为hadoop)
./hadoop
若报
/opt/jdk1.6.0_25/bin/java: cannot execute binary file
证明jdk与系统的位数不合(jdk为64位,系统为32位),换一个32位的jdk就可
启动单节点集群:
./start-all.sh
这个操作会在本机上启动Namenode,SecondaryNameNode,Datanode,JobTracker和TaskTracker共计5个JVM进程,可以通过java自带的jps命令查看。
jps
通过jps命令可以查看到进程如下:
TaskTracker
SecondaryNameNode
JobTracker
NameNode
TaskTracker
停止单节点集群:
./stop-all.sh
另外可以通过以下网址查看节点的运行情况:
http://localhost:50030/ - Hadoop
http://localhost:50060/ - Hadoop Task
Tracker
http://localhost:50070/ - Hadoop DFS
四、在多节点(分布式)环境下运行Hadoop
搭建多节点集群的思想主要是在每一台机器上分别搭建好单机环境,再将几台机器整合成一个集群。因此,在此之前,请确保每一台机器都如前所述搭建好了单机环境,最好是相同的结构。这里说的相同结构是指hadoop安装在相同的目录下,然后多个节点都使用相同的用户名操作hadoop集群。否则在ssh的时候也会出现问题。
(1) 设置/etc/hosts文件
实验中两台机器处于同一局域网中,其中一台作为master,ip地址为192.168.8.2一台作为slave,ip地址为192.168.8.3。更新两台机器的/etc/hosts文件,使用如下命令:
vi
添加以下内容:
(2) 设置节点之间的无密码SSH登录
这里要求master上的用户hadoop必须能够无密码登录到master和slave两台机器上。经过上面的配置,已经可以在单机上进行密码SSH登录,这里只需设置由master无密码登录到slave,采用如下命令即可:
在master上运行:
ssh-copy-id
如果没有ssh-copy-id,使用如下命令代替:
cat ~/.ssh/id_dsa.pub | ssh
hadoop@slave "umask 077; mkdir -p .ssh ; cat
>> .ssh/authorized_keys"
,
这条命令的意思是将master上的公钥拷贝到slave上,这样下次ssh slave的时候slave就认识master,无需在输入密码验证。
如下命令可以测试SSH连接成功与否:
ssh
ssh
(3) 修改集群配置文件
在所有节点上修改conf/core-site.xml,更改fs.default.name的值为hdfs://master:9000,具体为:
在所有节点上修改conf/mapred-site.xml,将JobTracker的地址改为master具体为:
在所有节点上修改conf/hdfs-site.xml,将更改dfs.replication的值,这个参数决定了集群中一个文件需要保存为多少个拷贝。其默认值为3,因本次试验节点数为2,故更改为2。具体为:
(4) 格式化HDFS
注意:如果之前单机环境下格式化过HDFS建议把之前的文件删除,否则可能会出现异常(HDFS目录即之前设置的${hadoop.tmp.dir}dfs目录)。格式化命令和单机情况下类似,只是需要在master节点上运行。
(5) 启动和停止集群
在master节点上首先启动HDFS,其命令为:
其结果是在master节点上启动NameNode,SecondaryNameNode和DataNode,在所有slave节点上启动DataNode,通过jps命令可以查看master上启动的服务列表:
NameNode
DataNode
SecondaryNameNode
此时slave上的进程列表如下:
DataNode
其次,在master节点上启动MapReduce,其命令为:
./start-mapred.sh
这样将会在master
NameNode
DataNode
SecondaryNameNode
TaskTracker
JobTracker
此时slave上的进程列表如下:
DataNode
TaskTracker
如要停止集群,则需要将上述步骤反过来运行,首先在master上运行
./stop-mapred.sh
其次在master上运行以下命令停止HDFS:
./stop-dfs.sh
这个过程也可通过jps命令来查看是否完成。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8944063/viewspace-1119773/ ,如需转载,请注明出处,否则将追究法律责任。