欢迎使用CSDN-markdown编辑器

Linux下Hadoop3.0.0-alpha4 伪分布式配置

刚刚开始学习Hadoop,从官网下载了最新的版本,尝试安装Hadoop3.0,按照网上找到的教程(大多是Hadoop2.x版本的)进行配置,过程中发生了一些错误,将安装过程和错误记录如下:

  1. 安装java并配置环境
  2. 安装Hadoop3.0.0
  3. 安装ssh
  4. 配置伪分布式环境

一、 安装java并配置环境

从官网下载Jdk1.8,地址为:
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
按照操作系统选择对应的安装包,如果使用RedHat/CentOS系统可以选择rpm包下载,安装时使用rpm -ivh jdk-8u144-linux-x64.rpm命令安装即可,注意最后一个参数是实际下载到的rpm包的文件名,安装完成后,环境变量已经自动设置完毕,不需要手动设置。
我使用的是deepin系统,由于官方不提供deb包,只好下载了tar.gz包,下载到的文件名:jdk-8u144-linux-x64.tar.gz,使用tar -xzvf jdk-8u144-linux-x64.tar.gz 命令解压,将解压后得到的目录复制到了/usr/local/目录下sudo cp -r jdk1.8.0_144/ /usr/local/,此时java的环境变量还没有配置。
进入/etc/profile.d/目录,使用vim java_path.sh新建文件并写入下面的内容:

# 路径要根据jdk实际的存放位置写
export JAVA_HOME=/usr/local/jdk1.8.0_144
export PATH=$PATH:$JAVA_HOME/bin
#千万不要忘记最开始的那个'.'!!!,第一个点代表当前路径
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar

之后执行source /etc/profile可以使刚刚新建的java_path.sh文件生效,此时执行java -version应该可以打印出jdk的版本信息,大概三、四行的样子。
至此jdk的环境配置完毕。

二、 安装Hadoop3.0.0

下载地址:
http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-3.0.0-alpha4/hadoop-3.0.0-alpha4.tar.gz
下载到的文件是tar.gz包,使用tar命令解压,同样将解压得到的目录复制到/usr/local目录:

tar -xzvf hadoop-3.0.0-alpha4.tar.gz
sudo cp -r hadoop-3.0.0-alpha4/ /usr/local/

为了方便,我在local中修改了目录的名字:
/usr/local目录中的内容
截图中有tomcat和eclipse,请忽略,这两个不必须。
最好为hadoop新建用户,并将hadoop目录的所有者修改为hadoop,刚刚复制到/usr/local的目录的所有者应该是root:

sudo useradd -mUs /bin/bash hadoop
sudo passwd hadoop
chown -R hadoop:hadoop hadoop3.0.0/

此时进入到/usr/local/hadoop3.0.0/目录下执行./bin/hadoop version如果输出了hadoop的版本信息,说明hadoop已经安装完成,hadoop默认以非分布式模式运行。

到此为止,非分布模式的hadoop已经配置完成,如果不需要伪分布模式运行,可以不执行下面的步骤。

三、 安装并配置ssh

要使用分布式的hadoop必须安装ssh服务,伪分布式同样需要安装ssh,否则启动hdfs时会报错,后面再说。

我使用的系统使用apt-get作为包管理器,安装ssh只需要执行sudo apt-get install openssh-server命令即可,安装完成后执行ps -e | grep ssh检查ssh服务是否已经启动,如果列出的结果中只有ssh-agent说明ssh服务还没有运行,执行sudo service ssh start命令启动ssh服务,之后再次检查ssh服务是否已经启动,此时应该能够看到sshd字样,说明已经成功启动。
切换到刚刚新建的hadoop用户,尝试登录ssh:

su hadoop
#输入hadoop用户的密码
ssh localhost

第一次登录时可能会有如下提示,输入yes按回车即可。成功登录后运行w命令可以看到登录的用户,执行exit退出ssh:
这里写图片描述
为hadoop用户设置免密码登录,这一步也是必须的,否则也会在启动hadoop时报错:

cd ~/.ssh
#如果没有这个目录,再执行一遍ssh localhost
ssh-keygen -t rsa
#一路回车下去
cat id_rsa.pub >> ./authorized_keys

此时再登录ssh就不需要输入密码了:
这里写图片描述
这里写图片描述

四、 配置伪分布式环境

配置伪分布式环境主要是要修改hadoop的配置文件,进入hadoop目录下的etc/hadoop/目录(注意是hadoop安装目录下的etc目录,不是根目录下的)要修改的配置文件主要有两个,默认情况下这两个文件的只有<configuration>根节点,修改后的配置文件如下:
配置文件内容参考的是:http://www.powerxing.com/install-hadoop/
core-site.xml

<configuration>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>file:/usr/local/hadoop3.0.0/tmp</value>
                <description>Abase for other temporary directipons.</description>
        </property>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://localhost:9000</value>
        </property>
</configuration>

hdfs-site.xml

<configuration>
        <property>
                <name>dfs.replication</name>
                <value>1</value>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:/usr/local/hadoop3.0.0/tmp/dfs/name</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:/usr/local/hadoop3.0.0/tmp/dfs/data</value>
        </property>
</configuration>

配置完成后将Namenode格式化,在此之前最好确定hdfs-site.xml文件中dfs.namenode.name.dir、dfs.datanode.data.dir节点中配置的路径存在(我没有试过如果不存在会不会报错)。

/usr/local/hadoop3.0.0/bin/hdfs namenode -format 

执行该命令时有确认提示,这里要输入’Y’,注意是大写的,输入小写的这里也能通过,但是据说在查看NameNode的http服务的端口时会有打不开的现象http://www.codeweblog.com/%E6%97%A0%E6%B3%95%E8%BF%9E%E6%8E%A5http-localhost-50070%E9%97%AE%E9%A2%98%E5%A4%84%E7%90%86/
这里写图片描述
格式化完成后会有成功的提示,不在最后一行,需要找一下:
这里写图片描述
进入hadoop的安装目录,执行./sbin/start-dfs.sh,开启 NameNode 和 DataNode 守护进程,启动完成后可以使用jps命令查看进程,正常情况下应该列出图中的四个:
这里写图片描述

错误处理

1、 权限拒绝Permission denied

执行./sbin/start-dfs.sh时报错,出现Permission denied (publickey,password).
检查当前登录用户的权限(经过前面的操作,权限一般是满足要求的),可能是用户权限不够引起的。
更有可能的原因是没有使用ssh登录,这也是为什么分布式hadoop必须要安装ssh的原因!!!
按照上面ssh配置的方法进行配置,当执行ssh localhost能够实现免密码登录的时候,再启动守护进程即可成功,

2、 没有找到JAVA_HOME

启动守护进程时报错:Error: JAVA_HOME is not set and could not be found. 提示JAVA_HOME没有找到,此时使用echo $JAVA_HOME检查是否真的没有配置JAVA_HOME环境变量,如果没有输出任何结果,应按照Java配置一节中的方法配置环境变量。
参考http://wlb.wlb.blog.163.com/blog/static/467413201501451724327/
如果已经配置了JAVA_HOME,依然报这个错误就需要修改etc/hadoop/hadoop-env.sh 文件,在文件最后添加:

export JAVA_HOME=/usr/local/jdk1.8.0_144

3、 Datanode没有启动

某些情况下可能发现没有Datanode,这可能是因为Datanode和Namenode的clusterID不一致导致的,发生这种情况时Datanode启动会失败,失败原因会输出到日志中,但是终端中没有任何提示。将Datanode的clusterID手动修改为Namenode的即可:
这里写图片描述
重新启动守护进程,问题应该已经解决了。

4、 NameNode的http服务端口

在hadoop2.x版本中,NameNode 和 DataNode 守护进程启动后,在浏览器中输入localhost:50070可以打开监控页面,查看 NameNode 和 Datanode 信息。在hadoop3.0版本中,访问该地址会显示localhost拒绝了连接请求,这时需要执行start-all.sh启动两个manager进程。
这里写图片描述
另外,3.0版本与2.x版本的端口不一致:https://issues.apache.org/jira/browse/HDFS-9427
localhost:50070在3.0版本中对应的地址是http://localhost:9870
这里写图片描述

部分变更的端口对照表:

组件节点2.x 默认端口3.0 默认端口配置用途说明
HDFSNameNode504709871dfs.namenode.https-addresshttps服务的端口
HDFSNameNode500709870dfs.namenode.https-addresshttp服务的端口
HDFSNameNode80209820fs.defaultFS接收Client连接的RPC端口,用于获取文件系统metadata信息。
HDFSDataNode500209867dfs.datanode.ipc.addressipc服务的端口
HDFSDataNode500109866dfs.datanode.addressdatanode服务端口,用于数据传输
HDFSDataNode504759865dfs.datanode.https.addresshttps服务的端口
HDFSDataNode500759864dfs.datanode.http.addresshttp服务的端口

注:2.x端口用途参考http://blog.csdn.net/qq_20120669/article/details/53332482

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值