准备条件:
CentOS 7 64位操作系统 | 选择minimal
版本即可(不带可视化桌面环境),也可以选择带完整版
Hadoop-2.8.0 | 本文采用的是Hadoop-2.8.0
版本。
JDK1.8 | 本文采用jdk-8u131-linux-x64.tar.gz
版本。
- 解压并配置JDK并配置Hadoop
1. 将下载好的jdk放入/usr
下并在/usr
目录下新建java
目录
[root@localhost /]# cd /usr
[root@localhost usr]# mkdir java
[root@localhost usr]# cd /usr/java/jdk1.8
进入该目录,并解压jdk到当前文件夹
tar -xzvf jdk-8.tar.gz
解压得到文件夹修改文件夹名为jdk1.8
以方便使用。
修改JAVA
环境变量:
编辑java
环境 vi ~/.bash_profile
添加如下命令:
export JAVA_HOME=/usr/java/jdk1.8.0_121
export PATH=$JAVA_HOME/bin:$PATH
执行source ~/.bash_profile 使变量生效
2. 解压hadoop-2.8.0
将下载好的Hadoop压缩包解压到目标文件夹下,(本文解压目录为:/usr/local
)
修改解压后得到Hadoop的文件夹名为:Hadoop-2.8.0
并得到如下文件:
Hadoop不需要安装,下面进行环境配置
下面的修改过程可使用vi命令,或者vim命令,或使用xftp直接对文件进行修改
再次修改
bash_profile
添加hadoop
的文件路径:
加上之前修改的配置的jdk环境,改该文件整体修改为:
PATH=$PATH:$HOME/bin
export PATH
export JAVA_HOME=/usr/java/jdk1.8
export HADOOP_HOME=/usr/local/hadoop-2.8.0
export PATH=$JAVA_HOME/bin:$PATH:$HOME/bin:$HADOOP_HOME/bin
再次执行 source ~/.bash_profile
使得文件立即生效
修改
etc/hadoop/core-site.xml
将configurarion标签修改为:注意:
192.168.0.181
是本文的测试地址,相应的,需要修改成自己虚拟机的ip地址,如果虚拟机不是桥接方式,则可以改为:127.0.0.1
9000是Hadoop的默认端口,建议先不要修改
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.0.181:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop-2.8.0/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131702</value>
</property>
<property>
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value>*</value>
</property>
</configuration>
-
修改
etc/hadoop/hdfs-site.xml
<configuration> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/local/hadoop-2.8.0/hdfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop-2.8.0/hdfs/data</value> </property> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>192.168.0.181:9001</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> <property> <name>dfs.permissions</name> <value>false</value> </property> </configuration>
以上,分别配置的是相应的几个节点和安全认证,文件目录会在服务开启时自动创建
dfs.permissions设置为false可以允许完全分布式模式下的多机访问
-
修改
etc/hadoop/yarn-site.xml
<configuration> <!-- Site specific YARN configuration properties --> <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> <property> <name>yarn.resourcemanager.address</name> <value>192.168.0.181:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>192.168.0.181:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>192.168.0.181:8031</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>192.168.0.181:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>192.168.0.181:8088</value> </property> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>6078</value> </property> </configuration>
-
修改
etc/hadoop/hadoop-env.sh
# The java implementation to use.
export
JAVA_HOME=/usr/java/jdk1.8
以上修改JAVA_HOME为绝对路径
修改
etc/hadoop/mapred-site.xml
注意:
etc/hadoop/
目录下并没有这个xml文件,仔细查找,有个mapred-site.xml.template
把这个文件复制,重命名为mapred-site.xml
并修改为:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>192.168.0.181:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>192.168.0.181:19888</value>
</property>
</configuration>
修改
etc/hadoop/yarn-env.sh
在其中找到export JAVA_HOME
并去掉注释,编辑java地址export JAVA_HOME=/usr/java/jdk1.8
修改
etc/hadoop/slaves
添加当前主机ip
至此,基本配置已经完毕
3. 列表项目
hadoop目录下执行如下指令,进行编译
./bin/hdfs namenode –format
出现如上图,表示编译成功。
4. 关闭防火墙:
关闭防火墙服务:systemctl stop firewalld.service
使防火墙服务不随机器启动:systemctl disable firewalld.service
开启Hadoop
服务
./sbin/start-all.sh
输入jps
查看相关节点是否开启
打开浏览器:地址栏输入http://192.168.0.181:8088
使用过程中遇到的问题:
问题一:nameNode节点无法启动,jps目录缺少相应活动程序
在第一次格式化dfs
后启动并使用了Hadoop
,后来又重新执行了格式化命令hdfs namenode –format
这时namenode
的clusterID
会重新生成,而datanode
的clusterID
保持不变。
从而导致两者的id不一致,出现一系列错误。
解决办法:
到hadoop/hdfs
目录下分别查看data/current
下的VERSION
和name/current
下的VERSION
文件对比两文件中的clusterID
是否相同,若不同,使用name/current
下的VERSION
中的clusterID
覆盖data/current
下的clusterID
. 修改后重新启动Hadoop
即可问题二:如何配置单机互信?
每次启动和关闭Hadoop的时候,都需要频繁输入多次密码,通过配置单机互信或者多机互信来简化操作:
解决办法:
使用指令:ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
随后:cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
并执行:chmod 600 .ssh/authorized_keys
即可。-
问题三:在完全分布式模式下运行失败,无法登陆或没有访问权限
解决办法:
修改etc/hadoop/hdfs-site.xml
添加<property> <name>dfs.permissions</name> <value>false</value> </property>