欢迎使用CSDN-markdown编辑器

来源:互联网 发布:时光在飞逝生命知多少 编辑:程序博客网 时间:2024/05/17 12:25

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_144export 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.gzsudo 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 hadoopsudo passwd hadoopchown -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 localhostssh-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 默认端口 配置 用途说明 HDFS NameNode 50470 9871 dfs.namenode.https-address https服务的端口 HDFS NameNode 50070 9870 dfs.namenode.https-address http服务的端口 HDFS NameNode 8020 9820 fs.defaultFS 接收Client连接的RPC端口,用于获取文件系统metadata信息。 HDFS DataNode 50020 9867 dfs.datanode.ipc.address ipc服务的端口 HDFS DataNode 50010 9866 dfs.datanode.address datanode服务端口,用于数据传输 HDFS DataNode 50475 9865 dfs.datanode.https.address https服务的端口 HDFS DataNode 50075 9864 dfs.datanode.http.address http服务的端口

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

原创粉丝点击